mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-25 08:02:56 +00:00
annotate poll-related wait keys
__poll_t is also used as wait key in some waitqueues. Verify that wait_..._poll() gets __poll_t as key and provide a helper for wakeup functions to get back to that __poll_t value. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
e6c8adca20
commit
3ad6f93e98
9 changed files with 19 additions and 18 deletions
|
@ -1117,6 +1117,7 @@ static int ep_poll_callback(wait_queue_entry_t *wait, unsigned mode, int sync, v
|
|||
unsigned long flags;
|
||||
struct epitem *epi = ep_item_from_wait(wait);
|
||||
struct eventpoll *ep = epi->ep;
|
||||
__poll_t pollflags = key_to_poll(key);
|
||||
int ewake = 0;
|
||||
|
||||
spin_lock_irqsave(&ep->lock, flags);
|
||||
|
@ -1138,7 +1139,7 @@ static int ep_poll_callback(wait_queue_entry_t *wait, unsigned mode, int sync, v
|
|||
* callback. We need to be able to handle both cases here, hence the
|
||||
* test for "key" != NULL before the event match test.
|
||||
*/
|
||||
if (key && !((unsigned long) key & epi->event.events))
|
||||
if (pollflags && !(pollflags & epi->event.events))
|
||||
goto out_unlock;
|
||||
|
||||
/*
|
||||
|
@ -1175,8 +1176,8 @@ static int ep_poll_callback(wait_queue_entry_t *wait, unsigned mode, int sync, v
|
|||
*/
|
||||
if (waitqueue_active(&ep->wq)) {
|
||||
if ((epi->event.events & EPOLLEXCLUSIVE) &&
|
||||
!((unsigned long)key & POLLFREE)) {
|
||||
switch ((unsigned long)key & EPOLLINOUT_BITS) {
|
||||
!(pollflags & POLLFREE)) {
|
||||
switch (pollflags & EPOLLINOUT_BITS) {
|
||||
case POLLIN:
|
||||
if (epi->event.events & POLLIN)
|
||||
ewake = 1;
|
||||
|
@ -1205,7 +1206,7 @@ out_unlock:
|
|||
if (!(epi->event.events & EPOLLEXCLUSIVE))
|
||||
ewake = 1;
|
||||
|
||||
if ((unsigned long)key & POLLFREE) {
|
||||
if (pollflags & POLLFREE) {
|
||||
/*
|
||||
* If we race with ep_remove_wait_queue() it can miss
|
||||
* ->whead = NULL and do another remove_wait_queue() after
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue