public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* NAPI Race?
@ 2003-10-08  3:07 Marko Rauhamaa
  2003-10-08 11:34 ` P
  2003-10-08 19:57 ` kuznet
  0 siblings, 2 replies; 5+ messages in thread
From: Marko Rauhamaa @ 2003-10-08  3:07 UTC (permalink / raw)
  To: linux-kernel; +Cc: Alexey Kuznetsov, Jamal Hadi Salim, Robert Olsson


It looks to me like net_rx_action() might suffer from a race, which in
turn might explain some weirdness in my driver test results.

Here's the essence of the function from net/core/dev.c:

net_rx_action()
{
        local_irq_disable();
        while (!list_empty(&queue->poll_list)) {
                local_irq_enable();
                /* do stuff */
                local_irq_disable();
        }
        local_irq_enable();
}

Say I receive a packet. net_rx_action() processes it in the while loop
and reenables interrupts. But just before net_rx_action() returns, I
receive another packet, and __netif_rx_schedule() gets called from the
driver. Then the soft irq is raised from within itself. If I'm not
interrupted for some other reason, the packet will get processed only at
the next jiffie when the soft irq is invoked again.

Am I mistaken?

As an aside, it looks also as though the design might technically allow
the network driver to starve the CPU (the very situation NAPI was
designed to protect against). If I receive a new packet always right
after returning from net_rx_action(), the interrupt will cause the soft
irq to be executed immediately. It's true that this scenario would
require a very accurately calibrated packet stream, but in my business
that just might take place.


Marko

-- 
Marko Rauhamaa      mailto:marko@pacujo.net     http://pacujo.net/marko/

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2003-10-08 21:31 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-10-08  3:07 NAPI Race? Marko Rauhamaa
2003-10-08 11:34 ` P
2003-10-08 19:57 ` kuznet
2003-10-08 21:17   ` Marko Rauhamaa
2003-10-08 21:31     ` David S. Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox