Skip to contentSkip to conversation

e1000: assertion hit in e1000_clean(), kernel 2.6.21.1

DISCUSSION Chuck Ebbert 4 participants 5 messages May 18, 2007 – May 20, 2007

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

We have several reports now of hitting this assertion in netif_rx_complete(), inlined in e1000_clean():

        BUG_ON(!test_bit(__LINK_STATE_RX_SCHED, &dev->state));
 [<c0431162>] __queue_work+0x51/0x5e
 [<c059eea1>] et_rx_action+0x94/0x185
 [<c042837d>] __do_softirq+0x5d/0xba
 [<c0407837>] do_softirq+0x59/0xb1
 [<c04281e9>] local_bh_enable_ip+0x35/0x40
 [<c059e46b>] dev_open+0x44/0x62
 [<c059ce8c>] dev_change_flags+0x46/0xe3
 [<c05d9e09>] devinet_ioctl+0x250/0x56a

The second function is "net_rx_action", corrupted
by the serial connection.

The source file has four extra lines at the top because of a trivial wireless patch, so 898 in that code is really 894 in the stock kernel.

https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=240339

#1 lore raw
Quoted 14 lines · Chuck Ebbert

We have several reports now of hitting this assertion in netif_rx_complete(), inlined in e1000_clean():

        BUG_ON(!test_bit(__LINK_STATE_RX_SCHED, &dev->state));
 [<c0431162>] __queue_work+0x51/0x5e
 [<c059eea1>] et_rx_action+0x94/0x185
 [<c042837d>] __do_softirq+0x5d/0xba
 [<c0407837>] do_softirq+0x59/0xb1
 [<c04281e9>] local_bh_enable_ip+0x35/0x40
 [<c059e46b>] dev_open+0x44/0x62
 [<c059ce8c>] dev_change_flags+0x46/0xe3
 [<c05d9e09>] devinet_ioctl+0x250/0x56a
Quoted 6 lines

The second function is "net_rx_action", corrupted
by the serial connection.

The source file has four extra lines at the top because of a trivial wireless patch, so 898 in that code is really 894 in the stock kernel.

please shared that code then.

Quoted 1 line

https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=240339

this is lacking a lot of debugging info. Please post *all* the dmesg output, lspci -vvv, ethtool -e ethX, etc. in the bugzilla.

Auke

#2 lore raw
Quoted 15 lines · Auke
Quoted 14 lines · Chuck Ebbert

We have several reports now of hitting this assertion in netif_rx_complete(), inlined in e1000_clean():

         BUG_ON(!test_bit(__LINK_STATE_RX_SCHED, &dev->state));
  [<c0431162>] __queue_work+0x51/0x5e
  [<c059eea1>] et_rx_action+0x94/0x185
  [<c042837d>] __do_softirq+0x5d/0xba
  [<c0407837>] do_softirq+0x59/0xb1
  [<c04281e9>] local_bh_enable_ip+0x35/0x40
  [<c059e46b>] dev_open+0x44/0x62
  [<c059ce8c>] dev_change_flags+0x46/0xe3
  [<c05d9e09>] devinet_ioctl+0x250/0x56a
Quoted 8 lines
Quoted 5 lines

The second function is "net_rx_action", corrupted by the serial connection.
The source file has four extra lines at the top because of a trivial wireless patch, so 898 in that code is really 894 in the stock kernel.

please shared that code then.

http://cvs.fedora.redhat.com/viewcvs/devel/kernel/linux-2.6-wireless.patch

#3 lore raw
In reply to Kok, Auke
Quoted 6 lines · Auke
Quoted 4 lines

The source file has four extra lines at the top because of a trivial wireless patch, so 898 in that code is really 894 in the stock kernel.

please shared that code then.

I've had a look and e1000 is definitely buggy.

The problem is that you're calling netif_poll_enable on startup. This is *wrong*.

netif_poll_enable can only be called if you've previously called netif_poll_disable. Otherwise a poll might already be in action and you may get a crash like this.

So perhaps you should divide e1000_up into two sections, one that is called on both start and restart and another which is only called on restart (i.e., after e1000_down).

Cheers,

Signature · 4 lines
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
#4 lore raw
Quoted 11 lines · Herbert Xu
Quoted 4 lines · Auke
Quoted 3 lines

The source file has four extra lines at the top because of a trivial wireless patch, so 898 in that code is really 894 in the stock kernel.

please shared that code then.

I've had a look and e1000 is definitely buggy.

The problem is that you're calling netif_poll_enable on startup. This is *wrong*.

Quoted 7 lines

netif_poll_enable can only be called if you've previously called netif_poll_disable. Otherwise a poll might already be in action and you may get a crash like this.

So perhaps you should divide e1000_up into two sections, one that is called on both start and restart and another which is only called on restart (i.e., after e1000_down).

OK, that would explain the recent frenzy of reports in this matter. That code was only recently merged. I will dig into this and get a patch out as soon as I can so you can test this.

Thanks Herbert.

Auke