From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AFE4DA0093; Thu, 21 Apr 2022 16:57:48 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9A41540042; Thu, 21 Apr 2022 16:57:48 +0200 (CEST) Received: from mail-pf1-f176.google.com (mail-pf1-f176.google.com [209.85.210.176]) by mails.dpdk.org (Postfix) with ESMTP id 777E940040 for ; Thu, 21 Apr 2022 16:57:47 +0200 (CEST) Received: by mail-pf1-f176.google.com with SMTP id p3so3903299pfw.0 for ; Thu, 21 Apr 2022 07:57:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20210112.gappssmtp.com; s=20210112; h=date:from:to:cc:subject:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=sjOgZCdDFOm2RwpXwvjGDmcROwnXdKY1ddf4FKbHO+g=; b=3wihzAWSBtoyMjRZTgsj8BBIU/neM9UV97KOBdm5bTDUxq5y/n0bwF9q+JDUUX08c9 SQNHL2gBw2gjZm2FLsLgux/a2x6bk8lbebr3w1BAT51Z9RwVe2btx8pub8XLubEFnIo7 yHyBL5OV4mawgxJ3bmwTC1B0mU4uDP1tNjW1mJ+AMWFA9pV8HNglVRWYN5zYLNF+h1/e bHwcgJDQXQ5yv+Oye8ln/oI+afv1i1eUze27J/vNqyav1P1QGzm5HSGZVwbADQXFGVD9 fad302L8iHb1hf0zIvwGEnGNyZ/T9FTwsLxSy7M2k8LB1vzx7+H02liRN/0Gy+t34mnt 4m5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=sjOgZCdDFOm2RwpXwvjGDmcROwnXdKY1ddf4FKbHO+g=; b=sZSgF+vCkL1aeH/BhauWTt5A8H0EenGlOh8WnHMnbhoTWeKIkhSOFQEZlWs0Q97T/j q1v8S3egjPqvoHjI0PGV3ycZg3CY9FE4OG0NKlIBIE+lRwzVbfyAuQ2O2GcsgFiPdS8Q RXZzSQ/TGHSaE1IooD92OHXp3l1S/lTwFSBAI6BpyRn7aNjixUoeYFw+OUlG7x5wWt90 4lpgX6N92mhYpMGhIZsLaRqrUNqQUSDCb/edTr2NcyHDfvS/EuCVRHNQdGbOJfMuxN6G WjvAtRtcsNBOuKc2WBipUpT/62WNAm91otDu+sFDpryGxfnGyHxxzHHjQ4OCIobBIom/ JPJQ== X-Gm-Message-State: AOAM532OTgkFVdsTMfGJ3Y2GinPNM70dRyxEzhEKsIFidoJLA+/7Qkx4 YkDCMP5qsbvBnzXwF3G3tUMpCQ== X-Google-Smtp-Source: ABdhPJyJZwyX1MJdlRi3xqwd9g2AofU7KdMkr76s9oHVgImHWZNOtNIlI178Z2GlAtb3QbVlfcXi7Q== X-Received: by 2002:a63:c1b:0:b0:39d:93f7:4b7b with SMTP id b27-20020a630c1b000000b0039d93f74b7bmr24256331pgl.595.1650553066467; Thu, 21 Apr 2022 07:57:46 -0700 (PDT) Received: from hermes.local (204-195-112-199.wavecable.com. [204.195.112.199]) by smtp.gmail.com with ESMTPSA id y20-20020aa79af4000000b0050832e3caadsm23676484pfp.216.2022.04.21.07.57.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Apr 2022 07:57:45 -0700 (PDT) Date: Thu, 21 Apr 2022 07:57:42 -0700 From: Stephen Hemminger To: Feifei Wang Cc: Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko , Ray Kinsella , dev@dpdk.org, nd@arm.com, Honnappa Nagarahalli , Ruifeng Wang Subject: Re: [PATCH v1 3/5] ethdev: add API for direct rearm mode Message-ID: <20220421075742.39f050c6@hermes.local> In-Reply-To: <20220420081650.2043183-4-feifei.wang2@arm.com> References: <20220420081650.2043183-1-feifei.wang2@arm.com> <20220420081650.2043183-4-feifei.wang2@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit 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 On Wed, 20 Apr 2022 16:16:48 +0800 Feifei Wang wrote: > Add API for enabling direct rearm mode and for mapping RX and TX > queues. Currently, the API supports 1:1(txq : rxq) mapping. > > Suggested-by: Honnappa Nagarahalli > Signed-off-by: Feifei Wang > Reviewed-by: Ruifeng Wang > Reviewed-by: Honnappa Nagarahalli > --- > lib/ethdev/ethdev_driver.h | 15 +++++++++++++++ > lib/ethdev/rte_ethdev.c | 14 ++++++++++++++ > lib/ethdev/rte_ethdev.h | 31 +++++++++++++++++++++++++++++++ > lib/ethdev/version.map | 1 + > 4 files changed, 61 insertions(+) > > diff --git a/lib/ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h > index 69d9dc21d8..22022f6da9 100644 > --- a/lib/ethdev/ethdev_driver.h > +++ b/lib/ethdev/ethdev_driver.h > @@ -485,6 +485,16 @@ typedef int (*eth_rx_enable_intr_t)(struct rte_eth_dev *dev, > typedef int (*eth_rx_disable_intr_t)(struct rte_eth_dev *dev, > uint16_t rx_queue_id); > > +/** @internal Enable direct rearm of a receive queue of an Ethernet device. */ > +typedef int (*eth_rx_direct_rearm_enable_t)(struct rte_eth_dev *dev, > + uint16_t queue_id); > + > +/**< @internal map Rx/Tx queue of direct rearm mode */ > +typedef int (*eth_rx_direct_rearm_map_t)(struct rte_eth_dev *dev, > + uint16_t rx_queue_id, > + uint16_t tx_port_id, > + uint16_t tx_queue_id); > + > /** @internal Release memory resources allocated by given Rx/Tx queue. */ > typedef void (*eth_queue_release_t)(struct rte_eth_dev *dev, > uint16_t queue_id); > @@ -1152,6 +1162,11 @@ struct eth_dev_ops { > /** Disable Rx queue interrupt */ > eth_rx_disable_intr_t rx_queue_intr_disable; > > + /** Enable Rx queue direct rearm mode */ > + eth_rx_direct_rearm_enable_t rx_queue_direct_rearm_enable; > + /** Map Rx/Tx queue for direct rearm mode */ > + eth_rx_direct_rearm_map_t rx_queue_direct_rearm_map; > + > eth_tx_queue_setup_t tx_queue_setup;/**< Set up device Tx queue */ > eth_queue_release_t tx_queue_release; /**< Release Tx queue */ > eth_tx_done_cleanup_t tx_done_cleanup;/**< Free Tx ring mbufs */ > diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c > index 29a3d80466..8e6f0284f4 100644 > --- a/lib/ethdev/rte_ethdev.c > +++ b/lib/ethdev/rte_ethdev.c > @@ -2139,6 +2139,20 @@ rte_eth_tx_hairpin_queue_setup(uint16_t port_id, uint16_t tx_queue_id, > return eth_err(port_id, ret); > } > > +int > +rte_eth_direct_rxrearm_map(uint16_t rx_port_id, uint16_t rx_queue_id, > + uint16_t tx_port_id, uint16_t tx_queue_id) > +{ > + struct rte_eth_dev *dev; > + > + dev = &rte_eth_devices[rx_port_id]; > + (*dev->dev_ops->rx_queue_direct_rearm_enable)(dev, rx_queue_id); > + (*dev->dev_ops->rx_queue_direct_rearm_map)(dev, rx_queue_id, > + tx_port_id, tx_queue_id); > + > + return 0; > +} > + > int > rte_eth_hairpin_bind(uint16_t tx_port, uint16_t rx_port) > { > diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h > index 04cff8ee10..4a431fcbed 100644 > --- a/lib/ethdev/rte_ethdev.h > +++ b/lib/ethdev/rte_ethdev.h > @@ -5190,6 +5190,37 @@ __rte_experimental > int rte_eth_dev_hairpin_capability_get(uint16_t port_id, > struct rte_eth_hairpin_cap *cap); > > +/** > + * @warning > + * @b EXPERIMENTAL: this API may change, or be removed, without prior notice > + * > + * Enable direct re-arm mode. In this mode the RX queue will be re-armed using > + * buffers that have completed transmission on the transmit side. > + * > + * @note > + * It is assumed that the buffers have completed transmission belong to the > + * mempool used at the receive side, and have refcnt = 1. > + * > + * @param rx_port_id > + * Port identifying the receive side. > + * @param rx_queue_id > + * The index of the receive queue identifying the receive side. > + * The value must be in the range [0, nb_rx_queue - 1] previously supplied > + * to rte_eth_dev_configure(). > + * @param tx_port_id > + * Port identifying the transmit side. > + * @param tx_queue_id > + * The index of the transmit queue identifying the transmit side. > + * The value must be in the range [0, nb_tx_queue - 1] previously supplied > + * to rte_eth_dev_configure(). > + * > + * @return > + * - (0) if successful. > + */ > +__rte_experimental > +int rte_eth_direct_rxrearm_map(uint16_t rx_port_id, uint16_t rx_queue_id, > + uint16_t tx_port_id, uint16_t tx_queue_id); Just looking at this. Why is this done via API call and not a flag as part of the receive config? All the other offload and configuration happens via dev config. Doing it this way doesn't follow the existing ethdev model.