Input: evdev - use keyed wakeups
[sfrench/cifs-2.6.git] / drivers / input / evdev.c
index d7dd6fcf2db05a8841e60a4089dd71212d15c476..f54d3d31f61dec99e9480fce5e3788a50221d02b 100644 (file)
@@ -282,7 +282,8 @@ static void evdev_pass_values(struct evdev_client *client,
        spin_unlock(&client->buffer_lock);
 
        if (wakeup)
        spin_unlock(&client->buffer_lock);
 
        if (wakeup)
-               wake_up_interruptible(&evdev->wait);
+               wake_up_interruptible_poll(&evdev->wait,
+                       EPOLLIN | EPOLLOUT | EPOLLRDNORM | EPOLLWRNORM);
 }
 
 /*
 }
 
 /*
@@ -443,7 +444,7 @@ static void evdev_hangup(struct evdev *evdev)
                kill_fasync(&client->fasync, SIGIO, POLL_HUP);
        spin_unlock(&evdev->client_lock);
 
                kill_fasync(&client->fasync, SIGIO, POLL_HUP);
        spin_unlock(&evdev->client_lock);
 
-       wake_up_interruptible(&evdev->wait);
+       wake_up_interruptible_poll(&evdev->wait, EPOLLHUP | EPOLLERR);
 }
 
 static int evdev_release(struct inode *inode, struct file *file)
 }
 
 static int evdev_release(struct inode *inode, struct file *file)
@@ -958,7 +959,7 @@ static int evdev_revoke(struct evdev *evdev, struct evdev_client *client,
        client->revoked = true;
        evdev_ungrab(evdev, client);
        input_flush_device(&evdev->handle, file);
        client->revoked = true;
        evdev_ungrab(evdev, client);
        input_flush_device(&evdev->handle, file);
-       wake_up_interruptible(&evdev->wait);
+       wake_up_interruptible_poll(&evdev->wait, EPOLLHUP | EPOLLERR);
 
        return 0;
 }
 
        return 0;
 }