59 lines
2.4 KiB
Diff
59 lines
2.4 KiB
Diff
From fb667ce78c9eebc2880212d6c9e53240b95fad8e Mon Sep 17 00:00:00 2001
|
|
From: Thomas Gleixner <tglx@linutronix.de>
|
|
Date: Thu, 1 Dec 2011 00:04:00 +0100
|
|
Subject: [PATCH 069/278] wait: Provide __wake_up_all_locked
|
|
|
|
For code which protects the waitqueue itself with another lock it
|
|
makes no sense to acquire the waitqueue lock for wakeup all. Provide
|
|
__wake_up_all_locked.
|
|
|
|
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|
Cc: stable-rt@vger.kernel.org
|
|
---
|
|
include/linux/wait.h | 5 +++--
|
|
kernel/sched.c | 4 ++--
|
|
2 files changed, 5 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/include/linux/wait.h b/include/linux/wait.h
|
|
index 3efc9f3..1e904b8 100644
|
|
--- a/include/linux/wait.h
|
|
+++ b/include/linux/wait.h
|
|
@@ -157,7 +157,7 @@ void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key);
|
|
void __wake_up_locked_key(wait_queue_head_t *q, unsigned int mode, void *key);
|
|
void __wake_up_sync_key(wait_queue_head_t *q, unsigned int mode, int nr,
|
|
void *key);
|
|
-void __wake_up_locked(wait_queue_head_t *q, unsigned int mode);
|
|
+void __wake_up_locked(wait_queue_head_t *q, unsigned int mode, int nr);
|
|
void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr);
|
|
void __wake_up_bit(wait_queue_head_t *, void *, int);
|
|
int __wait_on_bit(wait_queue_head_t *, struct wait_bit_queue *, int (*)(void *), unsigned);
|
|
@@ -170,7 +170,8 @@ wait_queue_head_t *bit_waitqueue(void *, int);
|
|
#define wake_up(x) __wake_up(x, TASK_NORMAL, 1, NULL)
|
|
#define wake_up_nr(x, nr) __wake_up(x, TASK_NORMAL, nr, NULL)
|
|
#define wake_up_all(x) __wake_up(x, TASK_NORMAL, 0, NULL)
|
|
-#define wake_up_locked(x) __wake_up_locked((x), TASK_NORMAL)
|
|
+#define wake_up_locked(x) __wake_up_locked((x), TASK_NORMAL, 1)
|
|
+#define wake_up_all_locked(x) __wake_up_locked((x), TASK_NORMAL, 0)
|
|
|
|
#define wake_up_interruptible(x) __wake_up(x, TASK_INTERRUPTIBLE, 1, NULL)
|
|
#define wake_up_interruptible_nr(x, nr) __wake_up(x, TASK_INTERRUPTIBLE, nr, NULL)
|
|
diff --git a/kernel/sched.c b/kernel/sched.c
|
|
index 231081a..86cc07e 100644
|
|
--- a/kernel/sched.c
|
|
+++ b/kernel/sched.c
|
|
@@ -4823,9 +4823,9 @@ EXPORT_SYMBOL(__wake_up);
|
|
/*
|
|
* Same as __wake_up but called with the spinlock in wait_queue_head_t held.
|
|
*/
|
|
-void __wake_up_locked(wait_queue_head_t *q, unsigned int mode)
|
|
+void __wake_up_locked(wait_queue_head_t *q, unsigned int mode, int nr)
|
|
{
|
|
- __wake_up_common(q, mode, 1, 0, NULL);
|
|
+ __wake_up_common(q, mode, nr, 0, NULL);
|
|
}
|
|
EXPORT_SYMBOL_GPL(__wake_up_locked);
|
|
|
|
--
|
|
1.7.10
|
|
|