From patchwork Wed Feb 1 22:22:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 13125064 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 81363C05027 for ; Wed, 1 Feb 2023 22:45:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230369AbjBAWpP (ORCPT ); Wed, 1 Feb 2023 17:45:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58222 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229473AbjBAWpN (ORCPT ); Wed, 1 Feb 2023 17:45:13 -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 C3DA138674 for ; Wed, 1 Feb 2023 14:45:12 -0800 (PST) Received: by dev0134.prn3.facebook.com (Postfix, from userid 425415) id CF82960FCABC; Wed, 1 Feb 2023 14:23:25 -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 Subject: [PATCH v6 3/3] io_uring: add api to set napi prefer busy poll Date: Wed, 1 Feb 2023 14:22:54 -0800 Message-Id: <20230201222254.744422-4-shr@devkernel.io> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230201222254.744422-1-shr@devkernel.io> References: <20230201222254.744422-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 f2509f0afc7b..90dac6c001ac 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 -EINVAL;