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 A33BBA034F; Fri, 26 Feb 2021 17:11:43 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1C735407FF; Fri, 26 Feb 2021 17:11:43 +0100 (CET) Received: from m12-14.163.com (m12-14.163.com [220.181.12.14]) by mails.dpdk.org (Postfix) with ESMTP id 6652940692; Fri, 26 Feb 2021 17:11:40 +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=8wAiW zbgzQRv6r+0d7/YRcb82R3ECEqdPwlfOnBL3oA=; b=lO3MbypGPZEVCUvaPSPwB aenaf39w66dJugpZZ8FWDnpkiPtbUM+M4gBWNr5NhcRG8ABgt2ZHYZNSPzFQf/9H uJt3uERb5XP6ZUSZvsxuARFug6/plBY7eyBZiHcBXFTmqpLDHykiU8+LilMCvU2G FdXIG5IeQy96dUaGpFDVCA= Received: from appledeMacBook-Pro.local (unknown [112.10.65.103]) by smtp10 (Coremail) with SMTP id DsCowAC3tPmmHTlgZQC+mg--.61848S3; Sat, 27 Feb 2021 00:11:18 +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> From: Jiawei Zhu <17826875952@163.com> Message-ID: <2623ef20-39e9-fc8b-ca70-c7c450d95cfb@163.com> Date: Sat, 27 Feb 2021 00:11:03 +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: DsCowAC3tPmmHTlgZQC+mg--.61848S3 X-Coremail-Antispam: 1Uf129KBjvJXoWxuryUJryrZw45Cr1UtrWrXwb_yoW5CrWxpr 4IgFyUAFZ5J340v3ZFq3Z5W34ruw4rAw4jkr1UGw1rZ3sxu34FgrWaga1UuFyDCr4qka42 qr4qvwn5GFW5ZrDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x07belksUUUUU= X-Originating-IP: [112.10.65.103] X-CM-SenderInfo: bprxmjywyxkmivs6il2tof0z/1tbiHRlF9lSIpe8-TQAAsT Subject: Re: [dpdk-dev] [PATCH] net/mlx5: fix wrong segmented packet in Rx 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 Sender: "dev" 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 >> >