From patchwork Fri Feb 3 06:08:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 13127037 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0FC6EC636CC for ; Fri, 3 Feb 2023 06:09:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232200AbjBCGJe (ORCPT ); Fri, 3 Feb 2023 01:09:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51444 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232004AbjBCGJS (ORCPT ); Fri, 3 Feb 2023 01:09:18 -0500 Received: from 66-220-144-178.mail-mxout.facebook.com (66-220-144-178.mail-mxout.facebook.com [66.220.144.178]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 889E2728DE for ; Thu, 2 Feb 2023 22:09:09 -0800 (PST) Received: by dev0134.prn3.facebook.com (Postfix, from userid 425415) id AD200629679F; Thu, 2 Feb 2023 22:08:52 -0800 (PST) From: Stefan Roesch To: kernel-team@fb.com Cc: shr@devkernel.io, axboe@kernel.dk, olivier@trillion01.com, netdev@vger.kernel.org, io-uring@vger.kernel.org, kuba@kernel.org, ammarfaizi2@gnuweeb.org Subject: [PATCH v7 3/3] io_uring: add api to set napi prefer busy poll Date: Thu, 2 Feb 2023 22:08:50 -0800 Message-Id: <20230203060850.3060238-4-shr@devkernel.io> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230203060850.3060238-1-shr@devkernel.io> References: <20230203060850.3060238-1-shr@devkernel.io> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org This adds an api to register and unregister the napi prefer busy poll setting from liburing. To be able to use this functionality, the corresponding liburing patch is needed. Signed-off-by: Stefan Roesch Acked-by: Jakub Kicinski --- include/uapi/linux/io_uring.h | 3 ++- io_uring/io_uring.c | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h index fce4533c81c3..e166bbe5bad8 100644 --- a/include/uapi/linux/io_uring.h +++ b/include/uapi/linux/io_uring.h @@ -645,7 +645,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/io_uring.c b/io_uring/io_uring.c index 5fe3aa9a1b57..ddf77744e002 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -4251,15 +4251,17 @@ static int io_register_napi(struct io_ring_ctx *ctx, void __user *arg) #ifdef CONFIG_NET_RX_BUSY_POLL const struct io_uring_napi curr = { .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; @@ -4275,6 +4277,7 @@ static int io_unregister_napi(struct io_ring_ctx *ctx, void __user *arg) #ifdef CONFIG_NET_RX_BUSY_POLL const struct io_uring_napi curr = { .busy_poll_to = ctx->napi_busy_poll_to, + .prefer_busy_poll = ctx->napi_prefer_busy_poll }; if (arg) { @@ -4283,6 +4286,7 @@ static int io_unregister_napi(struct io_ring_ctx *ctx, void __user *arg) } WRITE_ONCE(ctx->napi_busy_poll_to, 0); + WRITE_ONCE(ctx->napi_prefer_busy_poll, false); return 0; #else return -EOPNOTSUPP;