Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ee62c6b2 authored by Sha Zhengju's avatar Sha Zhengju Committed by Linus Torvalds
Browse files

eventfd: change int to __u64 in eventfd_signal()



eventfd_ctx->count is an __u64 counter which is allowed to reach
ULLONG_MAX.  eventfd_write() adds a __u64 value to "count", but the kernel
side eventfd_signal() only adds an int value to it.  Make them consistent.

[akpm@linux-foundation.org: update interface documentation]
Signed-off-by: default avatarSha Zhengju <handai.szj@taobao.com>
Cc: Davide Libenzi <davidel@xmailserver.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 71ca97da
Loading
Loading
Loading
Loading
+4 −8
Original line number Original line Diff line number Diff line
@@ -46,20 +46,16 @@ struct eventfd_ctx {
 * value, and we signal this as overflow condition by returining a POLLERR
 * value, and we signal this as overflow condition by returining a POLLERR
 * to poll(2).
 * to poll(2).
 *
 *
 * Returns @n in case of success, a non-negative number lower than @n in case
 * Returns the amount by which the counter was incrememnted.  This will be less
 * of overflow, or the following error codes:
 * than @n if the counter has overflowed.
 *
 * -EINVAL    : The value of @n is negative.
 */
 */
int eventfd_signal(struct eventfd_ctx *ctx, int n)
__u64 eventfd_signal(struct eventfd_ctx *ctx, __u64 n)
{
{
	unsigned long flags;
	unsigned long flags;


	if (n < 0)
		return -EINVAL;
	spin_lock_irqsave(&ctx->wqh.lock, flags);
	spin_lock_irqsave(&ctx->wqh.lock, flags);
	if (ULLONG_MAX - ctx->count < n)
	if (ULLONG_MAX - ctx->count < n)
		n = (int) (ULLONG_MAX - ctx->count);
		n = ULLONG_MAX - ctx->count;
	ctx->count += n;
	ctx->count += n;
	if (waitqueue_active(&ctx->wqh))
	if (waitqueue_active(&ctx->wqh))
		wake_up_locked_poll(&ctx->wqh, POLLIN);
		wake_up_locked_poll(&ctx->wqh, POLLIN);
+1 −1
Original line number Original line Diff line number Diff line
@@ -34,7 +34,7 @@ void eventfd_ctx_put(struct eventfd_ctx *ctx);
struct file *eventfd_fget(int fd);
struct file *eventfd_fget(int fd);
struct eventfd_ctx *eventfd_ctx_fdget(int fd);
struct eventfd_ctx *eventfd_ctx_fdget(int fd);
struct eventfd_ctx *eventfd_ctx_fileget(struct file *file);
struct eventfd_ctx *eventfd_ctx_fileget(struct file *file);
int eventfd_signal(struct eventfd_ctx *ctx, int n);
__u64 eventfd_signal(struct eventfd_ctx *ctx, __u64 n);
ssize_t eventfd_ctx_read(struct eventfd_ctx *ctx, int no_wait, __u64 *cnt);
ssize_t eventfd_ctx_read(struct eventfd_ctx *ctx, int no_wait, __u64 *cnt);
int eventfd_ctx_remove_wait_queue(struct eventfd_ctx *ctx, wait_queue_t *wait,
int eventfd_ctx_remove_wait_queue(struct eventfd_ctx *ctx, wait_queue_t *wait,
				  __u64 *cnt);
				  __u64 *cnt);