From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 855D4A04FD; Tue, 14 Jan 2020 05:06:42 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 39B791C1D0; Tue, 14 Jan 2020 05:06:42 +0100 (CET) Received: from mail-il1-f193.google.com (mail-il1-f193.google.com [209.85.166.193]) by dpdk.org (Postfix) with ESMTP id 35F9A1C1C8 for ; Tue, 14 Jan 2020 05:06:40 +0100 (CET) Received: by mail-il1-f193.google.com with SMTP id t17so10218852ilm.13 for ; Mon, 13 Jan 2020 20:06:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Yc3Zo0Wi0tqGfE8UR7KuFBMtqpSLBlWMHh7pRwDXSGc=; b=PWhu4FHZJCh9GmtHnSEydugxvy7h4H3Oakrqqrwm75Kk4gdZ1kFFRi579uctVTbJt7 4UkkR3JVGIm5JZfUXu2+59jZ/unI3OoZiHhl3cnpN2J/38TjoOHZjuMDHVUBwXJpwaYJ GWJrpLMKMqIHwpubVnw7zPIsM1pc2rtd9EJ6BwQZblw2eiXNUIXSlr62MKqqyLtvGLAf +HRMojEqBTTEtis9z8x6STcfcmu0zKtIDRfPn3gvYl89oJUXS48dNAU0vvwuUvbEoM/B iA5CXqLixhrUjRB++jXiZSRmCsegwI7YXC/wpX3Vph1tjrq/qd7s7rLF8sPjy1Zkp0O/ eG6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Yc3Zo0Wi0tqGfE8UR7KuFBMtqpSLBlWMHh7pRwDXSGc=; b=eG/x6uf7vPW3JjuGDDinebJHi0B+T19BaXjZY3/gI0cvbx7Jhhd1HKXPcQQuoBgxan 4ZwGWzae8MPdAz09sgf/hzQ11AHfDU9JG4AfOrCS06K1pTIk0oHf+TamUQgnvwcpVY9I ivdKY0yV1wL7Q+jElp+AJe7FaLb51+9ueSinkXcrwfamiwS9ERQgs9I+4O/aCMqx8Bs1 ACzCKY9oLkPabLNecwrpk8l1WtG+zYDQTPanFqV8BeuTUuQpKOZ4tL64q757ZXe6xUwD dUk42bTdklz70D0dQdt983n6F0DLJbBSPvuHmvV07/TS2IX+T9678rM0I3J8VbM3bijl Av5w== X-Gm-Message-State: APjAAAVOUjy9cn6kqGTjSlsOxTEJGjO8VJSNR4oxwIFLdQuix/rh3Yeu Au0HbnR2cZx724+1Hc1O7gzxrCao/FlfmIed4lQ= X-Google-Smtp-Source: APXvYqxsxEeEIcyldST8g961tICL4r+woEmzbbO6TyA8ydFfSrrvCUub22S6JIxWS1ilRMIXDad4nCPLwYq4Y0o32fo= X-Received: by 2002:a92:dcca:: with SMTP id b10mr1775226ilr.294.1578974799504; Mon, 13 Jan 2020 20:06:39 -0800 (PST) MIME-Version: 1.0 References: <20191220130252.21974-1-vattunuru@marvell.com> In-Reply-To: <20191220130252.21974-1-vattunuru@marvell.com> From: Jerin Jacob Date: Tue, 14 Jan 2020 09:36:23 +0530 Message-ID: To: Vamsi Attunuru , Ferruh Yigit Cc: dpdk-dev , Jerin Jacob , Nithin Dabilpuram Content-Type: text/plain; charset="UTF-8" Subject: Re: [dpdk-dev] [PATCH v1 1/1] net/octeontx2: allow vec to process pkts not multiple of 4 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" On Fri, Dec 20, 2019 at 6:33 PM wrote: > > From: Vamsi Attunuru > > Current vector mode implementation floor-aligns pkt count > with NIX_DESCS_PER_LOOP and process that many packets. > > Patch addresses the case where pkt count modulo NIX_DESCS_PER_LOOP > is non-zero, after the vector mode processing, scalar routine is > used to process if there are any leftover packets. Scalar routine > is also used when descriptor head is about to wrap and turn out to > be unaligned. > > Signed-off-by: Vamsi Attunuru > Signed-off-by: Nithin Dabilpuram Applied to dpdk-next-net-mrvl/master. Thanks > --- > drivers/net/octeontx2/otx2_rx.c | 18 ++++++++++++++---- > drivers/net/octeontx2/otx2_tx.c | 18 +++++++++++++----- > 2 files changed, 27 insertions(+), 9 deletions(-) > > diff --git a/drivers/net/octeontx2/otx2_rx.c b/drivers/net/octeontx2/otx2_rx.c > index 48565db..8e6452a 100644 > --- a/drivers/net/octeontx2/otx2_rx.c > +++ b/drivers/net/octeontx2/otx2_rx.c > @@ -130,16 +130,22 @@ nix_recv_pkts_vector(void *rx_queue, struct rte_mbuf **rx_pkts, > const uintptr_t desc = rxq->desc; > uint8x16_t f0, f1, f2, f3; > uint32_t head = rxq->head; > + uint16_t pkts_left; > > pkts = nix_rx_nb_pkts(rxq, wdata, pkts, qmask); > + pkts_left = pkts & (NIX_DESCS_PER_LOOP - 1); > + > /* Packets has to be floor-aligned to NIX_DESCS_PER_LOOP */ > pkts = RTE_ALIGN_FLOOR(pkts, NIX_DESCS_PER_LOOP); > > while (packets < pkts) { > - /* Get the CQ pointers, since the ring size is multiple of > - * 4, We can avoid checking the wrap around of head > - * value after the each access unlike scalar version. > - */ > + /* Exit loop if head is about to wrap and become unaligned */ > + if (((head + NIX_DESCS_PER_LOOP - 1) & qmask) < > + NIX_DESCS_PER_LOOP) { > + pkts_left += (pkts - packets); > + break; > + } > + > const uintptr_t cq0 = desc + CQE_SZ(head); > > /* Prefetch N desc ahead */ > @@ -301,6 +307,10 @@ nix_recv_pkts_vector(void *rx_queue, struct rte_mbuf **rx_pkts, > /* Free all the CQs that we've processed */ > otx2_write64((rxq->wdata | packets), rxq->cq_door); > > + if (unlikely(pkts_left)) > + packets += nix_recv_pkts(rx_queue, &rx_pkts[packets], > + pkts_left, flags); > + > return packets; > } > > diff --git a/drivers/net/octeontx2/otx2_tx.c b/drivers/net/octeontx2/otx2_tx.c > index fa53300..96be92a 100644 > --- a/drivers/net/octeontx2/otx2_tx.c > +++ b/drivers/net/octeontx2/otx2_tx.c > @@ -97,7 +97,7 @@ nix_xmit_pkts_mseg(void *tx_queue, struct rte_mbuf **tx_pkts, > #define NIX_DESCS_PER_LOOP 4 > static __rte_always_inline uint16_t > nix_xmit_pkts_vector(void *tx_queue, struct rte_mbuf **tx_pkts, > - uint16_t pkts, const uint16_t flags) > + uint16_t pkts, uint64_t *cmd, const uint16_t flags) > { > uint64x2_t dataoff_iova0, dataoff_iova1, dataoff_iova2, dataoff_iova3; > uint64x2_t len_olflags0, len_olflags1, len_olflags2, len_olflags3; > @@ -118,11 +118,13 @@ nix_xmit_pkts_vector(void *tx_queue, struct rte_mbuf **tx_pkts, > uint64x2_t cmd20, cmd21; > uint64x2_t cmd30, cmd31; > uint64_t lmt_status, i; > - > - pkts = RTE_ALIGN_FLOOR(pkts, NIX_DESCS_PER_LOOP); > + uint16_t pkts_left; > > NIX_XMIT_FC_OR_RETURN(txq, pkts); > > + pkts_left = pkts & (NIX_DESCS_PER_LOOP - 1); > + pkts = RTE_ALIGN_FLOOR(pkts, NIX_DESCS_PER_LOOP); > + > /* Reduce the cached count */ > txq->fc_cache_pkts -= pkts; > > @@ -929,17 +931,21 @@ nix_xmit_pkts_vector(void *tx_queue, struct rte_mbuf **tx_pkts, > } while (lmt_status == 0); > } > > + if (unlikely(pkts_left)) > + pkts += nix_xmit_pkts(tx_queue, tx_pkts, pkts_left, cmd, flags); > + > return pkts; > } > > #else > static __rte_always_inline uint16_t > nix_xmit_pkts_vector(void *tx_queue, struct rte_mbuf **tx_pkts, > - uint16_t pkts, const uint16_t flags) > + uint16_t pkts, uint64_t *cmd, const uint16_t flags) > { > RTE_SET_USED(tx_queue); > RTE_SET_USED(tx_pkts); > RTE_SET_USED(pkts); > + RTE_SET_USED(cmd); > RTE_SET_USED(flags); > return 0; > } > @@ -985,12 +991,14 @@ static uint16_t __rte_noinline __hot \ > otx2_nix_xmit_pkts_vec_ ## name(void *tx_queue, \ > struct rte_mbuf **tx_pkts, uint16_t pkts) \ > { \ > + uint64_t cmd[sz]; \ > + \ > /* VLAN, TSTMP, TSO is not supported by vec */ \ > if ((flags) & NIX_TX_OFFLOAD_VLAN_QINQ_F || \ > (flags) & NIX_TX_OFFLOAD_TSTAMP_F || \ > (flags) & NIX_TX_OFFLOAD_TSO_F) \ > return 0; \ > - return nix_xmit_pkts_vector(tx_queue, tx_pkts, pkts, (flags)); \ > + return nix_xmit_pkts_vector(tx_queue, tx_pkts, pkts, cmd, (flags)); \ > } > > NIX_TX_FASTPATH_MODES > -- > 2.8.4 >