forked from mirrors/linux
		
	epoll keyed wakeups: make sockets use keyed wakeups
Add support for event-aware wakeups to the sockets code. Events are delivered to the wakeup target, so that epoll can avoid spurious wakeups for non-interesting events. Signed-off-by: Davide Libenzi <davidel@xmailserver.org> Acked-by: Alan Cox <alan@lxorguk.ukuu.org.uk> Cc: Ingo Molnar <mingo@elte.hu> Cc: David Miller <davem@davemloft.net> Cc: William Lee Irwin III <wli@movementarian.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									c0da377536
								
							
						
					
					
						commit
						37e5540b3c
					
				
					 1 changed files with 5 additions and 3 deletions
				
			
		|  | @ -1677,7 +1677,7 @@ static void sock_def_error_report(struct sock *sk) | |||
| { | ||||
| 	read_lock(&sk->sk_callback_lock); | ||||
| 	if (sk->sk_sleep && waitqueue_active(sk->sk_sleep)) | ||||
| 		wake_up_interruptible(sk->sk_sleep); | ||||
| 		wake_up_interruptible_poll(sk->sk_sleep, POLLERR); | ||||
| 	sk_wake_async(sk, SOCK_WAKE_IO, POLL_ERR); | ||||
| 	read_unlock(&sk->sk_callback_lock); | ||||
| } | ||||
|  | @ -1686,7 +1686,8 @@ static void sock_def_readable(struct sock *sk, int len) | |||
| { | ||||
| 	read_lock(&sk->sk_callback_lock); | ||||
| 	if (sk->sk_sleep && waitqueue_active(sk->sk_sleep)) | ||||
| 		wake_up_interruptible_sync(sk->sk_sleep); | ||||
| 		wake_up_interruptible_sync_poll(sk->sk_sleep, POLLIN | | ||||
| 						POLLRDNORM | POLLRDBAND); | ||||
| 	sk_wake_async(sk, SOCK_WAKE_WAITD, POLL_IN); | ||||
| 	read_unlock(&sk->sk_callback_lock); | ||||
| } | ||||
|  | @ -1700,7 +1701,8 @@ static void sock_def_write_space(struct sock *sk) | |||
| 	 */ | ||||
| 	if ((atomic_read(&sk->sk_wmem_alloc) << 1) <= sk->sk_sndbuf) { | ||||
| 		if (sk->sk_sleep && waitqueue_active(sk->sk_sleep)) | ||||
| 			wake_up_interruptible_sync(sk->sk_sleep); | ||||
| 			wake_up_interruptible_sync_poll(sk->sk_sleep, POLLOUT | | ||||
| 						POLLWRNORM | POLLWRBAND); | ||||
| 
 | ||||
| 		/* Should agree with poll, otherwise some programs break */ | ||||
| 		if (sock_writeable(sk)) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Davide Libenzi
						Davide Libenzi