> -----Original Message----- > From: Gerhard Engleder <gerhard@xxxxxxxxxxxxxxxxxxxxx> > Sent: Thursday, August 29, 2024 3:54 PM > To: Shradha Gupta <shradhagupta@xxxxxxxxxxxxxxxxxxx>; linux- > hyperv@xxxxxxxxxxxxxxx; netdev@xxxxxxxxxxxxxxx; linux- > kernel@xxxxxxxxxxxxxxx; linux-rdma@xxxxxxxxxxxxxxx > Cc: KY Srinivasan <kys@xxxxxxxxxxxxx>; Haiyang Zhang > <haiyangz@xxxxxxxxxxxxx>; Wei Liu <wei.liu@xxxxxxxxxx>; Dexuan Cui > <decui@xxxxxxxxxxxxx>; David S. Miller <davem@xxxxxxxxxxxxx>; Eric > Dumazet <edumazet@xxxxxxxxxx>; Jakub Kicinski <kuba@xxxxxxxxxx>; Paolo > Abeni <pabeni@xxxxxxxxxx>; Long Li <longli@xxxxxxxxxxxxx>; Simon Horman > <horms@xxxxxxxxxx>; Konstantin Taranov <kotaranov@xxxxxxxxxxxxx>; > Souradeep Chakrabarti <schakrabarti@xxxxxxxxxxxxxxxxxxx>; Erick Archer > <erick.archer@xxxxxxxxxxx>; Pavan Chebbi <pavan.chebbi@xxxxxxxxxxxx>; > Ahmed Zaki <ahmed.zaki@xxxxxxxxx>; Colin Ian King > <colin.i.king@xxxxxxxxx>; Shradha Gupta <shradhagupta@xxxxxxxxxxxxx> > Subject: Re: [PATCH net-next] net: mana: Improve mana_set_channels() for > low mem conditions > > [Some people who received this message don't often get email from > gerhard@xxxxxxxxxxxxxxxxxxxxx. Learn why this is important at > https://aka.ms/LearnAboutSenderIdentification ] > > 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()? > mana_chn_setxdp() is protected by rtnl_lock, which is OK. But I'm not sure if all other users are protected. mana_get_stats64() seems not. @Shradha Gupta You can add num_queues as an argument of mana_pre_alloc_rxbufs() to avoid changing apc->num_queues. Thanks, - Haiyang