[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20230518211751.3492982-8-shr@devkernel.io>
Date: Thu, 18 May 2023 14:17:51 -0700
From: Stefan Roesch <shr@...kernel.io>
To: io-uring@...r.kernel.org,
kernel-team@...com
Cc: shr@...kernel.io,
axboe@...nel.dk,
ammarfaizi2@...weeb.org,
netdev@...r.kernel.org,
kuba@...nel.org,
olivier@...llion01.com
Subject: [PATCH v13 7/7] io_uring: add prefer busy poll to register and unregister napi api
This adds the napi prefer busy poll setting to the register and
unregister napi api. When napi is unregistered and arg is specified,
both napi settings: busy poll timeout and the prefer busy poll setting
are copied into the user structure.
Signed-off-by: Stefan Roesch <shr@...kernel.io>
Acked-by: Jakub Kicinski <kuba@...nel.org>
---
include/uapi/linux/io_uring.h | 3 ++-
io_uring/napi.c | 10 +++++++---
2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h
index 278c1a9de78c..16d17d6ab7f7 100644
--- a/include/uapi/linux/io_uring.h
+++ b/include/uapi/linux/io_uring.h
@@ -656,7 +656,8 @@ struct io_uring_buf_reg {
/* argument for IORING_(UN)REGISTER_NAPI */
struct io_uring_napi {
__u32 busy_poll_to;
- __u32 pad;
+ __u8 prefer_busy_poll;
+ __u8 pad[3];
__u64 resv;
};
diff --git a/io_uring/napi.c b/io_uring/napi.c
index 5d5330d66201..5790b2daf1d0 100644
--- a/io_uring/napi.c
+++ b/io_uring/napi.c
@@ -222,16 +222,18 @@ void io_napi_free(struct io_ring_ctx *ctx)
int io_register_napi(struct io_ring_ctx *ctx, void __user *arg)
{
const struct io_uring_napi curr = {
- .busy_poll_to = ctx->napi_busy_poll_to,
+ .busy_poll_to = ctx->napi_busy_poll_to,
+ .prefer_busy_poll = ctx->napi_prefer_busy_poll
};
struct io_uring_napi napi;
if (copy_from_user(&napi, arg, sizeof(napi)))
return -EFAULT;
- if (napi.pad || napi.resv)
+ if (napi.pad[0] || napi.pad[1] || napi.pad[2] || napi.resv)
return -EINVAL;
WRITE_ONCE(ctx->napi_busy_poll_to, napi.busy_poll_to);
+ WRITE_ONCE(ctx->napi_prefer_busy_poll, !!napi.prefer_busy_poll);
if (copy_to_user(arg, &curr, sizeof(curr)))
return -EFAULT;
@@ -250,13 +252,15 @@ int io_register_napi(struct io_ring_ctx *ctx, void __user *arg)
int io_unregister_napi(struct io_ring_ctx *ctx, void __user *arg)
{
const struct io_uring_napi curr = {
- .busy_poll_to = ctx->napi_busy_poll_to,
+ .busy_poll_to = ctx->napi_busy_poll_to,
+ .prefer_busy_poll = ctx->napi_prefer_busy_poll
};
if (arg && copy_to_user(arg, &curr, sizeof(curr)))
return -EFAULT;
WRITE_ONCE(ctx->napi_busy_poll_to, 0);
+ WRITE_ONCE(ctx->napi_prefer_busy_poll, false);
return 0;
}
--
2.39.1
Powered by blists - more mailing lists