Subject: bugreport: The r8169.c driver is calling netif_receive_skb from hardirq and with interrupts off

From: Arjan van de Ven <[email-masked]>
Date: Mon, 14 Apr 2008 11:01:16 -0700

The r8169.c driver is calling netif_receive_skb from hardirq and with interrupts off,
which seems to be invalid (the comments of netif_receive_skb) certainly say so.

The calltrace is like this:

packet_rcv
netif_receive_skb
rtl8168_rx_interrupt
rtl8168_interrupt
handle_IRQ_event
handle_fasteoi_irq
do_IRQ

Which triggers a warning in packet_rcv() since that does a local_bh_enable(),
which gives a WARN_ON if irqs are disabled (rightfully so it seems).

The code looks is in rtl8169_rx_interrupt() line 2832 and looks like

                         if (rtl8169_rx_vlan_skb(tp, desc, skb) < 0)
                                 rtl8169_rx_skb(skb);

with
#define rtl8169_rx_skb                  netif_receive_skb
higher up in the file.

This is the 46th highest ranking warnon/oops report for 2.6.25-rc

Greetings,
    Arjan van de Ven