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 A8726A0A02; Tue, 6 Apr 2021 07:25:25 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 825C8406A2; Tue, 6 Apr 2021 07:25:25 +0200 (CEST) Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) by mails.dpdk.org (Postfix) with ESMTP id D637F4068B for ; Tue, 6 Apr 2021 07:25:23 +0200 (CEST) Received: by mail-ej1-f44.google.com with SMTP id b7so19911537ejv.1 for ; Mon, 05 Apr 2021 22:25:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=irDjgHgaiIq/f7odTuJLUjseHrETiM6KTsz9TCogW6U=; b=1e/+0JoS21GDexg0v/rwvGYEnIns5VDdf0dJeaVLwWAxXPO+e7c/TCEeIZDwTz1MhJ CyG+jFMAYPn0Z0DRIZSAInZhlZksprCPnTV8VeUrjUw22RgfDh6lJtDaNtxouXXed2Ld o61L7sGUCVkQvtw7aAhg8enU0uR9abQ+aNqm9efTVnXY/9Nqn71FM/MzWkWECZBu/oCq AqLCfbmTlpmHU4h3GC5EGxTq7qCwCbiJaRfDmwECzw3N2qVhHtzC4eB18XrBTL8++WWC KeIw8ORIsu2L4QRWio+7PaLzZeYh52r/KCDiNukjm6zi0TmLP4TFdN+V3lrEUUvZGLrp imPw== 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:content-transfer-encoding; bh=irDjgHgaiIq/f7odTuJLUjseHrETiM6KTsz9TCogW6U=; b=KD8ypmTLAhSmMOUvLimFJtTNy6CFFSXipu6rz3Ec95A6y/5V76sCCDiA0Wt4F2et+z hTt+ZR0bm3GiAkjvCXKc85QfL55WCxw+K7LK3n+MR9ip2G0wy6ugnk36nRg/91t0HqXn E4dRFDPGyNqyFREWO5a8W4Vcx2Tt5S5lk5e00D9UR+c375aC/XX8bV/9rtBbeU/rtQE7 6e6bDx+gheJUqJbEtOO/hb4Ql+R2O+wLOiY1TLX8jRJs23VErYufj5sOxY4/+70o8uSR 5VhKwqcn8YgTw6Gn2BdfhPvulgasnGsCGz/wHt4IegN4TDC9w3GEUEukxKGlMz9mMbfr +u/A== X-Gm-Message-State: AOAM533kEN/Ea7HePw9GysggP6FUPBdO4DQdJHEq5tbVzr3f4lluQjbx 3+A1e4VpjDJ8H/f7mrx/o9dxRI1Gn5N2c+2wwM9qVg== X-Google-Smtp-Source: ABdhPJxcK+2X3JR2ZQbHz0VUQTWP9/GLl9igFN+XGm2NPboU6ocwPtAtAhiVHMbx+kIFLBOMpcdjsE2E21sSrNU5ddA= X-Received: by 2002:a17:906:170d:: with SMTP id c13mr31170285eje.491.1617686723638; Mon, 05 Apr 2021 22:25:23 -0700 (PDT) MIME-Version: 1.0 References: <20210406002719.2556501-1-dharton@cisco.com> In-Reply-To: <20210406002719.2556501-1-dharton@cisco.com> From: =?UTF-8?Q?Micha=C5=82_Krawczyk?= Date: Tue, 6 Apr 2021 07:25:08 +0200 Message-ID: To: David Harton Cc: Marcin Wojtas , "Tzalik, Guy" , "Schmeilin, Evgeny" , "Chauskin, Igor" , dev Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Subject: Re: [dpdk-dev] [PATCH] net/ena: fix releasing Tx ring mbufs 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" wt., 6 kwi 2021 o 02:27 David Harton napisa=C5=82(a): > > When ena_tx_queue_release_bufs() frees the mbufs it does not clear > the mbuf pointers. So, when the device starts and stops multiple > times it can cause the application to receive duplicate mbufs for > two different packets. Fix the issue by clearing the mbuf pointer. > > Also, while tracking down the "double free" issue the ena calls to > allocate and free mbufs in bulk were migrated to the mbuf based APIs > so the common mbuf alloc/free routines are exercised. > > Fixes: 79405ee17585 ("net/ena: fix out of order completion") > Fixes: 1173fca25af9 ("ena: add polling-mode driver") > > Signed-off-by: David Harton Acked-by: Michal Krawczyk > --- > drivers/net/ena/ena_ethdev.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c > index 9aa51c9dc..f60e843b7 100644 > --- a/drivers/net/ena/ena_ethdev.c > +++ b/drivers/net/ena/ena_ethdev.c > @@ -767,8 +767,10 @@ static void ena_tx_queue_release_bufs(struct ena_rin= g *ring) > for (i =3D 0; i < ring->ring_size; ++i) { > struct ena_tx_buffer *tx_buf =3D &ring->tx_buffer_info[i]= ; > > - if (tx_buf->mbuf) > + if (tx_buf->mbuf) { > rte_pktmbuf_free(tx_buf->mbuf); > + tx_buf->mbuf =3D NULL; > + } > } > } > > @@ -1457,7 +1459,7 @@ static int ena_populate_rx_queue(struct ena_ring *r= xq, unsigned int count) > "bad ring state\n"); > > /* get resources for incoming packets */ > - rc =3D rte_mempool_get_bulk(rxq->mb_pool, (void **)mbufs, count); > + rc =3D rte_pktmbuf_alloc_bulk(rxq->mb_pool, mbufs, count); > if (unlikely(rc < 0)) { > rte_atomic64_inc(&rxq->adapter->drv_stats->rx_nombuf); > ++rxq->rx_stats.mbuf_alloc_fail; > @@ -1486,8 +1488,7 @@ static int ena_populate_rx_queue(struct ena_ring *r= xq, unsigned int count) > if (unlikely(i < count)) { > PMD_DRV_LOG(WARNING, "refilled rx qid %d with only %d " > "buffers (from %d)\n", rxq->id, i, count); > - rte_mempool_put_bulk(rxq->mb_pool, (void **)(&mbufs[i]), > - count - i); > + rte_pktmbuf_free_bulk(&mbufs[i], count - i); > ++rxq->rx_stats.refill_partial; > } > > -- > 2.26.2.Cisco >