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 <tglx@linutronix.de> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/n/tip-ux6m4b8jonb9inx8xafh77ds@git.kernel.org Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
		
							parent
							
								
									ba74c1448f
								
							
						
					
					
						commit
						63b2001169
					
				| @ -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) | ||||
|  | ||||
| @ -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); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user