From patchwork Mon Nov 21 17:29:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 13051477 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 A631BC43219 for ; Mon, 21 Nov 2022 17:30:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229687AbiKURaK (ORCPT ); Mon, 21 Nov 2022 12:30:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52238 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229917AbiKURaJ (ORCPT ); Mon, 21 Nov 2022 12:30:09 -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 6362BC67D9 for ; Mon, 21 Nov 2022 09:30:07 -0800 (PST) Received: by dev0134.prn3.facebook.com (Postfix, from userid 425415) id B193C1B6D6B2; Mon, 21 Nov 2022 09:29:55 -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: [RFC PATCH v4 3/3] io_uring: add api to set napi prefer busy poll Date: Mon, 21 Nov 2022 09:29:53 -0800 Message-Id: <20221121172953.4030697-4-shr@devkernel.io> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221121172953.4030697-1-shr@devkernel.io> References: <20221121172953.4030697-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 --- include/uapi/linux/io_uring.h | 3 ++- io_uring/io_uring.c | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h index 1a713bbafaee..b74021454bf7 100644 --- a/include/uapi/linux/io_uring.h +++ b/include/uapi/linux/io_uring.h @@ -619,7 +619,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 cf0e7cc8ad2e..dd903c71fa20 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -4127,6 +4127,7 @@ 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; @@ -4135,7 +4136,7 @@ static int io_register_napi(struct io_ring_ctx *ctx, void __user *arg) return PTR_ERR(napi); WRITE_ONCE(ctx->napi_busy_poll_to, napi->busy_poll_to); - + WRITE_ONCE(ctx->napi_prefer_busy_poll, !!napi->prefer_busy_poll); kfree(napi); if (copy_to_user(arg, &curr, sizeof(curr))) @@ -4152,12 +4153,14 @@ 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 (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; #else return -EINVAL;