[PATCH] net/nfp: fix the Tx descriptor free logic of nfd3

Chaoyong He chaoyong.he at corigine.com
Thu May 18 12:49:37 CEST 2023


> On 5/12/2023 3:07 AM, Chaoyong He wrote:
> > In the tx descriptor free logic of nfd3, the former logic might force
> > cast a negative number into a very big unsigned number, and which will
> > cause potential problem in the xmit loop.
> >
> > The xmit loop will continue in the place where it should break, and
> > will overwrite the Tx descriptor which is not free to use by the PMD.
> >
> > Fixes: 74a640dac864 ("net/nfp: avoid modulo operations for handling
> > ring wrapping")
> > Cc: stable at dpdk.org
> >
> > Signed-off-by: Chaoyong He <chaoyong.he at corigine.com>
> > Reviewed-by: Niklas Söderlund <niklas.soderlund at corigine.com>
> > ---
> >  drivers/net/nfp/nfp_rxtx.h | 8 ++++++--
> >  1 file changed, 6 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/net/nfp/nfp_rxtx.h b/drivers/net/nfp/nfp_rxtx.h
> > index 5e651518ed..e642bc970a 100644
> > --- a/drivers/net/nfp/nfp_rxtx.h
> > +++ b/drivers/net/nfp/nfp_rxtx.h
> > @@ -401,10 +401,14 @@ nfp_net_mbuf_alloc_failed(struct nfp_net_rxq
> > *rxq)  static inline uint32_t  nfp_net_nfd3_free_tx_desc(struct
> > nfp_net_txq *txq)  {
> > +	uint32_t free_desc;
> > +
> >  	if (txq->wr_p >= txq->rd_p)
> > -		return txq->tx_count - (txq->wr_p - txq->rd_p) - 8;
> > +		free_desc = txq->tx_count - (txq->wr_p - txq->rd_p);
> >  	else
> > -		return txq->rd_p - txq->wr_p - 8;
> > +		free_desc = txq->rd_p - txq->wr_p;
> > +
> > +	return (free_desc > 8) ? (free_desc - 8) : 0;
> >  }
> >
> >  /*
> 
> 
> Can you please rebase this patch on top of latest next-net?
> 
> 'nfp_net_nfd3_free_tx_desc()' moved to 'drivers/net/nfp/nfd3/nfp_nfd3.h'
> in commit '2344d6272fe9 ("net/nfp: move NFD3 logic to own source file")'

Okay, I'll send out a v2 patch soon.


More information about the stable mailing list