timerfd: add support for keyed wakeups
authorChristoph Hellwig <hch@lst.de>
Mon, 16 Jul 2018 10:25:50 +0000 (12:25 +0200)
committerChristoph Hellwig <hch@lst.de>
Mon, 6 Aug 2018 08:24:08 +0000 (10:24 +0200)
This prepares timerfd for use with aio poll.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Tested-by: Avi Kivity <avi@scylladb.com>
fs/timerfd.c

index cdad49d..f6c54fd 100644 (file)
@@ -66,7 +66,7 @@ static void timerfd_triggered(struct timerfd_ctx *ctx)
        spin_lock_irqsave(&ctx->wqh.lock, flags);
        ctx->expired = 1;
        ctx->ticks++;
-       wake_up_locked(&ctx->wqh);
+       wake_up_locked_poll(&ctx->wqh, EPOLLIN);
        spin_unlock_irqrestore(&ctx->wqh.lock, flags);
 }
 
@@ -107,7 +107,7 @@ void timerfd_clock_was_set(void)
                if (ctx->moffs != moffs) {
                        ctx->moffs = KTIME_MAX;
                        ctx->ticks++;
-                       wake_up_locked(&ctx->wqh);
+                       wake_up_locked_poll(&ctx->wqh, EPOLLIN);
                }
                spin_unlock_irqrestore(&ctx->wqh.lock, flags);
        }
@@ -345,7 +345,7 @@ static long timerfd_ioctl(struct file *file, unsigned int cmd, unsigned long arg
                spin_lock_irq(&ctx->wqh.lock);
                if (!timerfd_canceled(ctx)) {
                        ctx->ticks = ticks;
-                       wake_up_locked(&ctx->wqh);
+                       wake_up_locked_poll(&ctx->wqh, EPOLLIN);
                } else
                        ret = -ECANCELED;
                spin_unlock_irq(&ctx->wqh.lock);