From patchwork Mon Nov 7 17:53:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 13035010 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 9D886C43217 for ; Mon, 7 Nov 2022 17:56:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233016AbiKGR4k (ORCPT ); Mon, 7 Nov 2022 12:56:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59514 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232958AbiKGRz1 (ORCPT ); Mon, 7 Nov 2022 12:55: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 2BFCF24BF2 for ; Mon, 7 Nov 2022 09:54:28 -0800 (PST) Received: by dev0134.prn3.facebook.com (Postfix, from userid 425415) id AAB3DF6B964; Mon, 7 Nov 2022 09:54:04 -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: [RFC PATCH v2 1/4] liburing: add api to set napi busy poll timeout Date: Mon, 7 Nov 2022 09:53:54 -0800 Message-Id: <20221107175357.2733763-2-shr@devkernel.io> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20221107175357.2733763-1-shr@devkernel.io> References: <20221107175357.2733763-1-shr@devkernel.io> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org This adds the two functions to register and unregister the napi busy poll timeout: - io_uring_register_napi_busy_poll_timeout - io_uring_unregister_napi_busy_poll_timeout Signed-off-by: Stefan Roesch --- src/include/liburing.h | 4 ++++ src/include/liburing/io_uring.h | 4 ++++ src/liburing.map | 8 ++++++++ src/register.c | 15 +++++++++++++++ 4 files changed, 31 insertions(+) diff --git a/src/include/liburing.h b/src/include/liburing.h index 12a703f..6722fa2 100644 --- a/src/include/liburing.h +++ b/src/include/liburing.h @@ -235,6 +235,10 @@ int io_uring_register_sync_cancel(struct io_uring *ring, int io_uring_register_file_alloc_range(struct io_uring *ring, unsigned off, unsigned len); +int io_uring_register_napi_busy_poll_timeout(struct io_uring *ring, + unsigned int to); +int io_uring_unregister_napi_busy_poll_timeout(struct io_uring *ring); + int io_uring_get_events(struct io_uring *ring); int io_uring_submit_and_get_events(struct io_uring *ring); diff --git a/src/include/liburing/io_uring.h b/src/include/liburing/io_uring.h index a3e0920..0919d9e 100644 --- a/src/include/liburing/io_uring.h +++ b/src/include/liburing/io_uring.h @@ -499,6 +499,10 @@ enum { /* register a range of fixed file slots for automatic slot allocation */ IORING_REGISTER_FILE_ALLOC_RANGE = 25, + /* set/clear busy poll timeout */ + IORING_REGISTER_NAPI_BUSY_POLL_TIMEOUT = 26, + IORING_UNREGISTER_NAPI_BUSY_POLL_TIMEOUT= 27, + /* this goes last */ IORING_REGISTER_LAST }; diff --git a/src/liburing.map b/src/liburing.map index 06c64f8..793766e 100644 --- a/src/liburing.map +++ b/src/liburing.map @@ -60,6 +60,8 @@ LIBURING_2.3 { global: io_uring_register_sync_cancel; io_uring_register_file_alloc_range; + io_uring_register_busy_poll_timeout; + io_uring_unregister_busy_poll_timeout; io_uring_enter; io_uring_enter2; io_uring_setup; @@ -67,3 +69,9 @@ LIBURING_2.3 { io_uring_get_events; io_uring_submit_and_get_events; } LIBURING_2.2; + +LIBURING_2.4 { + global: + io_uring_napi_register_busy_poll_timeout; + io_uring_napi_unregister_busy_poll_timeout; +} LIBURING_2.3; diff --git a/src/register.c b/src/register.c index e849825..ffbfb8a 100644 --- a/src/register.c +++ b/src/register.c @@ -367,3 +367,18 @@ int io_uring_register_file_alloc_range(struct io_uring *ring, IORING_REGISTER_FILE_ALLOC_RANGE, &range, 0); } + +int io_uring_register_napi_busy_poll_timeout(struct io_uring *ring, + unsigned int to) +{ + return __sys_io_uring_register(ring->ring_fd, + IORING_REGISTER_NAPI_BUSY_POLL_TIMEOUT, + NULL, to); +} + +int io_uring_unregister_napi_busy_poll_timeout(struct io_uring *ring) +{ + return __sys_io_uring_register(ring->ring_fd, + IORING_UNREGISTER_NAPI_BUSY_POLL_TIMEOUT, + NULL, 0); +}