Re: [PATCH] net/bonding: clamp Rx free threshold for small rings

Bruce Richardson
2026-02-24T13:53:55Z

On Tue, Feb 24, 2026 at 01:48:24PM +0100, Morten Brørup wrote:
> > From: Bruce Richardson [mailto:bruce.richardson@intel.com]
> > Sent: Tuesday, 24 February 2026 13.14
> >
> > The bonding driver creates a minimal-sized Rx ring as part of the
> > setup,
> > using the driver default parameters as it does so. However, for some
> > cases the default values need adjustment for absolute minimal sized
> > rings which can cause failures - for example, having an free threshold
> > of 32 is too large for a ring of size 64.
> >
> > Unfortunately, the drivers themselves cannot properly handle this by
> > adjusting their defaults because:
> > a) the defaults are returned from info_get which gets called before the
> > desired ring-size is known
> > b) the replacement of the NULL rxconf value, which indicates use of
> > defaults, happens at the ethdev level, so the driver is unaware of the
> > source of the requested parameters - whether they are explicitly set by
> > the user or substituted by ethdev layer.
> >
> > Therefore, we modify the bonding PMD to clamp the free thresh value to
> > ring_size / 4 which should work in all cases.
>
> I have complained about the inability to rely on drivers' capability reporting in edge cases before.
> Here's another reason for complaining about it.
> It's not easy pleasing everyone. ;-)
>
> From an application perspective, this is black magic, and should be documented.
> E.g. like:
> https://elixir.bootlin.com/dpdk/v25.11/source/lib/ethdev/rte_ethdev.h#L6322
>
> Anyway, this patch is better than being broken, so:
> Acked-by: Morten Brørup <mb@smartsharesystems.com>
>
Thanks for the ack.
My preferred solution was originally to add a parameter to the rx_setup
callback from ethdev to let drivers know that there was a null parameter
passed in rather than explicit values. However, that was a LOT of churn in
the code for something so small as this.

In terms of documenting this, the affected Intel drivers now print explicit
error messages telling the user what to fix. I'm still uncertain whether
just fixing this on the fly might be a better solution than failing config,
but given that this is likely an edge case, easily fixed in apps due to
(hopefully) clear error reporting, I've taken the approach in this patch as
the least intrusive, while still reasonable, fix for the specific scenario
using the bonding driver.

/Bruce

PS: I'm surprised this hasn't been flagged as broken before, since before
commit 93de214d5eb6 ("net/intel: improve Rx descriptor ring size checks")
from last December, the invalid config was silently accepted by Intel
drivers and then the ethdev would fail to receive after doing ring
wrap-around.