Re: [PATCH] Make netif_rx_ni preempt-safe
From: Lee Revell <hidden>
Date: 2004-10-20 20:02:16
Also in:
lkml
On Wed, 2004-10-20 at 15:14, Denis Vlasenko wrote:
On Wednesday 20 October 2004 19:47, Lee Revell wrote:quoted
On Wed, 2004-10-20 at 11:11, Denis Vlasenko wrote:quoted
0x57 == 87 bytes is too big for inline.Ugh. So the only fix is not to inline it?Yes. You can make it conditionally inline/non-inline depending on SMP/preempt if you feel masochistic today :), but last time I asked davem thought that it is over the top.
I agree, not worth the trouble. This would actually depend only on PREEMPT and not SMP. OK, third try. Signed-Off-By: Lee Revell <redacted>
--- include/linux/netdevice.h~ 2004-10-20 15:51:00.000000000 -0400
+++ include/linux/netdevice.h 2004-10-20 15:51:54.000000000 -0400@@ -694,11 +694,14 @@ /* Post buffer to the network code from _non interrupt_ context. * see net/core/dev.c for netif_rx description. */ -static inline int netif_rx_ni(struct sk_buff *skb) +static int netif_rx_ni(struct sk_buff *skb) { - int err = netif_rx(skb); + int err; + preempt_disable(); + err = netif_rx(skb); if (softirq_pending(smp_processor_id())) do_softirq(); + preempt_enable(); return err; }