sched/wait: Add __wake_up_all_locked() API
Commit-ID: 63b2001169e75cd71e917ec953fdab572e3f944a Gitweb: http://git.kernel.org/tip/63b2001169e75cd71e917ec953fdab572e3f944a Author: Thomas Gleixner <[email protected]> AuthorDate: Thu, 1 Dec 2011 00:04:00 +0100 Committer: Ingo Molnar <[email protected]> CommitDate: Thu, 1 Mar 2012 10:28:04 +0100
sched/wait: Add __wake_up_all_locked() API
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().
This is an optimization on the vanilla kernel (to be used by the PCI code) and an important semantic distinction on -rt.
Signed-off-by Thomas Gleixner <[email protected]>
Acked-by Peter Zijlstra <[email protected]>
Signed-off-by Ingo Molnar <[email protected]>
--- include/linux/wait.h | 5 +++-- kernel/sched/core.c | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-)
include/linux/wait.h +3 -2
@@ -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)
kernel/sched/core.c +2 -2
@@ -3418,9 +3418,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);