Эх сурвалжийг харах

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>
Christoph Hellwig 7 жил өмнө
parent
commit
7dda712818
1 өөрчлөгдсөн 3 нэмэгдсэн , 3 устгасан
  1. 3 3
      fs/timerfd.c

+ 3 - 3
fs/timerfd.c

@@ -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);