From: Marko Rauhamaa <marko@pacujo.net>
To: linux-kernel@vger.kernel.org
Cc: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>
Cc: Jamal Hadi Salim <hadi@cyberus.ca>
Cc: Robert Olsson <Robert.Olsson@data.slu.se>
Subject: NAPI Race?
Date: 07 Oct 2003 20:07:31 -0700 [thread overview]
Message-ID: <m3smm4qvf0.fsf@lumo.pacujo.net> (raw)
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/
next reply other threads:[~2003-10-08 3:09 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-10-08 3:07 Marko Rauhamaa [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m3smm4qvf0.fsf@lumo.pacujo.net \
--to=marko@pacujo.net \
--cc=kuznet@ms2.inr.ac.ru \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®