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

From: Jarek Poplawski <[email-masked]>
Date: Fri, 4 Dec 2009 07:48:33 +0000

On Fri, Dec 04, 2009 at 12:04:42AM +0100, Eric Dumazet wrote:
> Jarek Poplawski a écrit :
> > On Thu, Dec 03, 2009 at 10:51:25PM +0100, Eric Dumazet wrote:
> >> David Miller a écrit :
> >>> From: Eric Dumazet <[email-masked]>
> >>> Date: Thu, 03 Dec 2009 22:29:42 +0100
> >>>
> >>>> Nice patch, thanks :)
> >>>>
> >>>> Acked-by: Eric Dumazet <[email-masked]>
> >>> I like it too, but please resubmit once we have at least
> >>> one example user submitted.
> >>>
> >> I successfully tested following patch.
> > 
> > Great! But, I see, checking if realloc_netdev_mq() use is always legal
> > (before register_netdev()) is not trivial in this driver. (I have some
> > suspicions around ixgbe_resume().) I wonder, if there should be added
> > some debugging for this.
> 
> Yes, probably
> 
> Or even better, allowing realloc_netdev_mq() to be called even after
> register_netdev() :)

We should try to avoid it because of clashes with qdisc initialization
(especially wrt. preserving stats). But mainly it's about knowing the
exact reason why this thing (probing the hardware for max mq
capabilities) can't be finished before register_netdev(). I'll try to
look at this more.

Jarek P.

> 
> 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;
>  }
>