Subject: Re: [RFC] gro: Is it ok to share a single napi from several devs ?

From: Jarek Poplawski <[email-masked]>
Date: Sun, 29 Aug 2010 11:59:51 +0200

On Sat, Aug 28, 2010 at 02:41:30PM -0700, David Miller wrote:
> From: Stephen Hemminger <[email-masked]>
> Date: Sat, 28 Aug 2010 10:14:24 -0700
> 
> > The Marvell Yukon2 hardware supports two interfaces sharing a common interrupt.
> > Therfore the sky2 driver has up to two net devices and a single NAPI per board.
> > It is possible in a single invocation of the poll loop to process frames
> > for both ports.  GRO works by combining received packets from identical
> > flows over one NAPI interval. It is possible on sky2 that one packet
> > could be processed for the first port, and the next packet processed was for
> > second port and the two packets were related so that GRO would combine them.
> > The check for the same dev is required to prevent this. Yes it is an unlikely
> > corner case, but the purpose of GRO is to do aggregation but preserve the
> > flow characteristics of the incoming traffic.
> 
> If that is true then GRO is going to refuse to merge every single
> frame that arrives on the second port of a SKY2 device. :-)
> 
> This is because for the two ports, you allocate and register one NAPI
> instance which uses only the first port's netdev pointer.
> 
> Therefore, when GRO compares napi->dev to skb->dev it will always not

Actually, when GRO compares napi->dev to skb->dev?

Jarek P.

> match for packets coming from the second port since the netdev pointer
> in skb->dev will be different.
> 
> Since netpoll does similar things, this means both NAPI and netpoll
> cannot function properly with SKY2's second port.  It will only work
> right on the first port.
> 
>