timerfd: add support for keyed wakeups
This prepares timerfd for use with aio poll. Signed-off-by: Christoph Hellwig <hch@lst.de> Tested-by: Avi Kivity <avi@scylladb.com>
This commit is contained in:
parent
1ffaddd029
commit
7dda712818
@ -66,7 +66,7 @@ static void timerfd_triggered(struct timerfd_ctx *ctx)
|
|||||||
spin_lock_irqsave(&ctx->wqh.lock, flags);
|
spin_lock_irqsave(&ctx->wqh.lock, flags);
|
||||||
ctx->expired = 1;
|
ctx->expired = 1;
|
||||||
ctx->ticks++;
|
ctx->ticks++;
|
||||||
wake_up_locked(&ctx->wqh);
|
wake_up_locked_poll(&ctx->wqh, EPOLLIN);
|
||||||
spin_unlock_irqrestore(&ctx->wqh.lock, flags);
|
spin_unlock_irqrestore(&ctx->wqh.lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ void timerfd_clock_was_set(void)
|
|||||||
if (ctx->moffs != moffs) {
|
if (ctx->moffs != moffs) {
|
||||||
ctx->moffs = KTIME_MAX;
|
ctx->moffs = KTIME_MAX;
|
||||||
ctx->ticks++;
|
ctx->ticks++;
|
||||||
wake_up_locked(&ctx->wqh);
|
wake_up_locked_poll(&ctx->wqh, EPOLLIN);
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&ctx->wqh.lock, flags);
|
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);
|
spin_lock_irq(&ctx->wqh.lock);
|
||||||
if (!timerfd_canceled(ctx)) {
|
if (!timerfd_canceled(ctx)) {
|
||||||
ctx->ticks = ticks;
|
ctx->ticks = ticks;
|
||||||
wake_up_locked(&ctx->wqh);
|
wake_up_locked_poll(&ctx->wqh, EPOLLIN);
|
||||||
} else
|
} else
|
||||||
ret = -ECANCELED;
|
ret = -ECANCELED;
|
||||||
spin_unlock_irq(&ctx->wqh.lock);
|
spin_unlock_irq(&ctx->wqh.lock);
|
||||||
|
Loading…
Reference in New Issue
Block a user