On Mon, Feb 24, 2025 at 02:43:07PM +0100, Burakov, Anatoly wrote:
> On 21/02/2025 17:04, Bruce Richardson wrote:
> > The mbuf cleanup function is not being called correctly on close of the
> > driver, due to the vector_tx flag not being set correctly on each Tx
> > queue. Normally, this causes no visible problems, because the default is
> > to have the vector flag unset, which means that, if vector Tx path is
> > chosen, we only free every second mbuf in the descriptor vector ring - a
> > subtle memory leak.
> > 
> > The reverse case - where we initially configure a port to use a vector
> > driver, and then later reconfigure it for scalar - causes a segfault on
> > close, as the vector cleanup is used on a scalar SW ring, and that
> > vector path treats the extra metadata in the SW ring as mbufs to be
> > freed.
> > 
> > This is due to an inconsistency across drivers on port start: in e.g.
> > the i40e driver, the Rx and Tx functions are chosen before the
> > individual queues are started, while in ice driver the order is
> > reversed.  Because the Tx function selection is done after the queues
> > are initialized, the initialized queues use an old value of the overall
> > flag indicating if a vector Tx path is being used.
> > 
> > Fix the issue by moving the Rx and Tx path selection before queue start.
> > 
> > Fixes: 552979dfb1c9 ("net/intel: create common Tx queue mbuf cleanup")
> > 
> > Signed-off-by: Bruce Richardson <bruce.richard...@intel.com>
> > ---
> Acked-by: Anatoly Burakov <anatoly.bura...@intel.com>
> 
Applied to dpdk-next-net-intel.

/Bruce

Reply via email to