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);