Hi,
OK, I am still a network klutz. The attached patch changes netif_rx to call
netif_receive_skb directly instead of going through softnet. It works with
my e1000 here, but eventually oopses under moderate load. I see that a few
drivers use netif_receive_skb directly, sometimes together with NAPI. But I
must have missed some assumption, at least with the e1000 driver. Any
suggestion? The oops happens almost immediately if I add a printk.
I need to put a serial cable on the box so I can see what the oops actually
is.
Regards,
Daniel
diff -up --recursive 2.6.12.3.clean/net/core/dev.c 2.6.12.3/net/core/dev.c
--- 2.6.12.3.clean/net/core/dev.c 2005-07-15 17:18:57.000000000 -0400
+++ 2.6.12.3/net/core/dev.c 2005-08-05 11:47:23.000000000 -0400
@@ -1456,6 +1456,11 @@ int netif_rx(struct sk_buff *skb)
if (netpoll_rx(skb))
return NET_RX_DROP;
+ if (1) {
+ netif_receive_skb(skb);
+ return NET_RX_SUCCESS;
+ }
+
if (!skb->stamp.tv_sec)
net_timestamp(&skb->stamp);