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 23789A0093 for ; Tue, 19 May 2020 15:10:31 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 1C92A1D6DF; Tue, 19 May 2020 15:10:31 +0200 (CEST) Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by dpdk.org (Postfix) with ESMTP id 6A8961D6A4 for ; Tue, 19 May 2020 15:10:29 +0200 (CEST) Received: by mail-wm1-f66.google.com with SMTP id f134so3017530wmf.1 for ; Tue, 19 May 2020 06:10:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9mMYnU1oHSNicAIuKEdj5CRGqKP6UY3hQicMbRUS0K4=; b=et7hDMpLb0yPf+l0jm9wtLR40dkeN2izAMX/tt8Z1PCatmnerixy8Hvx3AGwlHWh7v +UpGH4J7UXFpt1Qo/o8D61LLIIGcTTziYg2FbxhOGGpMnMp/+fCdVRLDZ8q2rx/DLh2H vEfuFlj/HSQGH4q1FIPNbsvKaBArpY9F6VOMQ+9wOip0NYhiZbmJN1SSPWyN0wFGuMgj 66z3/TsAgykMDoB1Vyp0oFA17i95TH93Dv3g5Qs6B85ymKUfS8ryCjm9sVvD4XDyp6qU wBdqpEobizW20jnBoS+fUstmO/GolJioNgrvYISxQuAKYjzitNZDnVklZlOP3P9ojy5t it1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=9mMYnU1oHSNicAIuKEdj5CRGqKP6UY3hQicMbRUS0K4=; b=s2uPG/FlXg+kZVOK0x1S3i/stW4RO9KksYe5zQc24w1kWtvXgYlgFEPhrL99AuE3HH 009frUP0GKYvadzPx1d2BoCC/gBoLof8vJC2D0taBPnx5hnHLEfwZpd9mPPGh3f+ado0 xqNgpgG4h43YVebc85sBiwf9R0wbPRZp2ox9DyMckjc8oLHvIil2d+rKbw+GIW2eV9Js 9aR2iF7rCdRAUvHZWSdzA6Q6z1Lg47/INWno9xjVPOeVBB6SiqIk9Q5EAbNh+xwDmQOH B7aGy+yEalwF5jsOIcGG8zbglZz2fh62SNkB4oSQ1Xgf8fzaMu4TRW+Xgdrg/a7b4fXH VXsQ== X-Gm-Message-State: AOAM53203ZPG1c0q0WmkoC2iPahA9s+jGmz6BSGbiKdTyLCxx+XlQtQb YBI0sXC0+jrCWUCjDPTW0ak= X-Google-Smtp-Source: ABdhPJwt2bNubtUduyipVB5jPtnx0EOKfaTrtKYKfDQDBbNivpkEK4wf7Zq3kxBqN8KnuSWe/1dmeQ== X-Received: by 2002:a05:600c:218e:: with SMTP id e14mr5263514wme.62.1589893829176; Tue, 19 May 2020 06:10:29 -0700 (PDT) Received: from localhost ([88.98.246.218]) by smtp.gmail.com with ESMTPSA id b145sm4306343wme.41.2020.05.19.06.10.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2020 06:10:28 -0700 (PDT) From: luca.boccassi@gmail.com To: Alexander Kozyrev Cc: Viacheslav Ovsiienko , Matan Azrad , dpdk stable Date: Tue, 19 May 2020 14:03:42 +0100 Message-Id: <20200519130549.112823-87-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200519130549.112823-1-luca.boccassi@gmail.com> References: <20200519125804.104349-1-luca.boccassi@gmail.com> <20200519130549.112823-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] patch 'net/mlx5: add multi-segment packets in MPRQ mode' has been queued to stable release 19.11.3 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi, FYI, your patch has been queued to stable release 19.11.3 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 05/21/20. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Thanks. Luca Boccassi --- >From afca8bc661463f5f6c09ec6ecbcecd88f8f3a7ea Mon Sep 17 00:00:00 2001 From: Alexander Kozyrev Date: Thu, 9 Apr 2020 22:23:53 +0000 Subject: [PATCH] net/mlx5: add multi-segment packets in MPRQ mode [ upstream commit 775fc97b0125c29f4bd36490f46f5f1e11dc048f ] The multi-stride operations now allow to reduce a stride size while supporting Jumbo frames. That means that it is possible to have mbufs configured with a size smaller than the whole packet received. It is not an issue during normal MPRQ operations since we attach external buffers instead of copying the data into the mbuf itself. But it is not the case in "emergency mode" when we have to copy every packet because of no more external mbufs are available. Assemble a multi-segment packet to overcome this issue in case scatter mode is enabled, drop a packet if not. Signed-off-by: Alexander Kozyrev Acked-by: Viacheslav Ovsiienko Acked-by: Matan Azrad --- drivers/net/mlx5/mlx5_rxtx.c | 47 ++++++++++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index c2007282f6..ae89406d65 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -1645,22 +1645,52 @@ mlx5_rx_burst_mprq(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n) * Memcpy packets to the target mbuf if: * - The size of packet is smaller than mprq_max_memcpy_len. * - Out of buffer in the Mempool for Multi-Packet RQ. - * - There is no space for a headroom and scatter is disabled. + * - The packet's stride overlaps a headroom and scatter is off. */ if (len <= rxq->mprq_max_memcpy_len || rxq->mprq_repl == NULL || (hdrm_overlap > 0 && !rxq->strd_scatter_en)) { - /* - * When memcpy'ing packet due to out-of-buffer, the - * packet must be smaller than the target mbuf. - */ - if (unlikely(rte_pktmbuf_tailroom(pkt) < len)) { + if (likely(rte_pktmbuf_tailroom(pkt) >= len)) { + rte_memcpy(rte_pktmbuf_mtod(pkt, void *), + addr, len); + DATA_LEN(pkt) = len; + } else if (rxq->strd_scatter_en) { + struct rte_mbuf *prev = pkt; + uint32_t seg_len = + RTE_MIN(rte_pktmbuf_tailroom(pkt), len); + uint32_t rem_len = len - seg_len; + + rte_memcpy(rte_pktmbuf_mtod(pkt, void *), + addr, seg_len); + DATA_LEN(pkt) = seg_len; + while (rem_len) { + struct rte_mbuf *next = + rte_pktmbuf_alloc(rxq->mp); + + if (unlikely(next == NULL)) { + rte_pktmbuf_free(pkt); + ++rxq->stats.rx_nombuf; + goto out; + } + NEXT(prev) = next; + SET_DATA_OFF(next, 0); + addr = RTE_PTR_ADD(addr, seg_len); + seg_len = RTE_MIN + (rte_pktmbuf_tailroom(next), + rem_len); + rte_memcpy + (rte_pktmbuf_mtod(next, void *), + addr, seg_len); + DATA_LEN(next) = seg_len; + rem_len -= seg_len; + prev = next; + ++NB_SEGS(pkt); + } + } else { rte_pktmbuf_free_seg(pkt); ++rxq->stats.idropped; continue; } - rte_memcpy(rte_pktmbuf_mtod(pkt, void *), addr, len); - DATA_LEN(pkt) = len; } else { rte_iova_t buf_iova; struct rte_mbuf_ext_shared_info *shinfo; @@ -1737,6 +1767,7 @@ mlx5_rx_burst_mprq(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n) *(pkts++) = pkt; ++i; } +out: /* Update the consumer indexes. */ rxq->consumed_strd = consumed_strd; rte_cio_wmb(); -- 2.20.1 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2020-05-19 14:04:48.003190361 +0100 +++ 0087-net-mlx5-add-multi-segment-packets-in-MPRQ-mode.patch 2020-05-19 14:04:44.272649387 +0100 @@ -1,8 +1,10 @@ -From 775fc97b0125c29f4bd36490f46f5f1e11dc048f Mon Sep 17 00:00:00 2001 +From afca8bc661463f5f6c09ec6ecbcecd88f8f3a7ea Mon Sep 17 00:00:00 2001 From: Alexander Kozyrev Date: Thu, 9 Apr 2020 22:23:53 +0000 Subject: [PATCH] net/mlx5: add multi-segment packets in MPRQ mode +[ upstream commit 775fc97b0125c29f4bd36490f46f5f1e11dc048f ] + The multi-stride operations now allow to reduce a stride size while supporting Jumbo frames. That means that it is possible to have mbufs configured with a size smaller than the whole @@ -13,8 +15,6 @@ mbufs are available. Assemble a multi-segment packet to overcome this issue in case scatter mode is enabled, drop a packet if not. -Cc: stable@dpdk.org - Signed-off-by: Alexander Kozyrev Acked-by: Viacheslav Ovsiienko Acked-by: Matan Azrad @@ -23,10 +23,10 @@ 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c -index 4c279520d1..7ce3732fd3 100644 +index c2007282f6..ae89406d65 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c -@@ -1734,22 +1734,52 @@ mlx5_rx_burst_mprq(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n) +@@ -1645,22 +1645,52 @@ mlx5_rx_burst_mprq(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n) * Memcpy packets to the target mbuf if: * - The size of packet is smaller than mprq_max_memcpy_len. * - Out of buffer in the Mempool for Multi-Packet RQ. @@ -87,7 +87,7 @@ } else { rte_iova_t buf_iova; struct rte_mbuf_ext_shared_info *shinfo; -@@ -1826,6 +1856,7 @@ mlx5_rx_burst_mprq(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n) +@@ -1737,6 +1767,7 @@ mlx5_rx_burst_mprq(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n) *(pkts++) = pkt; ++i; }