Subject: Re: [PATCH v4] net: Introduce realloc_netdev_mq()

From: "Michael Chan" <[email-masked]>
Date: Sat, 16 Jan 2010 14:50:48 -0800

On Fri, 2009-12-04 at 05:49 -0800, Jarek Poplawski wrote:
> On Fri, Dec 04, 2009 at 01:01:34PM +0000, Jarek Poplawski wrote:
> > On Fri, Dec 04, 2009 at 12:04:42AM +0100, Eric Dumazet wrote:
> > ...
> > > bnx2 for example could not be patched easily, following patch doesnt work.
> > > 
> > > diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
> > > index 4cae2a8..8bd5d0d 100644
> > > --- a/drivers/net/bnx2.c
> > > +++ b/drivers/net/bnx2.c
> > > @@ -6177,6 +6177,7 @@ bnx2_setup_int_mode(struct bnx2 *bp, int dis_msi)
> > >  
> > >  	bp->num_tx_rings = rounddown_pow_of_two(bp->irq_nvecs);
> > > -	bp->dev->real_num_tx_queues = bp->num_tx_rings;
> > > +	realloc_netdev_mq(bp->dev, bp->num_tx_rings);
> > >  
> > >  	bp->num_rx_rings = bp->irq_nvecs;
> > >  }
> > 
> > Eric, if didn't miss something in the example you gave at the
> > beginning of this thread, it seems a change like below (not compiled)
> > should fix your problem (without even testing MSI exactly)?
> 

Bringing back an older thread.  Are we still planning to use
realloc_netdev_mq()?  The problem with the patch below is that
dev->real_num_tx_queues can still be reduced during bnx2_open().

Is it possible to call realloc_netdev_mq() during ->open()?

> OOPS! Take 2...;-)
>  
> Jarek P.
> ---
> 
>  drivers/net/bnx2.c |    5 +++++
>  1 files changed, 5 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
> index 4bfc808..c1ba2b1 100644
> --- a/drivers/net/bnx2.c
> +++ b/drivers/net/bnx2.c
> @@ -8288,6 +8288,11 @@ bnx2_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
>  		dev->features |= NETIF_F_TSO6;
>  		vlan_features_add(dev, NETIF_F_TSO6);
>  	}
> +
> +	if (!((bp->flags & BNX2_FLAG_MSIX_CAP) ||
> +	     (bp->flags & BNX2_FLAG_MSI_CAP)) || disable_msi)
> +		realloc_netdev_mq(dev, 1);
> +
>  	if ((rc = register_netdev(dev))) {
>  		dev_err(&pdev->dev, "Cannot register net device\n");
>  		goto error;
>