| To: | Lee Revell <rlrevell@xxxxxxxxxxx>, Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> |
|---|---|
| Subject: | Re: [PATCH] Make netif_rx_ni preempt-safe |
| From: | Denis Vlasenko <vda@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> |
| Date: | Wed, 20 Oct 2004 18:11:44 +0300 |
| Cc: | Andrew Morton <akpm@xxxxxxxx>, linux-kernel <linux-kernel@xxxxxxxxxxxxxxx>, "David S. Miller" <davem@xxxxxxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxxxxxx, maxk@xxxxxxxxxxxx, irda-users@xxxxxxxxxxxxxxxxxxxxx, Linux Network Development <netdev@xxxxxxxxxxx>, Alain Schroeder <alain@xxxxxxxxxxxxxxx> |
| In-reply-to: | <1098231737.23628.42.camel@xxxxxxxxxxxxxxxx> |
| References: | <1098230132.23628.28.camel@xxxxxxxxxxxxxxxx> <20041020000009.GA17246@xxxxxxxxxxxxxxxxxxx> <1098231737.23628.42.camel@xxxxxxxxxxxxxxxx> |
| Sender: | netdev-bounce@xxxxxxxxxxx |
| User-agent: | KMail/1.5.4 |
> How about this:
>
> Signed-Off-By: Lee Revell <rlrevell@xxxxxxxxxxx>
>
> --- include/linux/netdevice.h~ 2004-10-19 20:16:48.000000000 -0400
> +++ include/linux/netdevice.h 2004-10-19 20:21:01.000000000 -0400
> @@ -696,9 +696,12 @@
> */
> static inline 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;
> }
#include <linux/netdevice.h>
int netif_rx_ni_(struct sk_buff *skb)
{
int err;
preempt_disable();
err = netif_rx(skb);
if (softirq_pending(smp_processor_id()))
do_softirq();
preempt_enable();
return err;
}
objdump -d:
00000000 <netif_rx_ni_>:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 56 push %esi
4: 53 push %ebx
5: bb 00 f0 ff ff mov $0xfffff000,%ebx
a: 21 e3 and %esp,%ebx
c: ff 43 14 incl 0x14(%ebx)
f: 8b 4d 08 mov 0x8(%ebp),%ecx
12: 51 push %ecx
13: e8 fc ff ff ff call 14 <netif_rx_ni_+0x14>
18: 89 c6 mov %eax,%esi
1a: 8b 43 10 mov 0x10(%ebx),%eax
1d: c1 e0 07 shl $0x7,%eax
20: 8b 80 00 00 00 00 mov 0x0(%eax),%eax
26: 85 c0 test %eax,%eax
28: 5a pop %edx
29: 75 25 jne 50 <netif_rx_ni_+0x50>
2b: 8b 43 08 mov 0x8(%ebx),%eax
2e: ff 4b 14 decl 0x14(%ebx)
31: a8 08 test $0x8,%al
33: 75 09 jne 3e <netif_rx_ni_+0x3e>
35: 8d 65 f8 lea 0xfffffff8(%ebp),%esp
38: 5b pop %ebx
39: 89 f0 mov %esi,%eax
3b: 5e pop %esi
3c: 5d pop %ebp
3d: c3 ret
3e: e8 fc ff ff ff call 3f <netif_rx_ni_+0x3f>
43: eb f0 jmp 35 <netif_rx_ni_+0x35>
45: 8d 74 26 00 lea 0x0(%esi,1),%esi
49: 8d bc 27 00 00 00 00 lea 0x0(%edi,1),%edi
50: e8 fc ff ff ff call 51 <netif_rx_ni_+0x51>
55: eb d4 jmp 2b <netif_rx_ni_+0x2b>
0x57 == 87 bytes is too big for inline.
--
vda
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | Re: way of figuring out total number of retransmitted packets on a TCP socket?, Baruch Even |
|---|---|
| Next by Date: | Re: NFS and Network Driver Question, Bob Wirka |
| Previous by Thread: | Re: [PATCH] Make netif_rx_ni preempt-safe, Lee Revell |
| Next by Thread: | Re: [PATCH] Make netif_rx_ni preempt-safe, Lee Revell |
| Indexes: | [Date] [Thread] [Top] [All Lists] |