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 A8330A054F for ; Mon, 1 Mar 2021 18:01:52 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 96FF422A304; Mon, 1 Mar 2021 18:01:52 +0100 (CET) Received: from m12-11.163.com (m12-11.163.com [220.181.12.11]) by mails.dpdk.org (Postfix) with ESMTP id C3ABF22A2D5; Mon, 1 Mar 2021 18:01:50 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=Subject:From:Message-ID:Date:MIME-Version; bh=P2bfX FRz/tbGTijeUfwdfNDp+iiqvRuvoHnnvoBfkuE=; b=ifCk36s/YATfEgWGKzQdy gHJ/d382PWz720YJ0lwGeYWXcNKTx+mOr22PIn1/TtpyDoWPc7oTTI6EWBFR143Z 7/sYdlCwWF5gBTidLUm3IAXnx55aII6V/vBMHL3WYBYch+lbVqxoTdgv9bbvAHTs mMzp1LPkh8/vRqmBWA8Oc0= Received: from appledeMacBook-Pro.local (unknown [112.10.65.103]) by smtp7 (Coremail) with SMTP id C8CowADH52_6HT1gXXH9Pw--.3666S3; Tue, 02 Mar 2021 01:01:47 +0800 (CST) To: Slava Ovsiienko , "dev@dpdk.org" Cc: "zhujiawei12@huawei.com" , Matan Azrad , Shahaf Shuler , "stable@dpdk.org" References: <1613384114-17855-1-git-send-email-17826875952@163.com> <2623ef20-39e9-fc8b-ca70-c7c450d95cfb@163.com> From: Jiawei Zhu <17826875952@163.com> Message-ID: Date: Tue, 2 Mar 2021 01:01:46 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-CM-TRANSID: C8CowADH52_6HT1gXXH9Pw--.3666S3 X-Coremail-Antispam: 1Uf129KBjvJXoWxWw13XF4xZFWrCrW3ur17Jrb_yoWrCr45pr 4IqFy2yFZ5Z340v3ZFq3ZYg34Fv395Jw4jgwn8Gw1fZ3s09ryFqFW2gayUuFykCr4kKa1I qr1DZrn3GrW5ZrDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07befOwUUUUU= X-Originating-IP: [112.10.65.103] X-CM-SenderInfo: bprxmjywyxkmivs6il2tof0z/1tbiqglI9lr7sReDFgAAsP Subject: Re: [dpdk-stable] [PATCH] net/mlx5: fix wrong segmented packet in Rx X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 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, Slava Thank you for your agreement. Here is the v2 patch: https://patches.dpdk.org/project/dpdk/patch/1614617885-2650-1-git-send-email-17826875952@163.com/ With best regards, Jiawei On 2021/3/1 5:13 PM, Slava Ovsiienko wrote: > Hi, Jiawei > > Thank you for the clarification. I missed the point that we have updated elts array > with new allocated mbufs and are not able to retry packet building anymore. > Very good catch, thank you! Could you, please, add this extra explanation > to the commit message and send the v2 ? > > With best regards, > Slava > >> -----Original Message----- >> From: Jiawei Zhu <17826875952@163.com> >> Sent: Friday, February 26, 2021 18:11 >> To: Slava Ovsiienko ; dev@dpdk.org >> Cc: zhujiawei12@huawei.com; Matan Azrad ; Shahaf >> Shuler ; stable@dpdk.org >> Subject: Re: [PATCH] net/mlx5: fix wrong segmented packet in Rx >> >> Hi, Slava >> >> Thanks for reading my patch, my issue may not be clear. >> Here I give a possible error. >> - we assume segs_n is 4 and we are receiving 4 segments multi-segment >> packet. >> - we fail to alloc mbuf when receive the 3th segment,so it will free the >> mbufs which packet chain we have built. Here are the 1st and 2nd segment. >> - Rx queue in this stride, the 1st and the 2nd segment are fill the new mbuf >> and there data will be rand, but the 3th and 4th segment are still fill the last >> data. So next if still begin on this stride, it will reveice wrong multi-segment >> packet. >> >> - So we should discarded this packets and pass this stride. After exit the loop, >> we should align the next consumer index. >> >> What Do you thinking? >> >> With best regards >> Jiawei >> >> On 2021/2/24 9:20 PM, Slava Ovsiienko wrote: >>> Hi, Jiawei >>> >>> Thank you for the patch, but It seems I need some clarifications. >>> As far I understand the issue: >>> >>> - we are in the midst of receiving the multi-segment packet >>> - we have some mbufs allocated and packet chain is partially built >>> - we fail on allocation replenishing mbuf for the segment >>> - we free all the mbuf of the built chain >>> - exit from the rx_burtst loop >>> - rq_ci is expected to be kept pointing to the beginning of the current >>> stride - it is supposed on next rx_burst() invocation we'll continue >>> Rx queue handling from the stride where we failed >>> - on loop exit we see the code: >>> if (unlikely((i == 0) && ((rq_ci >> sges_n) == rxq->rq_ci))) >>> return 0; >>> /* Update the consumer index. */ >>> rxq->rq_ci = rq_ci >> sges_n; >>> hence, rq_ci is always shifted by sges_n, all increments happened >>> during failed packet processing are just discarded, it seems no fix is needed. >>> >>> Did I miss something? >>> >>> With best regards, >>> Slava >>> >>>> -----Original Message----- >>>> From: Jiawei Zhu <17826875952@163.com> >>>> Sent: Monday, February 15, 2021 12:15 >>>> To: dev@dpdk.org >>>> Cc: zhujiawei12@huawei.com; Matan Azrad ; Shahaf >>>> Shuler ; Slava Ovsiienko >>>> ; Jiawei Zhu <17826875952@163.com>; >>>> stable@dpdk.org >>>> Subject: [PATCH] net/mlx5: fix wrong segmented packet in Rx >>>> >>>> Fixed issue could occur when Mbuf starvation happens in a middle of >>>> reception of a segmented packet. >>>> In such a situation, after release the segments of that packet, it >>>> does not align consumer index to the next stride. >>>> This would cause receive a wrong segmented packet. >>>> >>>> Fixes: 15a756b63734 ("net/mlx5: fix possible NULL dereference in Rx >>>> path") >>>> Cc: stable@dpdk.org >>>> >>>> Signed-off-by: Jiawei Zhu <17826875952@163.com> >>>> --- >>>> drivers/net/mlx5/mlx5_rxtx.c | 3 +++ >>>> 1 file changed, 3 insertions(+) >>>> >>>> diff --git a/drivers/net/mlx5/mlx5_rxtx.c >>>> b/drivers/net/mlx5/mlx5_rxtx.c index 2e4b87c..e3ce9fd 100644 >>>> --- a/drivers/net/mlx5/mlx5_rxtx.c >>>> +++ b/drivers/net/mlx5/mlx5_rxtx.c >>>> @@ -1480,6 +1480,9 @@ enum mlx5_txcmp_code { >>>> rte_mbuf_raw_free(pkt); >>>> pkt = rep; >>>> } >>>> + rq_ci >>= sges_n; >>>> + ++rq_ci; >>>> + rq_ci <<= sges_n; >>>> break; >>>> } >>>> if (!pkt) { >>>> -- >>>> 1.8.3.1 >>>> >>> >