From patchwork Tue Nov 15 07:09:00 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 13043277 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 7A968C4321E for ; Tue, 15 Nov 2022 07:09:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232558AbiKOHJi (ORCPT ); Tue, 15 Nov 2022 02:09:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37274 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232541AbiKOHJ1 (ORCPT ); Tue, 15 Nov 2022 02:09:27 -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 E4C0964FE for ; Mon, 14 Nov 2022 23:09:19 -0800 (PST) Received: by dev0134.prn3.facebook.com (Postfix, from userid 425415) id 79C9915F0F6D; Mon, 14 Nov 2022 23:09:07 -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 v3 3/3] io_uring: add api to set napi prefer busy poll Date: Mon, 14 Nov 2022 23:09:00 -0800 Message-Id: <20221115070900.1788837-4-shr@devkernel.io> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221115070900.1788837-1-shr@devkernel.io> References: <20221115070900.1788837-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 | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h index 9b5c1df0d1d8..25b91a4dc103 100644 --- a/include/uapi/linux/io_uring.h +++ b/include/uapi/linux/io_uring.h @@ -490,7 +490,8 @@ enum { /* register a range of fixed file slots for automatic slot allocation */ IORING_REGISTER_FILE_ALLOC_RANGE = 25, - /* set/clear busy poll timeout */ + /* set/clear busy poll settings */ + IORING_REGISTER_NAPI_PREFER_BUSY_POLL = 26, IORING_REGISTER_NAPI_BUSY_POLL_TIMEOUT = 27, /* this goes last */ diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index f6c9c9cbe0f8..eca9f7540123 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -4122,6 +4122,17 @@ static __cold int io_register_iowq_max_workers(struct io_ring_ctx *ctx, return ret; } +static int io_register_napi_prefer_busy_poll(struct io_ring_ctx *ctx, + unsigned int prefer_napi) +{ +#ifdef CONFIG_NET_RX_BUSY_POLL + WRITE_ONCE(ctx->napi_prefer_busy_poll, !!prefer_napi); + return 0; +#else + return -EINVAL; +#endif +} + static int io_register_napi_busy_poll_timeout(struct io_ring_ctx *ctx, unsigned int to) { #ifdef CONFIG_NET_RX_BUSY_POLL @@ -4292,6 +4303,12 @@ static int __io_uring_register(struct io_ring_ctx *ctx, unsigned opcode, break; ret = io_register_file_alloc_range(ctx, arg); break; + case IORING_REGISTER_NAPI_PREFER_BUSY_POLL: + ret = -EINVAL; + if (arg || !nr_args) + break; + ret = io_register_napi_prefer_busy_poll(ctx, nr_args); + break; case IORING_REGISTER_NAPI_BUSY_POLL_TIMEOUT: ret = -EINVAL; if (arg || !nr_args)