On 29.08.24 16:16, Shradha Gupta wrote:
The mana_set_channels() function requires detaching the mana driver and reattaching it with changed channel values. During this operation if the system is low on memory, the reattach might fail, causing the network device being down. To avoid this we pre-allocate buffers at the beginning of set operation, to prevent complete network loss Signed-off-by: Shradha Gupta <shradhagupta@xxxxxxxxxxxxxxxxxxx> --- .../ethernet/microsoft/mana/mana_ethtool.c | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c b/drivers/net/ethernet/microsoft/mana/mana_ethtool.c index d6a35fbda447..5077493fdfde 100644 --- a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c +++ b/drivers/net/ethernet/microsoft/mana/mana_ethtool.c @@ -345,27 +345,31 @@ static int mana_set_channels(struct net_device *ndev, struct mana_port_context *apc = netdev_priv(ndev); unsigned int new_count = channels->combined_count; unsigned int old_count = apc->num_queues; - int err, err2; + int err; + + apc->num_queues = new_count; + err = mana_pre_alloc_rxbufs(apc, ndev->mtu); + apc->num_queues = old_count;
Are you sure that temporary changing num_queues has no side effects on other num_queues users like mana_chn_setxdp()? Gerhard