From: Tommy Christensen <tommy.christensen@tpack.net>
To: Herbert Xu <herbert@gondor.apana.org.au>
Cc: "David S. Miller" <davem@davemloft.net>,
mingo@elte.hu, netdev@oss.sgi.com
Subject: Re: [NET] Move local_bh_disable back in dev_queue_xmit
Date: Wed, 03 Nov 2004 15:48:49 +0100 [thread overview]
Message-ID: <4188EFD1.4050909@tpack.net> (raw)
In-Reply-To: <20041102225406.GA13760@gondor.apana.org.au>
[-- Attachment #1: Type: text/plain, Size: 442 bytes --]
Herbert Xu wrote:
> Hi Ingo:
>
> Your recent fix to dev_queue_xmit moved the local_bh_disable to
> include stuff like skb_linearize and skb_checksum_help. These
> are potentially expensive operations. Since they don't need to
> run with preempt off, we could simply move the local_bh_enable
> up instead.
No, this breaks the normal return path.
How about this instead?
Signed-off-by: Tommy S. Christensen <tommy.christensen@tpack.net>
[-- Attachment #2: dev.c.patch --]
[-- Type: text/plain, Size: 1291 bytes --]
--- linux-2.6.10-rc1-bk/net/core/dev.c Wed Nov 3 15:10:43 2004
+++ linux-2.6.10-rc1-work/net/core/dev.c Wed Nov 3 15:31:22 2004
@@ -1261,11 +1261,6 @@
struct Qdisc *q;
int rc = -ENOMEM;
- /* Disable soft irqs for various locks below. Also
- * stops preemption for RCU.
- */
- local_bh_disable();
-
if (skb_shinfo(skb)->frag_list &&
!(dev->features & NETIF_F_FRAGLIST) &&
__skb_linearize(skb, GFP_ATOMIC))
@@ -1290,6 +1285,11 @@
if (skb_checksum_help(skb, 0))
goto out_kfree_skb;
+ /* Disable soft irqs for various locks below. Also
+ * stops preemption for RCU.
+ */
+ local_bh_disable();
+
/* Updates of qdisc are serialized by queue_lock.
* The struct Qdisc which is pointed to by qdisc is now a
* rcu structure - it may be accessed without acquiring
@@ -1352,7 +1352,6 @@
if (net_ratelimit())
printk(KERN_CRIT "Virtual device %s asks to "
"queue packet!\n", dev->name);
- goto out_enetdown;
} else {
/* Recursion is detected! It is possible,
* unfortunately */
@@ -1361,10 +1360,13 @@
"%s, fix it urgently!\n", dev->name);
}
}
-out_enetdown:
+
rc = -ENETDOWN;
+ local_bh_enable();
+
out_kfree_skb:
kfree_skb(skb);
+ return rc;
out:
local_bh_enable();
return rc;
next prev parent reply other threads:[~2004-11-03 14:48 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-11-02 22:54 [NET] Move local_bh_disable back in dev_queue_xmit Herbert Xu
2004-11-03 1:10 ` Ingo Molnar
2004-11-03 14:48 ` Tommy Christensen [this message]
2004-11-03 20:50 ` David S. Miller
2004-11-03 21:09 ` Herbert Xu
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=4188EFD1.4050909@tpack.net \
--to=tommy.christensen@tpack.net \
--cc=davem@davemloft.net \
--cc=herbert@gondor.apana.org.au \
--cc=mingo@elte.hu \
--cc=netdev@oss.sgi.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.