Skip to contentSkip to conversation

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

DISCUSSION Arjan van de Ven 2 participants 5 messages Apr 14, 2008 – Apr 15, 2008

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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

#1 lore raw
Quoted 19 lines · On Mon, 14 Apr 2008 11:01:16 -0700 Arjan van de Ven <[email protected]>…

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

Quoted 9 lines
                         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

rtl8169_rx_skb is defined as netif_receive_skb only if NAPI is enabled. But the backtrace has CONFIG_R8169_NAPI disabled.

I also concerned that the reset_task calls rx_interrupt with different locking than normal interrupt.

#2 lore raw
Quoted 29 lines · Stephen Hemminger
Quoted 26 lines · On Mon, 14 Apr 2008 11:01:16 -0700 Arjan van de Ven <[email protected]>…

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.

Quoted 5 lines
Quoted 2 lines

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

rtl8169_rx_skb is defined as netif_receive_skb only if NAPI is enabled. But the backtrace has CONFIG_R8169_NAPI disabled.

what makes you think this config option is disabled ? (just curious)

Quoted 2 lines

I also concerned that the reset_task calls rx_interrupt with different locking than normal interrupt.

#3 lore raw
Quoted 30 lines · On Mon, 14 Apr 2008 11:24:04 -0700 Arjan van de Ven <[email protected]>…
Quoted 29 lines · Stephen Hemminger
Quoted 26 lines · On Mon, 14 Apr 2008 11:01:16 -0700 Arjan van de Ven <[email protected]>…

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.

Quoted 8 lines
Quoted 5 lines
Quoted 2 lines

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

rtl8169_rx_skb is defined as netif_receive_skb only if NAPI is enabled. But the backtrace has CONFIG_R8169_NAPI disabled.

what makes you think this config option is disabled ? (just curious)

The receive path for NAPI would be:

	netif_receive_skb
	rtl8169_rx_interrupt
	rtl8169_napi

*** But we are both wrong ***
This is not the mainline r8169 driver but more likely the out of tree vendor 8168 driver. There is no rtl8168_rx_interrupt in mainline.

#4 lore raw
Quoted 2 lines · Stephen Hemminger

*** But we are both wrong ***
This is not the mainline r8169 driver but more likely the out of tree vendor 8168 driver. There is no rtl8168_rx_interrupt in mainline.

woops...
sorry about that