From patchwork Wed Oct 9 07:32:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nipun Gupta X-Patchwork-Id: 175598 Delivered-To: patch@linaro.org Received: by 2002:a92:7e96:0:0:0:0:0 with SMTP id q22csp409124ill; Wed, 9 Oct 2019 00:48:18 -0700 (PDT) X-Google-Smtp-Source: APXvYqw/b8/npnVPUYY1rIc/nIY+XJ9ivmjap4bL9FH0crWEK5oQScFjQh6lgtSZAZbDWp9M2T0F X-Received: by 2002:a17:906:9487:: with SMTP id t7mr1482023ejx.231.1570607298074; Wed, 09 Oct 2019 00:48:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1570607298; cv=none; d=google.com; s=arc-20160816; b=RKV71656Vqdh2sEK3pxk9Dd9rGJZP+q6qnYW2bgzgxlJW6565x4xVYoi7QcrkmHcK4 76pPcUSsXelNOuYmSPZjaObE7FtoMcRyLImt6AGIM+UfOI+mBe+ksrsPqICdskigS1UG ota2Z3tUw2aNJopT+lmasLYzSHhi0qXaRBVc2aXtXRgfdxbWSfr6evZSSv8OXrSqT7Q+ jEL8GXY/wcYIYPkRM5F0TN6TO4Q5g1NQME4pysrSWF6qZDnR07VeHJuqYQLwNgopaePr yvoFR0jTiCXOnVq6vINiURa7xpsQgpXKsbK3mH6sdxPfWlpj5x2mEbyZ4Qq3SJA4mLHS ZFfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:cc:to:from; bh=ocuOE9Bglhel5HaC6A4KEpwaDvRk9Wdf7HM7+zOvMxk=; b=f2f4eIQ2/JrRHMr3otcdWCl/BwSreasKaOp2YsIUMILHMKtaXxp7gShV8SAIz+PrRI 18pxEPfpf8p1HIv7PlbFCoMYk8M+jiQv0mg7KRC6xK7aDZKZkkvoE4EYvmRa217fFZgo 7h5PcLVWvG+nVu1BNcI3OTQVA7teNBBqZjCY1NzKujrggtUsV3e454g1VcHtVwV7f1Xy 1zXBBn+oB/nORLjGB4ibxoOQ2oYIpzJI8Hq9AuXpMa2Auz5Bm3pCSiLBUvFbYeGmp5cM 808E7v/bZl0bElA2R7lc6mq3Qu7ACbHwCYnZYzSOmZFRcL2nGH7cw3gra6H+5kod4dNn GdYw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from dpdk.org (dpdk.org. [92.243.14.124]) by mx.google.com with ESMTP id k24si710138ejz.284.2019.10.09.00.48.17; Wed, 09 Oct 2019 00:48:18 -0700 (PDT) Received-SPF: pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) client-ip=92.243.14.124; Authentication-Results: mx.google.com; spf=pass (google.com: domain of dev-bounces@dpdk.org designates 92.243.14.124 as permitted sender) smtp.mailfrom=dev-bounces@dpdk.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 90C9B1C0AF; Wed, 9 Oct 2019 09:48:16 +0200 (CEST) Received: from inva021.nxp.com (inva021.nxp.com [92.121.34.21]) by dpdk.org (Postfix) with ESMTP id ED4DE1BFBA for ; Wed, 9 Oct 2019 09:48:14 +0200 (CEST) Received: from inva021.nxp.com (localhost [127.0.0.1]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id 7F31220038A; Wed, 9 Oct 2019 09:48:14 +0200 (CEST) Received: from invc005.ap-rdc01.nxp.com (invc005.ap-rdc01.nxp.com [165.114.16.14]) by inva021.eu-rdc02.nxp.com (Postfix) with ESMTP id BACE22008CA; Wed, 9 Oct 2019 09:48:07 +0200 (CEST) Received: from GDB1.ap.freescale.net (GDB1.ap.freescale.net [10.232.132.179]) by invc005.ap-rdc01.nxp.com (Postfix) with ESMTP id 89E36402B1; Wed, 9 Oct 2019 15:47:58 +0800 (SGT) From: Nipun Gupta To: dev@dpdk.org Cc: jerinj@marvell.com, aconole@redhat.com, pbhagavatula@marvell.com, skori@marvell.com, hemant.agrawal@nxp.com, bruce.richardson@intel.com, marko.kovacevic@intel.com, orika@mellanox.com, radu.nicolau@intel.com, tomasz.kantecki@intel.com, harry.van.haaren@intel.com, nikhil.rao@intel.com, Nipun Gupta Date: Wed, 9 Oct 2019 13:02:36 +0530 Message-Id: <20191009073236.32661-1-nipun.gupta@nxp.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191001064641.28404-1-nipun.gupta@nxp.com> References: <20191001064641.28404-1-nipun.gupta@nxp.com> X-Virus-Scanned: ClamAV using ClamSMTP Subject: [dpdk-dev] [PATCH v4] eventdev: flag to identify same destined packets enqueue X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" This patch introduces a `flag` in the Eth TX adapter enqueue API. Some drivers may support burst functionality only with the packets having same destination device and queue. The flag `RTE_EVENT_ETH_TX_ADAPTER_ENQUEUE_SAME_DEST` can be used to indicate this so the underlying driver, for drivers to utilize burst functionality appropriately. Signed-off-by: Nipun Gupta Acked-by: Jerin Jacob --- Changes in v4: - Update rel note specifying the API change - Remove redundant rte_event_tx_adapter_enqueue_same_dest API Changes in v3: - remove flag from internal txa_enqueue_same_dest internal API - ABI version update in makefile, meson and rel_notes - Few comments update Changes in v2: - have separate internal API in tx adapter for sending burst packets to same eth dev, queue pair on the basis of the passed flag - fix compilation of examples/eventdev_pipeline/ app/test-eventdev/test_pipeline_common.h | 6 +++--- .../prog_guide/event_ethernet_tx_adapter.rst | 3 ++- doc/guides/rel_notes/release_19_11.rst | 7 ++++++- .../eventdev_pipeline/pipeline_worker_tx.c | 2 +- lib/librte_eventdev/Makefile | 2 +- lib/librte_eventdev/meson.build | 2 +- .../rte_event_eth_tx_adapter.h | 19 +++++++++++++++++-- lib/librte_eventdev/rte_eventdev.c | 1 + lib/librte_eventdev/rte_eventdev.h | 10 ++++++++++ 9 files changed, 42 insertions(+), 10 deletions(-) -- 2.17.1 diff --git a/app/test-eventdev/test_pipeline_common.h b/app/test-eventdev/test_pipeline_common.h index 0440b9e29..6e73c6ab2 100644 --- a/app/test-eventdev/test_pipeline_common.h +++ b/app/test-eventdev/test_pipeline_common.h @@ -106,7 +106,7 @@ pipeline_event_tx(const uint8_t dev, const uint8_t port, struct rte_event * const ev) { rte_event_eth_tx_adapter_txq_set(ev->mbuf, 0); - while (!rte_event_eth_tx_adapter_enqueue(dev, port, ev, 1)) + while (!rte_event_eth_tx_adapter_enqueue(dev, port, ev, 1, 0)) rte_pause(); } @@ -116,10 +116,10 @@ pipeline_event_tx_burst(const uint8_t dev, const uint8_t port, { uint16_t enq; - enq = rte_event_eth_tx_adapter_enqueue(dev, port, ev, nb_rx); + enq = rte_event_eth_tx_adapter_enqueue(dev, port, ev, nb_rx, 0); while (enq < nb_rx) { enq += rte_event_eth_tx_adapter_enqueue(dev, port, - ev + enq, nb_rx - enq); + ev + enq, nb_rx - enq, 0); } } diff --git a/doc/guides/prog_guide/event_ethernet_tx_adapter.rst b/doc/guides/prog_guide/event_ethernet_tx_adapter.rst index 192f9e1cf..a8c13e136 100644 --- a/doc/guides/prog_guide/event_ethernet_tx_adapter.rst +++ b/doc/guides/prog_guide/event_ethernet_tx_adapter.rst @@ -137,11 +137,12 @@ should use the ``rte_event_enqueue_burst()`` function. if (cap & RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT) { event.mbuf = m; + eq_flags = 0; m->port = tx_port; rte_event_eth_tx_adapter_txq_set(m, tx_queue_id); - rte_event_eth_tx_adapter_enqueue(dev_id, ev_port, &event, 1); + rte_event_eth_tx_adapter_enqueue(dev_id, ev_port, &event, 1, eq_flags); } else { event.queue_id = qid; /* event queue linked to adapter port */ diff --git a/doc/guides/rel_notes/release_19_11.rst b/doc/guides/rel_notes/release_19_11.rst index 27cfbd9e3..051ab26b8 100644 --- a/doc/guides/rel_notes/release_19_11.rst +++ b/doc/guides/rel_notes/release_19_11.rst @@ -94,6 +94,11 @@ API Changes Also, make sure to start the actual text at the margin. ========================================================= +* event: The function ``rte_event_eth_tx_adapter_enqueue`` takes an additional + input as ``flags``. Flag ``RTE_EVENT_ETH_TX_ADAPTER_ENQUEUE_SAME_DEST`` which + has been introduced in this release is used when used when all the packets + enqueued in the tx adapter are destined for the same Ethernet port & Tx queue. + ABI Changes ----------- @@ -146,7 +151,7 @@ The libraries prepended with a plus sign were incremented in this version. librte_eal.so.11 librte_efd.so.1 librte_ethdev.so.12 - librte_eventdev.so.7 + librte_eventdev.so.8 librte_flow_classify.so.1 librte_gro.so.1 librte_gso.so.1 diff --git a/examples/eventdev_pipeline/pipeline_worker_tx.c b/examples/eventdev_pipeline/pipeline_worker_tx.c index 8961cd656..a0f40c27c 100644 --- a/examples/eventdev_pipeline/pipeline_worker_tx.c +++ b/examples/eventdev_pipeline/pipeline_worker_tx.c @@ -40,7 +40,7 @@ worker_tx_pkt(const uint8_t dev, const uint8_t port, struct rte_event *ev) { exchange_mac(ev->mbuf); rte_event_eth_tx_adapter_txq_set(ev->mbuf, 0); - while (!rte_event_eth_tx_adapter_enqueue(dev, port, ev, 1)) + while (!rte_event_eth_tx_adapter_enqueue(dev, port, ev, 1, 0)) rte_pause(); } diff --git a/lib/librte_eventdev/Makefile b/lib/librte_eventdev/Makefile index cd3ff8040..9e6a99aa1 100644 --- a/lib/librte_eventdev/Makefile +++ b/lib/librte_eventdev/Makefile @@ -8,7 +8,7 @@ include $(RTE_SDK)/mk/rte.vars.mk LIB = librte_eventdev.a # library version -LIBABIVER := 7 +LIBABIVER := 8 # build flags CFLAGS += -DALLOW_EXPERIMENTAL_API diff --git a/lib/librte_eventdev/meson.build b/lib/librte_eventdev/meson.build index 19541f23f..9ba6c0393 100644 --- a/lib/librte_eventdev/meson.build +++ b/lib/librte_eventdev/meson.build @@ -1,7 +1,7 @@ # SPDX-License-Identifier: BSD-3-Clause # Copyright(c) 2017 Intel Corporation -version = 7 +version = 8 allow_experimental_apis = true if is_linux diff --git a/lib/librte_eventdev/rte_event_eth_tx_adapter.h b/lib/librte_eventdev/rte_event_eth_tx_adapter.h index c848261c4..93b717af9 100644 --- a/lib/librte_eventdev/rte_event_eth_tx_adapter.h +++ b/lib/librte_eventdev/rte_event_eth_tx_adapter.h @@ -300,6 +300,11 @@ rte_event_eth_tx_adapter_txq_get(struct rte_mbuf *pkt) int rte_event_eth_tx_adapter_event_port_get(uint8_t id, uint8_t *event_port_id); +#define RTE_EVENT_ETH_TX_ADAPTER_ENQUEUE_SAME_DEST 0x1 +/**< This flag is used when all the packets enqueued in the tx adapter are + * destined for the same Ethernet port & Tx queue. + */ + /** * Enqueue a burst of events objects or an event object supplied in *rte_event* * structure on an event device designated by its *dev_id* through the event @@ -324,6 +329,10 @@ rte_event_eth_tx_adapter_event_port_get(uint8_t id, uint8_t *event_port_id); * The number of event objects to enqueue, typically number of * rte_event_port_attr_get(...RTE_EVENT_PORT_ATTR_ENQ_DEPTH...) * available for this port. + * @param flags + * RTE_EVENT_ETH_TX_ADAPTER_ENQUEUE_ flags. + * #RTE_EVENT_ETH_TX_ADAPTER_ENQUEUE_SAME_DEST signifies that all the packets + * which are enqueued are destined for the same Ethernet port & Tx queue. * * @return * The number of event objects actually enqueued on the event device. The @@ -343,7 +352,8 @@ static inline uint16_t rte_event_eth_tx_adapter_enqueue(uint8_t dev_id, uint8_t port_id, struct rte_event ev[], - uint16_t nb_events) + uint16_t nb_events, + const uint8_t flags) { const struct rte_eventdev *dev = &rte_eventdevs[dev_id]; @@ -359,7 +369,12 @@ rte_event_eth_tx_adapter_enqueue(uint8_t dev_id, return 0; } #endif - return dev->txa_enqueue(dev->data->ports[port_id], ev, nb_events); + if (flags) + return dev->txa_enqueue_same_dest(dev->data->ports[port_id], + ev, nb_events); + else + return dev->txa_enqueue(dev->data->ports[port_id], ev, + nb_events); } /** diff --git a/lib/librte_eventdev/rte_eventdev.c b/lib/librte_eventdev/rte_eventdev.c index f44c869cb..b987e0745 100644 --- a/lib/librte_eventdev/rte_eventdev.c +++ b/lib/librte_eventdev/rte_eventdev.c @@ -1351,6 +1351,7 @@ rte_event_pmd_allocate(const char *name, int socket_id) eventdev = &rte_eventdevs[dev_id]; eventdev->txa_enqueue = rte_event_tx_adapter_enqueue; + eventdev->txa_enqueue_same_dest = rte_event_tx_adapter_enqueue; if (eventdev->data == NULL) { struct rte_eventdev_data *eventdev_data = NULL; diff --git a/lib/librte_eventdev/rte_eventdev.h b/lib/librte_eventdev/rte_eventdev.h index 5044a13d0..ced6f29d9 100644 --- a/lib/librte_eventdev/rte_eventdev.h +++ b/lib/librte_eventdev/rte_eventdev.h @@ -1230,6 +1230,12 @@ typedef uint16_t (*event_tx_adapter_enqueue)(void *port, struct rte_event ev[], uint16_t nb_events); /**< @internal Enqueue burst of events on port of a device */ +typedef uint16_t (*event_tx_adapter_enqueue_same_dest)(void *port, + struct rte_event ev[], uint16_t nb_events); +/**< @internal Enqueue burst of events on port of a device supporting + * burst having same destination Ethernet port & Tx queue. + */ + #define RTE_EVENTDEV_NAME_MAX_LEN (64) /**< @internal Max length of name of event PMD */ @@ -1292,6 +1298,10 @@ struct rte_eventdev { /**< Pointer to PMD dequeue function. */ event_dequeue_burst_t dequeue_burst; /**< Pointer to PMD dequeue burst function. */ + event_tx_adapter_enqueue_same_dest txa_enqueue_same_dest; + /**< Pointer to PMD eth Tx adapter burst enqueue function with + * events destined to same Eth port & Tx queue. + */ event_tx_adapter_enqueue txa_enqueue; /**< Pointer to PMD eth Tx adapter enqueue function. */ struct rte_eventdev_data *data;