[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4516a34a-5a88-88ef-e761-7512dff4f3ce@solarflare.com>
Date: Wed, 10 Jul 2019 17:47:19 +0100
From: Edward Cree <ecree@...arflare.com>
To: Eric Dumazet <eric.dumazet@...il.com>,
Paolo Abeni <pabeni@...hat.com>,
David Miller <davem@...emloft.net>
CC: netdev <netdev@...r.kernel.org>
Subject: Re: [RFC PATCH net-next 0/3] net: batched receive in GRO path
On 10/07/2019 16:41, Eric Dumazet wrote:
> On 7/10/19 4:52 PM, Edward Cree wrote:
>> Hmm, I was caught out by the call to napi_poll() actually being a local
>> function pointer, not the static function of the same name. How did a
>> shadow like that ever get allowed?
>> But in that case I _really_ don't understand napi_busy_loop(); nothing
>> in it seems to ever flush GRO, so it's relying on either
>> (1) stuff getting flushed because the bucket runs out of space, or
>> (2) the next napi poll after busy_poll_stop() doing the flush.
>> What am I missing, and where exactly in napi_busy_loop() should the
>> gro_normal_list() call go?
> Please look at busy_poll_stop()
I did look there, but now I've looked again and harder, and I think I get it:
busy_poll_stop() calls napi->poll(), which (eventually, possibly in the
subsequent poll that we schedule if rc == budget) calls napi_complete_done()
which does the flush.
In which case, the same applies to the napi->rx_list, which similarly gets
handled in napi_complete_done(). So I don't think napi_busy_loop() needs a
gro_normal_list() adding to it(?)
As a general rule, I think we need to gro_normal_list() in those places, and
only those places, that call napi_gro_flush(). But as I mentioned in the
patch 3/3 description, I'm still confused by the (few) drivers that call
napi_gro_flush() themselves.
-Ed
Powered by blists - more mailing lists