From patchwork Mon Nov 1 18:40:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Mattias_R=C3=B6nnblom?= X-Patchwork-Id: 103364 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 45684A0548; Mon, 1 Nov 2021 19:40:32 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 12C2E410E8; Mon, 1 Nov 2021 19:40:32 +0100 (CET) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40079.outbound.protection.outlook.com [40.107.4.79]) by mails.dpdk.org (Postfix) with ESMTP id 006AA40E28 for ; Mon, 1 Nov 2021 19:40:29 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DidJyJNflvZHQ7nhzzwc6R2Zr4boWNMwr6ReUfYBN/Dw59vz/aOmaKO21lDnoSgRj/FqQMsyfvlZoqbm5QFajfmunhindhO5tSznPwgfocoewb4MwFMmI4jBjY+aAC0or6+/3W9Q8n87DZXd3CXxkcS0atWdr7OZ4Ik0sOS4A/TPsQ6w8B3BH2MOJtWnATQk2RrgU18+aGRrZe2wqfPsSSGh96ssTlFSZbplcfTwg6fvsEwXFkCDU4fkxpK0PZzOKomOZOz8epIGH6nhqMCjhUiBDtdXZX75SsWllisy95LB6YCHF2rYyC7Jr/BDa8sMEx+Yoa0URmGReiH3ufXOGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=H1pvVw5Nmc8jqXYSkPsHN80/ZWjdoxrt+0NcItdtVzI=; b=RF1rA+0lGcalNCktt+nfHqMkB9qPzX3zSNDpOMgdIqi+D5R7wkyqFtqU3LSHnpdFvzNdNOxPxJDxujpLv1nsGWHyCaZFzE9TrCblMvgOf8dGYDL8qk5mIywg8lZVnuXE1z/pQiFEuixgRc5B9g9/R3gJj/sWARRpXKwhGNwqUG3jxOKijXWLle53IiPs3A8EpOigXSsrytwhTE8hI+xQD5s0WGrtxIcPeep8R35VldrsfjwUW+CZmeiNPAx4PB9TYNh+dvJCHLr+gkJx0Itk84FQI1hZMffSZouDDFfbW7ibLzzaLMp2HgXW0Jni0OiEb1xfpL1/rBka9giVTRKkYA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 192.176.1.74) smtp.rcpttodomain=dpdk.org smtp.mailfrom=ericsson.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=ericsson.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=H1pvVw5Nmc8jqXYSkPsHN80/ZWjdoxrt+0NcItdtVzI=; b=c34QDJsjkRP4mZD6ZZiRFO660urbuMGVsidIwvf+/dDUn1zYhfjZR2QHxX+MRlOY099G+J0fs7BPeAtb6vsOpc8+CCYXYqPRf/iYpqIyjslyfilh7rOwcQPLo6bt3ax09to8aDHUZT9IcLWtzfJGN6T8sdsUQ3y71IliIRb/rcQ= Received: from SV0P279CA0033.NORP279.PROD.OUTLOOK.COM (2603:10a6:f10:12::20) by AS8PR07MB7702.eurprd07.prod.outlook.com (2603:10a6:20b:252::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.4; Mon, 1 Nov 2021 18:40:28 +0000 Received: from HE1EUR02FT028.eop-EUR02.prod.protection.outlook.com (2603:10a6:f10:12:cafe::d6) by SV0P279CA0033.outlook.office365.com (2603:10a6:f10:12::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4649.15 via Frontend Transport; Mon, 1 Nov 2021 18:40:28 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 192.176.1.74) smtp.mailfrom=ericsson.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=ericsson.com; Received-SPF: Pass (protection.outlook.com: domain of ericsson.com designates 192.176.1.74 as permitted sender) receiver=protection.outlook.com; client-ip=192.176.1.74; helo=oa.msg.ericsson.com; Received: from oa.msg.ericsson.com (192.176.1.74) by HE1EUR02FT028.mail.protection.outlook.com (10.152.10.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.20.4649.14 via Frontend Transport; Mon, 1 Nov 2021 18:40:27 +0000 Received: from ESESSMB501.ericsson.se (153.88.183.162) by ESESBMR506.ericsson.se (153.88.183.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2242.12; Mon, 1 Nov 2021 19:40:27 +0100 Received: from seliiuapp00218.seli.gic.ericsson.se (153.88.183.153) by smtp.internal.ericsson.com (153.88.183.189) with Microsoft SMTP Server id 15.1.2242.12 via Frontend Transport; Mon, 1 Nov 2021 19:40:27 +0100 Received: from localhost.localdomain (seliicwb00002.seli.gic.ericsson.se [10.156.25.100]) by seliiuapp00218.seli.gic.ericsson.se (Postfix) with ESMTP id 0C20F6014A; Mon, 1 Nov 2021 19:40:27 +0100 (CET) From: =?utf-8?q?Mattias_R=C3=B6nnblom?= To: , , , CC: , , , , , , , , =?utf-8?q?Mattias_R=C3=B6nnblom?= Date: Mon, 1 Nov 2021 19:40:14 +0100 Message-ID: <20211101184016.8073-1-mattias.ronnblom@ericsson.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <3a6d30ca-3335-ee06-c0a9-8f2b0ade2c40@ericsson.com> References: <3a6d30ca-3335-ee06-c0a9-8f2b0ade2c40@ericsson.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7d2bfe22-4f5c-46b7-e049-08d99d67132b X-MS-TrafficTypeDiagnostic: AS8PR07MB7702: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: W0F5KIEV4dm5qwMfxJmdPOvTDWpbKRVQF9z82uF8gZhQjRQiWFJM85YESubrcaTJxgZAS5OE/iuwysJlOQxUGsXtJQkYn9Z5prfLa8Oa4EiMw71RJ5m1X1o3qnV8Y8rtVLuGlsvJ80Ez6Ax1hU6g6oWtAS4CV+LsJ5DsDiN6Q0nfuVHM/LApPyE3coeYABChYYbI8Nktqm2LetMf8pkxjNFaYoJMzW19VBAlMwNen1pFxppbzeBEpEOm2udcuVZurST15MaBbqCEwJlv2v/Lr5gPBsrvgYtlVvSzuosLAYYy8RF6tGFu0OKqtmlKunyOpyNF/HduB0ubvnrTiu1SlgeqBTVjz7DaxT4gi95BQbs8WYVWn8anqOiTvuUGg/hXUT5CdcpxUw/ro0VirohiV6A9MMSZR4XMbtCwWmdr9Zrio+SYSC2m0O12k+gbC6tmb4a61tqVIUPRvGq3cYfEzarYLjw3j0tTuoDphZxOi/9wAyl4/HY5N4sgZWHjXihSxsxHSN7GS5yg4hYboIn0SKZr0kZalhZVgS4vKzo8A1rxKCcK5i1lhOIkmoZc3yGxml4jZS92kU+HfoHtADIy5ALKdT2W2FsFQfbrV12VmD5lyEJd6+GG0zlwLk4kdt5l9rVJzBmke+VRTCnuRYQ6L7i7H+BbKo/3tPNifiEbC/0fKFe8yXFSDj7B11WJ434S+FbPKJ5SmS/cX/+/TRLNzw== X-Forefront-Antispam-Report: CIP:192.176.1.74; CTRY:SE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:oa.msg.ericsson.com; PTR:office365.se.ericsson.net; CAT:NONE; SFS:(4636009)(36840700001)(46966006)(1076003)(8676002)(4326008)(36860700001)(70586007)(70206006)(336012)(5660300002)(508600001)(86362001)(2616005)(6666004)(186003)(26005)(66574015)(82960400001)(316002)(83380400001)(54906003)(36756003)(110136005)(2906002)(7416002)(8936002)(356005)(107886003)(47076005)(6266002)(7636003)(82310400003); DIR:OUT; SFP:1101; X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Nov 2021 18:40:27.8220 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7d2bfe22-4f5c-46b7-e049-08d99d67132b X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=92e84ceb-fbfd-47ab-be52-080c6b87953f; Ip=[192.176.1.74]; Helo=[oa.msg.ericsson.com] X-MS-Exchange-CrossTenant-AuthSource: HE1EUR02FT028.eop-EUR02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR07MB7702 Subject: [dpdk-dev] [PATCH v3 1/3] eventdev: allow for event devices requiring maintenance X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Extend Eventdev API to allow for event devices which require various forms of internal processing to happen, even when events are not enqueued to or dequeued from a port. PATCH v3: - Introduced 'op' parameter to rte_event_maintain(), to allow for forcing an immediate flush of buffered events (and potentially other future maintenance-related operations). - Return -EINVAL in case rte_event_maintain() is passed invalid arguments. Do not set rte_errno. PATCH v2: - Mark rte_event_maintain() experimental. - Make clear it's the thread that owns the port that needs to call rte_event_maintain(). - Make clear rte_event_maintain() may be called also during periods when enqueue/dequeue operations *are* performed. PATCH v1: - Adapt to the move of fastpath function pointers out of rte_eventdev struct - Attempt to clarify how often the application is expected to call rte_event_maintain() - Add trace point RFC v2: - Change rte_event_maintain() return type to be consistent with the documentation. - Remove unused typedef from eventdev_pmd.h. Signed-off-by: Mattias Rönnblom Tested-by: Richard Eklycke Tested-by: Liron Himi --- lib/eventdev/eventdev_pmd.h | 2 + lib/eventdev/eventdev_private.c | 9 ++++ lib/eventdev/eventdev_trace_points.c | 3 ++ lib/eventdev/rte_eventdev.h | 79 ++++++++++++++++++++++++++++ lib/eventdev/rte_eventdev_core.h | 5 ++ lib/eventdev/rte_eventdev_trace_fp.h | 8 +++ 6 files changed, 106 insertions(+) diff --git a/lib/eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h index d009e24309..82a5c4db33 100644 --- a/lib/eventdev/eventdev_pmd.h +++ b/lib/eventdev/eventdev_pmd.h @@ -164,6 +164,8 @@ struct rte_eventdev { /**< Pointer to PMD dequeue function. */ event_dequeue_burst_t dequeue_burst; /**< Pointer to PMD dequeue burst function. */ + event_maintain_t maintain; + /**< Pointer to PMD port maintenance function. */ event_tx_adapter_enqueue_t txa_enqueue_same_dest; /**< Pointer to PMD eth Tx adapter burst enqueue function with * events destined to same Eth port & Tx queue. diff --git a/lib/eventdev/eventdev_private.c b/lib/eventdev/eventdev_private.c index 9084833847..1d3d9d357e 100644 --- a/lib/eventdev/eventdev_private.c +++ b/lib/eventdev/eventdev_private.c @@ -44,6 +44,13 @@ dummy_event_dequeue_burst(__rte_unused void *port, return 0; } +static void +dummy_event_maintain(__rte_unused void *port, __rte_unused int op) +{ + RTE_EDEV_LOG_ERR( + "maintenance requested for unconfigured event device"); +} + static uint16_t dummy_event_tx_adapter_enqueue(__rte_unused void *port, __rte_unused struct rte_event ev[], @@ -85,6 +92,7 @@ event_dev_fp_ops_reset(struct rte_event_fp_ops *fp_op) .enqueue_forward_burst = dummy_event_enqueue_burst, .dequeue = dummy_event_dequeue, .dequeue_burst = dummy_event_dequeue_burst, + .maintain = dummy_event_maintain, .txa_enqueue = dummy_event_tx_adapter_enqueue, .txa_enqueue_same_dest = dummy_event_tx_adapter_enqueue_same_dest, @@ -105,6 +113,7 @@ event_dev_fp_ops_set(struct rte_event_fp_ops *fp_op, fp_op->enqueue_forward_burst = dev->enqueue_forward_burst; fp_op->dequeue = dev->dequeue; fp_op->dequeue_burst = dev->dequeue_burst; + fp_op->maintain = dev->maintain; fp_op->txa_enqueue = dev->txa_enqueue; fp_op->txa_enqueue_same_dest = dev->txa_enqueue_same_dest; fp_op->ca_enqueue = dev->ca_enqueue; diff --git a/lib/eventdev/eventdev_trace_points.c b/lib/eventdev/eventdev_trace_points.c index 237d9383fd..de6b1f4417 100644 --- a/lib/eventdev/eventdev_trace_points.c +++ b/lib/eventdev/eventdev_trace_points.c @@ -37,6 +37,9 @@ RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_enq_burst, RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_deq_burst, lib.eventdev.deq.burst) +RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_maintain, + lib.eventdev.maintain) + /* Eventdev Rx adapter trace points */ RTE_TRACE_POINT_REGISTER(rte_eventdev_trace_eth_rx_adapter_create, lib.eventdev.rx.adapter.create) diff --git a/lib/eventdev/rte_eventdev.h b/lib/eventdev/rte_eventdev.h index 0abed56bef..e026486ca5 100644 --- a/lib/eventdev/rte_eventdev.h +++ b/lib/eventdev/rte_eventdev.h @@ -299,6 +299,15 @@ struct rte_event; * the content of this field is implementation dependent. */ +#define RTE_EVENT_DEV_CAP_REQUIRES_MAINT (1ULL << 10) +/**< Event device requires calls to rte_event_maintain() during + * periods when neither rte_event_dequeue_burst() nor + * rte_event_enqueue_burst() are called on a port. This will allow the + * event device to perform internal processing, such as flushing + * buffered events, return credits to a global pool, or process + * signaling related to load balancing. + */ + /* Event device priority levels */ #define RTE_EVENT_DEV_PRIORITY_HIGHEST 0 /**< Highest priority expressed across eventdev subsystem @@ -2063,6 +2072,76 @@ rte_event_dequeue_burst(uint8_t dev_id, uint8_t port_id, struct rte_event ev[], timeout_ticks); } +#define RTE_EVENT_DEV_MAINT_OP_FLUSH (1 << 0) +/**< Force an immediately flush of any buffered events in the port, + * potentially at the cost of additional overhead. + * + * @see rte_event_maintain() + */ + +/** + * Maintain an event device. + * + * This function is only relevant for event devices which have the + * @ref RTE_EVENT_DEV_CAP_REQUIRES_MAINT flag set. Such devices + * require an application thread using a particular port to + * periodically call rte_event_maintain() on that port during periods + * which it is neither attempting to enqueue events to nor dequeue + * events from the port. rte_event_maintain() is a low-overhead + * function and should be called at a high rate (e.g., in the + * application's poll loop). + * + * No port may be left unmaintained. + * + * At the application thread's convenience, rte_event_maintain() may + * (but is not required to) be called even during periods when enqueue + * or dequeue functions are being called, at the cost of a slight + * increase in overhead. + * + * rte_event_maintain() may be called on event devices which haven't + * set @ref RTE_EVENT_DEV_CAP_REQUIRES_MAINT flag, in which case it is + * a no-operation. + * + * @param dev_id + * The identifier of the device. + * @param port_id + * The identifier of the event port. + * @param op + * 0, or @ref RTE_EVENT_DEV_MAINT_OP_FLUSH. + * @return + * - 0 on success. + * - -EINVAL if *dev_id*, *port_id*, or *op* is invalid. + * + * @see RTE_EVENT_DEV_CAP_REQUIRES_MAINT + */ +__rte_experimental +static inline int +rte_event_maintain(uint8_t dev_id, uint8_t port_id, int op) +{ + const struct rte_event_fp_ops *fp_ops; + void *port; + + fp_ops = &rte_event_fp_ops[dev_id]; + port = fp_ops->data[port_id]; +#ifdef RTE_LIBRTE_EVENTDEV_DEBUG + if (dev_id >= RTE_EVENT_MAX_DEVS || + port_id >= RTE_EVENT_MAX_PORTS_PER_DEV) + return -EINVAL; + + if (port == NULL) + return -EINVAL; + + if (op & (~RTE_EVENT_DEV_MAINT_OP_FLUSH)) + return -EINVAL; +#endif + rte_eventdev_trace_maintain(dev_id, port_id, op); + + if (fp_ops->maintain != NULL) + fp_ops->maintain(port, op); + + return 0; +} + #ifdef __cplusplus } #endif diff --git a/lib/eventdev/rte_eventdev_core.h b/lib/eventdev/rte_eventdev_core.h index 61d5ebdc44..c328bdbc82 100644 --- a/lib/eventdev/rte_eventdev_core.h +++ b/lib/eventdev/rte_eventdev_core.h @@ -29,6 +29,9 @@ typedef uint16_t (*event_dequeue_burst_t)(void *port, struct rte_event ev[], uint64_t timeout_ticks); /**< @internal Dequeue burst of events from port of a device */ +typedef void (*event_maintain_t)(void *port, int op); +/**< @internal Maintains a port */ + typedef uint16_t (*event_tx_adapter_enqueue_t)(void *port, struct rte_event ev[], uint16_t nb_events); @@ -54,6 +57,8 @@ struct rte_event_fp_ops { /**< PMD dequeue function. */ event_dequeue_burst_t dequeue_burst; /**< PMD dequeue burst function. */ + event_maintain_t maintain; + /**< PMD port maintenance function. */ event_tx_adapter_enqueue_t txa_enqueue; /**< PMD Tx adapter enqueue function. */ event_tx_adapter_enqueue_t txa_enqueue_same_dest; diff --git a/lib/eventdev/rte_eventdev_trace_fp.h b/lib/eventdev/rte_eventdev_trace_fp.h index 5639e0b83a..af2172d2a5 100644 --- a/lib/eventdev/rte_eventdev_trace_fp.h +++ b/lib/eventdev/rte_eventdev_trace_fp.h @@ -38,6 +38,14 @@ RTE_TRACE_POINT_FP( rte_trace_point_emit_ptr(enq_mode_cb); ) +RTE_TRACE_POINT_FP( + rte_eventdev_trace_maintain, + RTE_TRACE_POINT_ARGS(uint8_t dev_id, uint8_t port_id, int op), + rte_trace_point_emit_u8(dev_id); + rte_trace_point_emit_u8(port_id); + rte_trace_point_emit_int(op); +) + RTE_TRACE_POINT_FP( rte_eventdev_trace_eth_tx_adapter_enqueue, RTE_TRACE_POINT_ARGS(uint8_t dev_id, uint8_t port_id, void *ev_table, From patchwork Mon Nov 1 18:40:15 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Mattias_R=C3=B6nnblom?= X-Patchwork-Id: 103365 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 32EA1A0548; Mon, 1 Nov 2021 19:40:39 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 49B9D4111D; Mon, 1 Nov 2021 19:40:33 +0100 (CET) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2055.outbound.protection.outlook.com [40.107.22.55]) by mails.dpdk.org (Postfix) with ESMTP id 7E57340DF6 for ; Mon, 1 Nov 2021 19:40:31 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hHkxwFI8ej2VG/ZiGB8x2HWvtrwhu08qThOBrUmpeWg2zMCB07bcg6BG6/PtEQhCgREnGISLZKtgVBjb5aJ5IxKiMcy187A8MWOl1/1KL9ZpwvUUNSxVVs3Si8f0433eZxo34Y3qvTLmjdOkBOnl9WarzKRXIt7oDqs5aDSMN+HUk1fvil0IkAIhxnQiIJUiaoSpiaGmaWqlvNJUyDiTAvvDDl1pJ1NXkMenBHbFI4qNxnxdnd5imudK8E7gFmGwlQUhq53QNPrCmETnbhGF0FSdfyp33N1XSDB5e188hc5bZ6YWIS+eY7fcLwryia2jbAE5ZAtiMiI6WeHkN7N3qw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=D7LLPHy9gvp1FWwUaI54bwOy44BUJLq32Q4V/qh3RaM=; b=EzDT+K1nJvYk/JTJBU3S9Hu58d5vdWaTo8eC2L90uQuzbe1NA2p5/NjRNE67Bv2DXCcwCOdjto8Y5m6E7V1dTjaZXsqScgR+1ZyMbjFNSzEfn06Go0ptG9QASrA3gdD80UEqVLyOnyedmRK/6qiblTqOzP5omAvTcDynZDRHK8QLa3+qSjEIvZ9kryypqcSnIHR6ojJ+csIYl7/6SYPfC05z2cjjG80XVPmnLEQm7yJ0PNeTLDQjVBHZe6Au7mf+jk7D2VaaoyuJTM5WIhdjCpULX8DRxkprGwOuW+uhN4PALJBIYfK7GLK0qfVIXn6+3CvJ8aYMrVHUXc6psaPI4A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 192.176.1.74) smtp.rcpttodomain=dpdk.org smtp.mailfrom=ericsson.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=ericsson.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=D7LLPHy9gvp1FWwUaI54bwOy44BUJLq32Q4V/qh3RaM=; b=IQOz+VbVXvfL+cqFgUyBenaLQg/hTtYx45C/b3UlzeHiTTC/zfswr9JT2doP1q48bW9lyseMvA+K4mN2Usc7U5sFqwJ1OVLcrglSz68in6ZzYHo+v7lyK2UdWOzMVAGZwqX8poqLDVHChJd5PgCin3wjSigoqE746R1hvKFqTis= Received: from SV0P279CA0018.NORP279.PROD.OUTLOOK.COM (2603:10a6:f10:11::23) by VI1PR07MB3375.eurprd07.prod.outlook.com (2603:10a6:802:23::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.5; Mon, 1 Nov 2021 18:40:30 +0000 Received: from HE1EUR02FT027.eop-EUR02.prod.protection.outlook.com (2603:10a6:f10:11:cafe::4c) by SV0P279CA0018.outlook.office365.com (2603:10a6:f10:11::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4649.15 via Frontend Transport; Mon, 1 Nov 2021 18:40:30 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 192.176.1.74) smtp.mailfrom=ericsson.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=ericsson.com; Received-SPF: Pass (protection.outlook.com: domain of ericsson.com designates 192.176.1.74 as permitted sender) receiver=protection.outlook.com; client-ip=192.176.1.74; helo=oa.msg.ericsson.com; Received: from oa.msg.ericsson.com (192.176.1.74) by HE1EUR02FT027.mail.protection.outlook.com (10.152.10.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.20.4649.14 via Frontend Transport; Mon, 1 Nov 2021 18:40:29 +0000 Received: from ESESBMB505.ericsson.se (153.88.183.172) by ESESSMR503.ericsson.se (153.88.183.112) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2242.12; Mon, 1 Nov 2021 19:40:27 +0100 Received: from seliiuapp00218.seli.gic.ericsson.se (153.88.183.153) by smtp.internal.ericsson.com (153.88.183.188) with Microsoft SMTP Server id 15.1.2242.12 via Frontend Transport; Mon, 1 Nov 2021 19:40:27 +0100 Received: from localhost.localdomain (seliicwb00002.seli.gic.ericsson.se [10.156.25.100]) by seliiuapp00218.seli.gic.ericsson.se (Postfix) with ESMTP id B9BCF6014A; Mon, 1 Nov 2021 19:40:27 +0100 (CET) From: =?utf-8?q?Mattias_R=C3=B6nnblom?= To: , , , CC: , , , , , , , , =?utf-8?q?Mattias_R=C3=B6nnblom?= Date: Mon, 1 Nov 2021 19:40:15 +0100 Message-ID: <20211101184016.8073-2-mattias.ronnblom@ericsson.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20211101184016.8073-1-mattias.ronnblom@ericsson.com> References: <3a6d30ca-3335-ee06-c0a9-8f2b0ade2c40@ericsson.com> <20211101184016.8073-1-mattias.ronnblom@ericsson.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7706599e-4174-46f3-a53a-08d99d671428 X-MS-TrafficTypeDiagnostic: VI1PR07MB3375: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: EVK263gtWhZ0MTIJEsCkiLUufTByyJiDtNH0qp3ljWVSlfUUfJ14WpX5zEV1/PbF/rNXzW/0j4dfcX+OUUI6j+wEXdPQZROg6Ansx+xGjvxXztXULyfAuf0HcrgOis/Wp5FfwSX+P9zfYHCVxsu1YDRrQFuU03TaZZcUGCaz9oF+MTos9BLw57+bT5bxr2UIqUMUcfBJYIQiSLs2jgJAWo4EJVhk8BKKhEq4HpJ3ebxc5BfNBjeQ4wm1yBiejUBvksz1u/FGLPaJFgZJGBV3Ux71xLzn3Aw7uN6XJUWl8oK33WauMrm4B2D/nH3AUs/n7cLuHcUTPwTo52iDZPtAZpJ7JCEa342KTjLUbagDDYWTsmQKQfx60D4N/maoPQvfDbjtGP8z2gdnurRKUDgfk77uaV/cYCNPVJ9E/K+IZZDGesMDVEmEkutyZCWIIUzVIuf7mGeWg7GZE9KIDNRpAVlghl8vJUI2daQuKMHU4GrTDY6YD0xhRB7DAOdFcDvdIN/nYhbJYOQlQNBck4gK2GX6sDuqOguNkkcwbltStaMfVuwXaS8nKQLwpO4UtMN1yR0dv5qqEeDMdewYY/df+ZS+6Z6zFVnJb4TR2qW0O5H8naR1DhXVe3R6I/NV8AotaGkWCDTko9J0mdTj8jZH7ekyuZOnPHsTdq1xAgGxpYYckDgsrgTLuZUKRd2wXO4U+9tSwnx8laqTsyRraaQM7w== X-Forefront-Antispam-Report: CIP:192.176.1.74; CTRY:SE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:oa.msg.ericsson.com; PTR:office365.se.ericsson.net; CAT:NONE; SFS:(4636009)(46966006)(36840700001)(36756003)(82310400003)(1076003)(70206006)(70586007)(5660300002)(6666004)(82960400001)(8676002)(83380400001)(36860700001)(26005)(4326008)(356005)(336012)(2906002)(66574015)(7416002)(316002)(54906003)(107886003)(2616005)(47076005)(110136005)(7636003)(86362001)(508600001)(8936002)(6266002)(186003); DIR:OUT; SFP:1101; X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Nov 2021 18:40:29.4696 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7706599e-4174-46f3-a53a-08d99d671428 X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=92e84ceb-fbfd-47ab-be52-080c6b87953f; Ip=[192.176.1.74]; Helo=[oa.msg.ericsson.com] X-MS-Exchange-CrossTenant-AuthSource: HE1EUR02FT027.eop-EUR02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR07MB3375 Subject: [dpdk-dev] [PATCH v3 2/3] event/dsw: make use of eventdev maintenance facility X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Set the RTE_EVENT_DEV_CAP_REQUIRES_MAINT flag, and perform DSW background tasks on rte_event_maintain() calls. PATCH v3: - Add support for output buffer flushing by means of the new rte_event_maintain() op parameter, and RTE_EVENT_DEV_MAINT_OP_FLUSH. PATCH v2: - Update DSW documentation. RFC v2: - Have dsw_event_maintain() occasionally flush the port output buffers. Signed-off-by: Mattias Rönnblom Tested-by: Richard Eklycke Tested-by: Liron Himi --- doc/guides/eventdevs/dsw.rst | 27 +++++++++++++++------------ drivers/event/dsw/dsw_evdev.c | 4 +++- drivers/event/dsw/dsw_evdev.h | 1 + drivers/event/dsw/dsw_event.c | 12 ++++++++++++ 4 files changed, 31 insertions(+), 13 deletions(-) diff --git a/doc/guides/eventdevs/dsw.rst b/doc/guides/eventdevs/dsw.rst index 6653f501c1..18f7e9588f 100644 --- a/doc/guides/eventdevs/dsw.rst +++ b/doc/guides/eventdevs/dsw.rst @@ -40,20 +40,20 @@ Example: Limitations ----------- -Unattended Ports +Port Maintenance ~~~~~~~~~~~~~~~~ -The distributed software eventdev uses an internal signaling schema -between the ports to achieve load balancing. In order for this to -work, the application must perform enqueue and/or dequeue operations -on all ports. +The distributed software eventdev uses an internal signaling scheme +between the ports to achieve load balancing. Therefore, it sets the +``RTE_EVENT_DEV_CAP_REQUIRES_MAINT`` flag. -Producer-only ports which currently have no events to enqueue should -periodically call rte_event_enqueue_burst() with a zero-sized burst. +During periods when the application thread using a particular port is +neither attempting to enqueue nor to dequeue events, it must +repeatedly call rte_event_maintain() on that port. -Ports left unattended for longer periods of time will prevent load -balancing, and also cause traffic interruptions on the flows which -are in the process of being migrated. +Ports left unmaintained for long periods of time will prevent load +balancing and cause traffic interruptions on flows which are in the +process of being migrated. Output Buffering ~~~~~~~~~~~~~~~~ @@ -66,8 +66,11 @@ In case no more events are enqueued on a port with buffered events, these events will be sent after the application has performed a number of enqueue and/or dequeue operations. -For explicit flushing, an application may call -rte_event_enqueue_burst() with a zero-sized burst. +To immediately flush a port's output buffer, an application may call +rte_event_maintain() with op set to ``RTE_EVENT_DEV_MAINT_OP_FLUSH``. + +Repeated calls to rte_event_maintain() will also flush the output +buffers. Priorities diff --git a/drivers/event/dsw/dsw_evdev.c b/drivers/event/dsw/dsw_evdev.c index 0652d83ad6..5ff8fcc6a9 100644 --- a/drivers/event/dsw/dsw_evdev.c +++ b/drivers/event/dsw/dsw_evdev.c @@ -222,7 +222,8 @@ dsw_info_get(struct rte_eventdev *dev __rte_unused, RTE_EVENT_DEV_CAP_DISTRIBUTED_SCHED| RTE_EVENT_DEV_CAP_NONSEQ_MODE| RTE_EVENT_DEV_CAP_MULTIPLE_QUEUE_PORT| - RTE_EVENT_DEV_CAP_CARRY_FLOW_ID + RTE_EVENT_DEV_CAP_CARRY_FLOW_ID| + RTE_EVENT_DEV_CAP_REQUIRES_MAINT }; } @@ -441,6 +442,7 @@ dsw_probe(struct rte_vdev_device *vdev) dev->enqueue_forward_burst = dsw_event_enqueue_forward_burst; dev->dequeue = dsw_event_dequeue; dev->dequeue_burst = dsw_event_dequeue_burst; + dev->maintain = dsw_event_maintain; if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; diff --git a/drivers/event/dsw/dsw_evdev.h b/drivers/event/dsw/dsw_evdev.h index 631daea55c..e64ae26f6e 100644 --- a/drivers/event/dsw/dsw_evdev.h +++ b/drivers/event/dsw/dsw_evdev.h @@ -271,6 +271,7 @@ uint16_t dsw_event_enqueue_forward_burst(void *port, uint16_t dsw_event_dequeue(void *port, struct rte_event *ev, uint64_t wait); uint16_t dsw_event_dequeue_burst(void *port, struct rte_event *events, uint16_t num, uint64_t wait); +void dsw_event_maintain(void *port, int op); int dsw_xstats_get_names(const struct rte_eventdev *dev, enum rte_event_dev_xstats_mode mode, diff --git a/drivers/event/dsw/dsw_event.c b/drivers/event/dsw/dsw_event.c index 1f09816945..c6ed470286 100644 --- a/drivers/event/dsw/dsw_event.c +++ b/drivers/event/dsw/dsw_event.c @@ -1400,3 +1400,15 @@ dsw_event_dequeue_burst(void *port, struct rte_event *events, uint16_t num, return dequeued; } + +void dsw_event_maintain(void *port, int op) +{ + struct dsw_port *source_port = port; + struct dsw_evdev *dsw = source_port->dsw; + + dsw_port_note_op(source_port, 0); + dsw_port_bg_process(dsw, source_port); + + if (op & RTE_EVENT_DEV_MAINT_OP_FLUSH) + dsw_port_flush_out_buffers(dsw, source_port); +} From patchwork Mon Nov 1 18:40:16 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Mattias_R=C3=B6nnblom?= X-Patchwork-Id: 103366 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B7F6BA0548; Mon, 1 Nov 2021 19:40:44 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4FE2A41121; Mon, 1 Nov 2021 19:40:34 +0100 (CET) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40070.outbound.protection.outlook.com [40.107.4.70]) by mails.dpdk.org (Postfix) with ESMTP id B224B41100 for ; Mon, 1 Nov 2021 19:40:32 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WK+4krPOmqpK4Pn12ilStxiY9QlHhxLyi3amRjkORFJ/EK5Z5MG0WPY9+t/b9KVWCVX7LywjsXwl/i5pbSPWc6U49u3KdeKL2vUCo0T9NY1tDgyEw9dmw3LGS9Mt1VmH1HHuDpPSvFvb3+1fRnLDNrryrqqruBv5zgTnLj3xpdamYrrjLu60gfIL07wNkRhrxCNDaztzpGj4fKdXtbsPVV6UWgAJj9kv/rHlzPkE+CeGPYVUmcm/ro+iwQnGXkqYghXHFbeq9GhPJQS/hLVMt61E3D+QdUwcFExXANYQSDOvYsizkc1jB0ku7OpVKkQOx8hNBmGBIw7zcctt2xDJQg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=C/zs2U6ZkEsz4E1IYN+JWi7vv+gAVq9yF5U8F7aSSSU=; b=gNrY6iUFkN9AHMmuXg5LOC3GV/nwmCZxTMejOFPMpvd9bhMu2kbq6gUa2pmEnAxyhLOYn9BSpJyvyF5X26DkU8iZnG4U6KUYbdhP1n6earXK79FgpRaIezeA2ny17Dbw6HZ5UnblkuFju8KCdacMOz7XKk95Y4k++l/yP3EXta6NiBjEKv2cn60FOPdJGskfoQcKswvPio5GSTNopmtsRYxTS3YqGMXNBHfGBGwHV4CIZvvDMw5G5jtKOWa+mXsIMrKPgynEcnluYdDhD2zh1iasE/XEQ/pFxI4ZUPV5DTd6KQQGuqJ8edTwuec9GueiaIEv6jF1gctLLMrql+DYPA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 192.176.1.74) smtp.rcpttodomain=dpdk.org smtp.mailfrom=ericsson.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=ericsson.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ericsson.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=C/zs2U6ZkEsz4E1IYN+JWi7vv+gAVq9yF5U8F7aSSSU=; b=ErWsGcKRTarF+ZqEIvWWFVrKlz9FYS4m/On4v0tJD3eq5qSJNYH1jjaiL+LthAhPxzHq7UpEXpTIXwoCBeuSPN5q9Fxx3AH4Z539h2RA03rvYPMyVZZI65fDgYKVa/8DWkXLvdP13FI143HoBbwWxtul1Gys62DFBgvgzFfpmf8= Received: from SV0P279CA0028.NORP279.PROD.OUTLOOK.COM (2603:10a6:f10:12::15) by VI1PR0701MB2624.eurprd07.prod.outlook.com (2603:10a6:801:5::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.9; Mon, 1 Nov 2021 18:40:30 +0000 Received: from HE1EUR02FT028.eop-EUR02.prod.protection.outlook.com (2603:10a6:f10:12:cafe::ab) by SV0P279CA0028.outlook.office365.com (2603:10a6:f10:12::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4649.17 via Frontend Transport; Mon, 1 Nov 2021 18:40:30 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 192.176.1.74) smtp.mailfrom=ericsson.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=ericsson.com; Received-SPF: Pass (protection.outlook.com: domain of ericsson.com designates 192.176.1.74 as permitted sender) receiver=protection.outlook.com; client-ip=192.176.1.74; helo=oa.msg.ericsson.com; Received: from oa.msg.ericsson.com (192.176.1.74) by HE1EUR02FT028.mail.protection.outlook.com (10.152.10.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.20.4649.14 via Frontend Transport; Mon, 1 Nov 2021 18:40:29 +0000 Received: from ESESBMB505.ericsson.se (153.88.183.172) by ESESBMR506.ericsson.se (153.88.183.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2242.12; Mon, 1 Nov 2021 19:40:28 +0100 Received: from ESESSMB502.ericsson.se (153.88.183.163) by ESESBMB505.ericsson.se (153.88.183.172) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.2242.12; Mon, 1 Nov 2021 19:40:28 +0100 Received: from seliiuapp00218.seli.gic.ericsson.se (153.88.183.153) by smtp.internal.ericsson.com (153.88.183.190) with Microsoft SMTP Server id 15.1.2242.12 via Frontend Transport; Mon, 1 Nov 2021 19:40:28 +0100 Received: from localhost.localdomain (seliicwb00002.seli.gic.ericsson.se [10.156.25.100]) by seliiuapp00218.seli.gic.ericsson.se (Postfix) with ESMTP id 591E26014A; Mon, 1 Nov 2021 19:40:28 +0100 (CET) From: =?utf-8?q?Mattias_R=C3=B6nnblom?= To: , , , CC: , , , , , , , , =?utf-8?q?Mattias_R=C3=B6nnblom?= Date: Mon, 1 Nov 2021 19:40:16 +0100 Message-ID: <20211101184016.8073-3-mattias.ronnblom@ericsson.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20211101184016.8073-1-mattias.ronnblom@ericsson.com> References: <3a6d30ca-3335-ee06-c0a9-8f2b0ade2c40@ericsson.com> <20211101184016.8073-1-mattias.ronnblom@ericsson.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3e857640-0e5d-427c-3c2d-08d99d671437 X-MS-TrafficTypeDiagnostic: VI1PR0701MB2624: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6790; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zygce18LhHaR7kqUUYHx1KoP3HNDAqtZL+UAtj8B6Vg2V1Qqo1ukIazxKXRlbJ3JFMI794NPnfknsTiHx23qdsm4j/4iDr/yDoScMlPxY4bNh6oXwIUU907wWEzgMmuxTYIG6fIBKi2+JqdU8jACoohZ3lSLpB06KVxcb9ygW+EHj2evzFCRUOgFuN3N1qrBg6JxbWRUt2zimjnTq01GIoBOb4mREm7Jyts2gnUU8B9CeLlTzf1yL9OjQxZ0v5U/CZQRqIEgoJ/tKmI52QOFSrirstQVBbwHwOTSbI/+z7oCjD9PqPySUPXgKrMRQUTVskdY7DQm+kH+z73R8f6qf1zXQ3n1PVEoeHUdnVHJUVZUTaoJBsWH2OciQXwn87dlw2NhE8p/Ym08x2fb7Mv3K4/WxCEfDG4MV8lvPSDgyCJ5qpyczfvTW9h2kqC0k1gcPK4q3D/DjM57pPdBMh8M6AHT/2bJFP3x5S9MwBM9o14Zg36EUYfCnsvnO2z02f713C90FcwnnQXHw1VxB+ttumuhWxuv3h97qFZf6IqZI15vx944AURoNSOHjv8bHl1pGd1mVAJ1qwV7oj4ET9B0zKFd96o7GXbbfOgC6gk43CmIMWkhFtWczUPt5BvShnKsLhEvNYGIl873OVEDcyGx9y1hCQ3BWtFPzM/6Y/f8d+XcFeSDRN/VbUTgtww3jhcKyLguAJIqwCZqn+p3t91OUQ== X-Forefront-Antispam-Report: CIP:192.176.1.74; CTRY:SE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:oa.msg.ericsson.com; PTR:office365.se.ericsson.net; CAT:NONE; SFS:(4636009)(46966006)(36840700001)(2616005)(83380400001)(7636003)(1076003)(186003)(86362001)(508600001)(36756003)(82310400003)(4326008)(70586007)(356005)(82960400001)(8676002)(70206006)(5660300002)(316002)(336012)(54906003)(36860700001)(2906002)(8936002)(26005)(6666004)(110136005)(6266002)(7416002)(107886003)(47076005); DIR:OUT; SFP:1101; X-OriginatorOrg: ericsson.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Nov 2021 18:40:29.5732 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3e857640-0e5d-427c-3c2d-08d99d671437 X-MS-Exchange-CrossTenant-Id: 92e84ceb-fbfd-47ab-be52-080c6b87953f X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=92e84ceb-fbfd-47ab-be52-080c6b87953f; Ip=[192.176.1.74]; Helo=[oa.msg.ericsson.com] X-MS-Exchange-CrossTenant-AuthSource: HE1EUR02FT028.eop-EUR02.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0701MB2624 Subject: [dpdk-dev] [PATCH v3 3/3] eventdev: have adapters support device maintenance X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Introduce support for event devices requiring calls to rte_event_maintain() in the Ethernet RX, Timer and Crypto Eventdev adapters. PATCH v3: - Set the new 'op' rte_event_maintain() parameter to zero. RFC v2: - For simplicity, the timer adapter now unconditionally calls rte_event_maintain(). - The RX adapter now only calls rte_event_maintain() when it has not enqueued any events. Signed-off-by: Mattias Rönnblom Tested-by: Richard Eklycke --- lib/eventdev/rte_event_crypto_adapter.c | 16 +++++++++++----- lib/eventdev/rte_event_eth_rx_adapter.c | 9 +++++++-- lib/eventdev/rte_event_timer_adapter.c | 3 +++ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/lib/eventdev/rte_event_crypto_adapter.c b/lib/eventdev/rte_event_crypto_adapter.c index ae1151fb75..d84080355d 100644 --- a/lib/eventdev/rte_event_crypto_adapter.c +++ b/lib/eventdev/rte_event_crypto_adapter.c @@ -630,19 +630,25 @@ static void eca_crypto_adapter_run(struct event_crypto_adapter *adapter, unsigned int max_ops) { - while (max_ops) { + unsigned int ops_left = max_ops; + + while (ops_left > 0) { unsigned int e_cnt, d_cnt; - e_cnt = eca_crypto_adapter_deq_run(adapter, max_ops); - max_ops -= RTE_MIN(max_ops, e_cnt); + e_cnt = eca_crypto_adapter_deq_run(adapter, ops_left); + ops_left -= RTE_MIN(ops_left, e_cnt); - d_cnt = eca_crypto_adapter_enq_run(adapter, max_ops); - max_ops -= RTE_MIN(max_ops, d_cnt); + d_cnt = eca_crypto_adapter_enq_run(adapter, ops_left); + ops_left -= RTE_MIN(ops_left, d_cnt); if (e_cnt == 0 && d_cnt == 0) break; } + + if (ops_left == max_ops) + rte_event_maintain(adapter->eventdev_id, + adapter->event_port_id, 0); } static int diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c index a175c61551..d3af469aec 100644 --- a/lib/eventdev/rte_event_eth_rx_adapter.c +++ b/lib/eventdev/rte_event_eth_rx_adapter.c @@ -992,6 +992,7 @@ rxa_eth_rx(struct event_eth_rx_adapter *rx_adapter, uint16_t port_id, &rx_adapter->stats; uint16_t n; uint32_t nb_rx = 0; + uint32_t nb_flushed = 0; if (rxq_empty) *rxq_empty = 0; @@ -1000,7 +1001,7 @@ rxa_eth_rx(struct event_eth_rx_adapter *rx_adapter, uint16_t port_id, */ while (rxa_pkt_buf_available(buf)) { if (buf->count >= BATCH_SIZE) - rxa_flush_event_buffer(rx_adapter, buf); + nb_flushed += rxa_flush_event_buffer(rx_adapter, buf); stats->rx_poll_count++; n = rte_eth_rx_burst(port_id, queue_id, mbufs, BATCH_SIZE); @@ -1016,7 +1017,11 @@ rxa_eth_rx(struct event_eth_rx_adapter *rx_adapter, uint16_t port_id, } if (buf->count > 0) - rxa_flush_event_buffer(rx_adapter, buf); + nb_flushed += rxa_flush_event_buffer(rx_adapter, buf); + + if (nb_flushed == 0) + rte_event_maintain(rx_adapter->eventdev_id, + rx_adapter->event_port_id, 0); return nb_rx; } diff --git a/lib/eventdev/rte_event_timer_adapter.c b/lib/eventdev/rte_event_timer_adapter.c index 0e21b7c475..e5572e2add 100644 --- a/lib/eventdev/rte_event_timer_adapter.c +++ b/lib/eventdev/rte_event_timer_adapter.c @@ -786,6 +786,9 @@ swtim_service_func(void *arg) sw->stats.adapter_tick_count++; } + rte_event_maintain(adapter->data->event_dev_id, + adapter->data->event_port_id, 0); + return 0; }