public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* BUG: warning at kernel/softirq.c:141/local_bh_enable()
@ 2006-10-17 13:50 John Philips
  2006-10-17 13:56 ` Eric Dumazet
  0 siblings, 1 reply; 11+ messages in thread
From: John Philips @ 2006-10-17 13:50 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-net

Hi,

I recently upgraded some router/NAT devices from 2.4.25 to 2.6.17.8.  They're using VIA C3 processors and NatSemi DP83815 NICs.

Right after the upgrade I started noticing these error messages on one of the heavier-loaded boxes.  This particular box routes and does NAT for around 400 users, peaking at 6Mb/sec of throughput.

The errors were happening about every 3-5 minutes.  I statically set eth6 to 100baseTX-FD with mii-tool, and now the errors appear every few hours for 10-20 minute stretches.

I searched Google and couldn't find any insight (FYI, I'm NOT using the CIPE patches).

Any ideas?

Oct 16 16:51:32 localhost kernel: NETDEV WATCHDOG: eth6: transmit timed out
Oct 16 16:51:32 localhost kernel: eth6: Transmit timed out, status 0x000000, resetting...
Oct 16 16:51:32 localhost kernel: eth6: DSPCFG accepted after 0 usec.
Oct 16 16:51:32 localhost kernel: eth6: Setting full-duplex based on negotiated link capability.
Oct 16 16:51:36 localhost kernel: NETDEV WATCHDOG: eth6: transmit timed out
Oct 16 16:51:36 localhost kernel: eth6: Transmit timed out, status 0x000000, resetting...
Oct 16 16:51:36 localhost kernel: eth6: DSPCFG accepted after 0 usec.
Oct 16 16:51:36 localhost kernel: eth6: Setting full-duplex based on negotiated link capability.
Oct 16 16:51:43 localhost kernel: eth6: Transmit timed out, status 0x000000, resetting...
Oct 16 16:51:43 localhost kernel: NETDEV WATCHDOG: eth6: transmit timed out
Oct 16 16:51:43 localhost kernel: BUG: warning at kernel/softirq.c:141/local_bh_enable()
Oct 16 16:51:43 localhost kernel: <c029a975> __kfree_skb+0xa5/0x120  <c0236790> drain_tx+0x20/0x40
Oct 16 16:51:43 localhost kernel: <c011c0fb> local_bh_enable+0x6b/0x70  <c0310bd1> destroy_conntrack+0x31/0xe0
Oct 16 16:51:43 localhost kernel: <c02367bf> reinit_ring+0xf/0x50  <c0237fdf> tx_timeout+0x4f/0xe0
Oct 16 16:51:43 localhost kernel: <c0105d67> timer_interrupt+0x67/0x70  <c02aa500> dev_watchdog+0x0/0xb0
Oct 16 16:51:43 localhost kernel: <c011bf52> __do_softirq+0x42/0x90  <c011bfc6> do_softirq+0x26/0x30
Oct 16 16:51:43 localhost kernel: <c02aa5a0> dev_watchdog+0xa0/0xb0  <c011f3f9> run_timer_softirq+0x129/0x170
Oct 16 16:51:43 localhost kernel: <c0101cab> default_idle+0x2b/0x60  <c0101d1a> cpu_idle+0x3a/0x50
Oct 16 16:51:43 localhost kernel: <c0104a1e> do_IRQ+0x1e/0x30  <c0102d8a> common_interrupt+0x1a/0x20
Oct 16 16:51:43 localhost kernel: <c0408676> start_kernel+0x1e6/0x2b0  <c0408220> unknown_bootoption+0x0/0x270
Oct 16 16:51:43 localhost kernel: BUG: warning at kernel/softirq.c:141/local_bh_enable()
Oct 16 16:51:43 localhost kernel: <c029a975> __kfree_skb+0xa5/0x120  <c0236790> drain_tx+0x20/0x40
Oct 16 16:51:43 localhost kernel: <c011c0fb> local_bh_enable+0x6b/0x70  <c0310c16> destroy_conntrack+0x76/0xe0
Oct 16 16:51:43 localhost kernel: <c02367bf> reinit_ring+0xf/0x50  <c0237fdf> tx_timeout+0x4f/0xe0
Oct 16 16:51:43 localhost kernel: <c02aa5a0> dev_watchdog+0xa0/0xb0  <c011f3f9> run_timer_softirq+0x129/0x170
Oct 16 16:51:43 localhost kernel: <c0105d67> timer_interrupt+0x67/0x70  <c02aa500> dev_watchdog+0x0/0xb0
Oct 16 16:51:43 localhost kernel: <c011bf52> __do_softirq+0x42/0x90  <c011bfc6> do_softirq+0x26/0x30
Oct 16 16:51:43 localhost kernel: <c0104a1e> do_IRQ+0x1e/0x30  <c0102d8a> common_interrupt+0x1a/0x20
Oct 16 16:51:43 localhost kernel: <c0101cab> default_idle+0x2b/0x60  <c0101d1a> cpu_idle+0x3a/0x50
Oct 16 16:51:43 localhost kernel: <c0408676> start_kernel+0x1e6/0x2b0  <c0408220> unknown_bootoption+0x0/0x270
Oct 16 16:51:43 localhost kernel: BUG: warning at kernel/softirq.c:141/local_bh_enable()
Oct 16 16:51:43 localhost kernel: <c011c0fb> local_bh_enable+0x6b/0x70  <c0310bd1> destroy_conntrack+0x31/0xe0
Oct 16 16:51:43 localhost kernel: <c029a975> __kfree_skb+0xa5/0x120  <c0236790> drain_tx+0x20/0x40
Oct 16 16:51:43 localhost kernel: <c02aa5a0> dev_watchdog+0xa0/0xb0  <c011f3f9> run_timer_softirq+0x129/0x170
Oct 16 16:51:43 localhost kernel: <c02367bf> reinit_ring+0xf/0x50  <c0237fdf> tx_timeout+0x4f/0xe0
Oct 16 16:51:43 localhost kernel: <c0105d67> timer_interrupt+0x67/0x70  <c02aa500> dev_watchdog+0x0/0xb0
Oct 16 16:51:43 localhost kernel: <c011bf52> __do_softirq+0x42/0x90  <c011bfc6> do_softirq+0x26/0x30
Oct 16 16:51:43 localhost kernel: <c0104a1e> do_IRQ+0x1e/0x30  <c0102d8a> common_interrupt+0x1a/0x20
Oct 16 16:51:43 localhost kernel: <c0101cab> default_idle+0x2b/0x60  <c0101d1a> cpu_idle+0x3a/0x50
Oct 16 16:51:43 localhost kernel: <c0408676> start_kernel+0x1e6/0x2b0  <c0408220> unknown_bootoption+0x0/0x270
Oct 16 16:51:43 localhost kernel: BUG: warning at kernel/softirq.c:141/local_bh_enable()
Oct 16 16:51:43 localhost kernel: <c011c0fb> local_bh_enable+0x6b/0x70  <c0310c16> destroy_conntrack+0x76/0xe0
Oct 16 16:51:43 localhost kernel: <c029a975> __kfree_skb+0xa5/0x120  <c0236790> drain_tx+0x20/0x40
Oct 16 16:51:43 localhost kernel: <c0105d67> timer_interrupt+0x67/0x70  <c02aa500> dev_watchdog+0x0/0xb0
Oct 16 16:51:43 localhost kernel: <c02aa5a0> dev_watchdog+0xa0/0xb0  <c011f3f9> run_timer_softirq+0x129/0x170
Oct 16 16:51:43 localhost kernel: <c02367bf> reinit_ring+0xf/0x50  <c0237fdf> tx_timeout+0x4f/0xe0
Oct 16 16:51:43 localhost kernel: <c0104a1e> do_IRQ+0x1e/0x30  <c0102d8a> common_interrupt+0x1a/0x20
Oct 16 16:51:43 localhost kernel: <c011bf52> __do_softirq+0x42/0x90  <c011bfc6> do_softirq+0x26/0x30
Oct 16 16:51:43 localhost kernel: <c0101cab> default_idle+0x2b/0x60  <c0101d1a> cpu_idle+0x3a/0x50
Oct 16 16:51:43 localhost kernel: <c0408676> start_kernel+0x1e6/0x2b0  <c0408220> unknown_bootoption+0x0/0x270
Oct 16 16:51:43 localhost kernel: eth6: DSPCFG accepted after 0 usec.
Oct 16 16:51:43 localhost kernel: eth6: Setting full-duplex based on negotiated link capability.
Oct 16 16:51:47 localhost kernel: NETDEV WATCHDOG: eth6: transmit timed out
Oct 16 16:51:47 localhost kernel: eth6: Transmit timed out, status 0x000000, resetting...
Oct 16 16:51:47 localhost kernel: eth6: DSPCFG accepted after 0 usec.
Oct 16 16:51:47 localhost kernel: eth6: Setting full-duplex based on negotiated link capability.





^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: BUG: warning at kernel/softirq.c:141/local_bh_enable()
  2006-10-17 13:50 John Philips
@ 2006-10-17 13:56 ` Eric Dumazet
  0 siblings, 0 replies; 11+ messages in thread
From: Eric Dumazet @ 2006-10-17 13:56 UTC (permalink / raw)
  To: John Philips; +Cc: linux-kernel, linux-net

On Tuesday 17 October 2006 15:50, John Philips wrote:
> Hi,
>
> I recently upgraded some router/NAT devices from 2.4.25 to 2.6.17.8. 
> They're using VIA C3 processors and NatSemi DP83815 NICs.
>
> Right after the upgrade I started noticing these error messages on one of
> the heavier-loaded boxes.  This particular box routes and does NAT for
> around 400 users, peaking at 6Mb/sec of throughput.
>
> The errors were happening about every 3-5 minutes.  I statically set eth6
> to 100baseTX-FD with mii-tool, and now the errors appear every few hours
> for 10-20 minute stretches.
>
> I searched Google and couldn't find any insight (FYI, I'm NOT using the
> CIPE patches).
>
> Any ideas?

Could you send us, once your machine is handling its typical load :

lspci -v
ethtool -S eth6
tc -s -d qdisc
cat /proc/slabinfo
cat /proc/meminfo


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: BUG: warning at kernel/softirq.c:141/local_bh_enable()
@ 2006-10-17 14:53 John Philips
  2006-10-17 16:30 ` Eric Dumazet
  0 siblings, 1 reply; 11+ messages in thread
From: John Philips @ 2006-10-17 14:53 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: linux-kernel, linux-net

> Could you send us, once your machine is handling its typical load :
>
> lspci -v
> ethtool -S eth6
> tc -s -d qdisc
> cat /proc/slabinfo
> cat /proc/meminfo


Eric,

Here's the output of the commands you mentioned.  The box is handling a medium amount of load right now.  I set eth6 back to auto-negotiation, and haven't seen the kernel BUG messages for the past 1/2 hour.

lspci -v:
0000:00:00.0 Host bridge: VIA Technologies, Inc. VT8601 [Apollo ProMedia] (rev 05)
        Subsystem: VIA Technologies, Inc. VT8601 [Apollo ProMedia]
        Flags: bus master, medium devsel, latency 8
        Memory at e6000000 (32-bit, prefetchable) [size=4M]
        Capabilities: [a0] AGP version 2.0

0000:00:01.0 PCI bridge: VIA Technologies, Inc. VT8601 [Apollo ProMedia AGP] (prog-if 00 [Normal decode])
        Flags: bus master, 66MHz, medium devsel, latency 0
        Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
        Memory behind bridge: e0000000-e2ffffff
        Prefetchable memory behind bridge: 20000000-200fffff
        Capabilities: [80] Power Management version 2

0000:00:07.0 ISA bridge: VIA Technologies, Inc. VT82C686 [Apollo Super South] (rev 40)
        Subsystem: VIA Technologies, Inc. VT82C686/A PCI to ISA Bridge
        Flags: bus master, stepping, medium devsel, latency 0
        Capabilities: [c0] Power Management version 2

0000:00:07.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE (rev 06) (prog-if 8a [Master SecP PriP])
        Subsystem: VIA Technologies, Inc. VT82C586/B/VT82C686/A/B/VT8233/A/C/VT8235 PIPC Bus Master IDE
        Flags: bus master, medium devsel, latency 32
        I/O ports at d800 [size=16]
        Capabilities: [c0] Power Management version 2

0000:00:07.2 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 1a) (prog-if 00 [UHCI])
        Subsystem: VIA Technologies, Inc. (Wrong ID) USB Controller
        Flags: bus master, medium devsel, latency 32, IRQ 12
        I/O ports at d000 [size=32]
        Capabilities: [80] Power Management version 2

0000:00:07.3 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 1a) (prog-if 00 [UHCI])
        Subsystem: VIA Technologies, Inc. (Wrong ID) USB Controller
        Flags: bus master, medium devsel, latency 32, IRQ 12
        I/O ports at d400 [size=32]
        Capabilities: [80] Power Management version 2

0000:00:07.4 Bridge: VIA Technologies, Inc. VT82C686 [Apollo Super ACPI] (rev 40)
        Subsystem: VIA Technologies, Inc. VT82C686 [Apollo Super ACPI]
        Flags: medium devsel, IRQ 9
        Capabilities: [68] Power Management version 2

0000:00:11.0 PCI bridge: Texas Instruments PCI2250 PCI-to-PCI Bridge (rev 02) (prog-if 00 [Normal decode])
        Flags: bus master, medium devsel, latency 32
        Bus: primary=00, secondary=02, subordinate=02, sec-latency=32
        I/O behind bridge: 0000c000-0000cfff
        Memory behind bridge: e3000000-e4ffffff
        Prefetchable memory behind bridge: 20100000-201fffff
        Capabilities: [dc] Power Management version 1

0000:00:12.0 Ethernet controller: Intel Corporation 82557/8/9 [Ethernet Pro 100] (rev 08)
        Subsystem: Intel Corporation EtherExpress PRO/100+ Management Adapter
        Flags: bus master, medium devsel, latency 32, IRQ 12
        Memory at e6700000 (32-bit, non-prefetchable) [size=4K]
        I/O ports at dc00 [size=64]
        Memory at e6400000 (32-bit, non-prefetchable) [size=1M]
        Expansion ROM at 20200000 [disabled] [size=1M]
        Capabilities: [dc] Power Management version 2

0000:00:13.0 Ethernet controller: Intel Corporation 82557/8/9 [Ethernet Pro 100] (rev 08)
        Subsystem: Intel Corporation EtherExpress PRO/100+ Management Adapter
        Flags: bus master, medium devsel, latency 32, IRQ 10
        Memory at e6702000 (32-bit, non-prefetchable) [size=4K]
        I/O ports at e000 [size=64]
        Memory at e6500000 (32-bit, non-prefetchable) [size=1M]
        Expansion ROM at 20300000 [disabled] [size=1M]
        Capabilities: [dc] Power Management version 2

0000:00:14.0 Ethernet controller: Intel Corporation 82557/8/9 [Ethernet Pro 100] (rev 08)
        Subsystem: Intel Corporation EtherExpress PRO/100+ Management Adapter
        Flags: bus master, medium devsel, latency 32, IRQ 11
        Memory at e6701000 (32-bit, non-prefetchable) [size=4K]
        I/O ports at e400 [size=64]
        Memory at e6600000 (32-bit, non-prefetchable) [size=1M]
        Expansion ROM at 20400000 [disabled] [size=1M]
        Capabilities: [dc] Power Management version 2

0000:01:00.0 VGA compatible controller: Trident Microsystems CyberBlade/i1 (rev 6a) (prog-if 00 [VGA])
        Subsystem: Trident Microsystems CyberBlade/i1
        Flags: bus master, 66MHz, medium devsel, latency 32, IRQ 5
        Memory at e1800000 (32-bit, non-prefetchable) [size=8M]
        Memory at e2000000 (32-bit, non-prefetchable) [size=128K]
        Memory at e1000000 (32-bit, non-prefetchable) [size=8M]
        Expansion ROM at 20000000 [disabled] [size=64K]
        Capabilities: [80] AGP version 2.0
        Capabilities: [90] Power Management version 1

0000:02:00.0 Ethernet controller: National Semiconductor Corporation DP83815 (MacPhyter) Ethernet Controller
        Subsystem: National Semiconductor Corporation DP83815 (MacPhyter) Ethernet Controller
        Flags: bus master, medium devsel, latency 32, IRQ 5
        I/O ports at c000 [size=256]
        Memory at e4000000 (32-bit, non-prefetchable) [size=4K]
        Expansion ROM at 20100000 [disabled] [size=64K]
        Capabilities: [40] Power Management version 2

0000:02:01.0 Ethernet controller: National Semiconductor Corporation DP83815 (MacPhyter) Ethernet Controller
        Subsystem: National Semiconductor Corporation DP83815 (MacPhyter) Ethernet Controller
        Flags: bus master, medium devsel, latency 32, IRQ 11
        I/O ports at c400 [size=256]
        Memory at e4001000 (32-bit, non-prefetchable) [size=4K]
        Expansion ROM at 20110000 [disabled] [size=64K]
        Capabilities: [40] Power Management version 2

0000:02:02.0 Ethernet controller: National Semiconductor Corporation DP83815 (MacPhyter) Ethernet Controller
        Subsystem: National Semiconductor Corporation DP83815 (MacPhyter) Ethernet Controller
        Flags: bus master, medium devsel, latency 32, IRQ 10
        I/O ports at c800 [size=256]
        Memory at e4002000 (32-bit, non-prefetchable) [size=4K]
        Expansion ROM at 20120000 [disabled] [size=64K]
        Capabilities: [40] Power Management version 2

0000:02:03.0 Ethernet controller: National Semiconductor Corporation DP83815 (MacPhyter) Ethernet Controller
        Subsystem: National Semiconductor Corporation DP83815 (MacPhyter) Ethernet Controller
        Flags: bus master, medium devsel, latency 32, IRQ 12
        I/O ports at cc00 [size=256]
        Memory at e4003000 (32-bit, non-prefetchable) [size=4K]
        Expansion ROM at 20130000 [disabled] [size=64K]
        Capabilities: [40] Power Management version 2



ethtool -S eth6:
no stats available



tc -s -d qdisc:
<< too many rules to list... there's a /22 subnet in use and a HTB & SFQ rule exist for each IP >>



cat /proc/slabinfo:
slabinfo - version: 2.1
# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
ip_fib_alias          37    113     32  113    1 : tunables  120   60    0 : slabdata      1      1      0
ip_fib_hash           31    113     32  113    1 : tunables  120   60    0 : slabdata      1      1      0
bridge_fdb_cache       0      0     64   59    1 : tunables  120   60    0 : slabdata      0      0      0
UNIX                  22     22    352   11    1 : tunables   54   27    0 : slabdata      2      2      0
ipt_hashlimit          0      0     40   92    1 : tunables  120   60    0 : slabdata      0      0      0
ip_conntrack_expect      0      0     92   42    1 : tunables  120   60    0 : slabdata      0      0      0
ip_conntrack        3976   9008    236   16    1 : tunables  120   60    0 : slabdata    563    563      0
flow_cache             0      0     96   40    1 : tunables  120   60    0 : slabdata      0      0      0
cfq_ioc_pool           0      0     88   44    1 : tunables  120   60    0 : slabdata      0      0      0
cfq_pool               0      0     96   40    1 : tunables  120   60    0 : slabdata      0      0      0
crq_pool               0      0     44   84    1 : tunables  120   60    0 : slabdata      0      0      0
deadline_drq           0      0     48   78    1 : tunables  120   60    0 : slabdata      0      0      0
as_arq                20     63     60   63    1 : tunables  120   60    0 : slabdata      1      1      0
mqueue_inode_cache      1      8    480    8    1 : tunables   54   27    0 : slabdata      1      1      0
romfs_inode_cache      0      0    316   12    1 : tunables   54   27    0 : slabdata      0      0      0
ext2_inode_cache       0      0    416    9    1 : tunables   54   27    0 : slabdata      0      0      0
journal_handle         8    169     20  169    1 : tunables  120   60    0 : slabdata      1      1      0
journal_head         141    144     52   72    1 : tunables  120   60    0 : slabdata      2      2      0
revoke_table           2    254     12  254    1 : tunables  120   60    0 : slabdata      1      1      0
revoke_record          0      0     16  203    1 : tunables  120   60    0 : slabdata      0      0      0
ext3_inode_cache   13212  13212    432    9    1 : tunables   54   27    0 : slabdata   1468   1468      0
dnotify_cache          0      0     20  169    1 : tunables  120   60    0 : slabdata      0      0      0
eventpoll_pwq          0      0     36  101    1 : tunables  120   60    0 : slabdata      0      0      0
eventpoll_epi          0      0     96   40    1 : tunables  120   60    0 : slabdata      0      0      0
inotify_event_cache      0      0     28  127    1 : tunables  120   60    0 : slabdata      0      0      0
inotify_watch_cache      0      0     36  101    1 : tunables  120   60    0 : slabdata      0      0      0
kioctx                 0      0    160   24    1 : tunables  120   60    0 : slabdata      0      0      0
kiocb                  0      0    128   30    1 : tunables  120   60    0 : slabdata      0      0      0
fasync_cache           0      0     16  203    1 : tunables  120   60    0 : slabdata      0      0      0
shmem_inode_cache      4     10    400   10    1 : tunables   54   27    0 : slabdata      1      1      0
posix_timers_cache      0      0     88   44    1 : tunables  120   60    0 : slabdata      0      0      0
uid_cache              3     59     64   59    1 : tunables  120   60    0 : slabdata      1      1      0
ip_mrt_cache           0      0     96   40    1 : tunables  120   60    0 : slabdata      0      0      0
tcp_bind_bucket       15    203     16  203    1 : tunables  120   60    0 : slabdata      1      1      0
inet_peer_cache    48968  49855     64   59    1 : tunables  120   60    0 : slabdata    845    845      0
secpath_cache          0      0     32  113    1 : tunables  120   60    0 : slabdata      0      0      0
xfrm_dst_cache         0      0    288   13    1 : tunables   54   27    0 : slabdata      0      0      0
ip_dst_cache       11175  11175    256   15    1 : tunables  120   60    0 : slabdata    745    745      0
arp_cache            356    390    128   30    1 : tunables  120   60    0 : slabdata     13     13      0
RAW                    9      9    448    9    1 : tunables   54   27    0 : slabdata      1      1      0
UDP                    6      9    448    9    1 : tunables   54   27    0 : slabdata      1      1      0
tw_sock_TCP           22     40     96   40    1 : tunables  120   60    0 : slabdata      1      1      0
request_sock_TCP       8     59     64   59    1 : tunables  120   60    0 : slabdata      1      1      0
TCP                    9     14   1056    7    2 : tunables   24   12    0 : slabdata      2      2      0
blkdev_ioc            17    127     28  127    1 : tunables  120   60    0 : slabdata      1      1      0
blkdev_queue          25     28    920    4    1 : tunables   54   27    0 : slabdata      7      7      0
blkdev_requests       20     23    168   23    1 : tunables  120   60    0 : slabdata      1      1      0
biovec-(256)           7      8   3072    2    2 : tunables   24   12    0 : slabdata      4      4      0
biovec-128             7     10   1536    5    2 : tunables   24   12    0 : slabdata      2      2      0
biovec-64              7     10    768    5    1 : tunables   54   27    0 : slabdata      2      2      0
biovec-16              7     20    192   20    1 : tunables  120   60    0 : slabdata      1      1      0
biovec-4               7     59     64   59    1 : tunables  120   60    0 : slabdata      1      1      0
biovec-1              83    203     16  203    1 : tunables  120   60    0 : slabdata      1      1      0
bio                  354    354     64   59    1 : tunables  120   60    0 : slabdata      6      6      0
sock_inode_cache      55     55    352   11    1 : tunables   54   27    0 : slabdata      5      5      0
skbuff_fclone_cache     11     11    352   11    1 : tunables   54   27    0 : slabdata      1      1      0
skbuff_head_cache    500    820    192   20    1 : tunables  120   60    0 : slabdata     41     41      0
file_lock_cache        1     42     92   42    1 : tunables  120   60    0 : slabdata      1      1      0
proc_inode_cache     288    288    324   12    1 : tunables   54   27    0 : slabdata     24     24      0
sigqueue               8     27    144   27    1 : tunables  120   60    0 : slabdata      1      1      0
radix_tree_node     1386   1386    276   14    1 : tunables   54   27    0 : slabdata     99     99      0
bdev_cache             4      9    416    9    1 : tunables   54   27    0 : slabdata      1      1      0
sysfs_dir_cache     3345   3360     44   84    1 : tunables  120   60    0 : slabdata     40     40      0
mnt_cache             17     30    128   30    1 : tunables  120   60    0 : slabdata      1      1      0
inode_cache         1001   1001    308   13    1 : tunables   54   27    0 : slabdata     77     77      0
dentry_cache       15748  15748    124   31    1 : tunables  120   60    0 : slabdata    508    508      0
filp                 338    528    160   24    1 : tunables  120   60    0 : slabdata     22     22      0
names_cache            2      2   4096    1    1 : tunables   24   12    0 : slabdata      2      2      0
idr_layer_cache       94    116    136   29    1 : tunables  120   60    0 : slabdata      4      4      0
buffer_head        22524  22542     48   78    1 : tunables  120   60    0 : slabdata    289    289      0
mm_struct             40     63    416    9    1 : tunables   54   27    0 : slabdata      7      7      0
vm_area_struct       741    880     88   44    1 : tunables  120   60    0 : slabdata     20     20      0
fs_cache              39    113     32  113    1 : tunables  120   60    0 : slabdata      1      1      0
files_cache           40     80    192   20    1 : tunables  120   60    0 : slabdata      4      4      0
signal_cache          53     66    352   11    1 : tunables   54   27    0 : slabdata      6      6      0
sighand_cache         45     45   1312    3    1 : tunables   24   12    0 : slabdata     15     15      0
task_struct           49     57   1280    3    1 : tunables   24   12    0 : slabdata     19     19      0
anon_vma             398   1017      8  339    1 : tunables  120   60    0 : slabdata      3      3      0
pgd                   31     31   4096    1    1 : tunables   24   12    0 : slabdata     31     31      0
pid                   57    202     36  101    1 : tunables  120   60    0 : slabdata      2      2      0
size-131072(DMA)       0      0 131072    1   32 : tunables    8    4    0 : slabdata      0      0      0
size-131072            0      0 131072    1   32 : tunables    8    4    0 : slabdata      0      0      0
size-65536(DMA)        0      0  65536    1   16 : tunables    8    4    0 : slabdata      0      0      0
size-65536             3      3  65536    1   16 : tunables    8    4    0 : slabdata      3      3      0
size-32768(DMA)        0      0  32768    1    8 : tunables    8    4    0 : slabdata      0      0      0
size-32768             1      1  32768    1    8 : tunables    8    4    0 : slabdata      1      1      0
size-16384(DMA)        0      0  16384    1    4 : tunables    8    4    0 : slabdata      0      0      0
size-16384             0      0  16384    1    4 : tunables    8    4    0 : slabdata      0      0      0
size-8192(DMA)         0      0   8192    1    2 : tunables    8    4    0 : slabdata      0      0      0
size-8192             56     56   8192    1    2 : tunables    8    4    0 : slabdata     56     56      0
size-4096(DMA)         0      0   4096    1    1 : tunables   24   12    0 : slabdata      0      0      0
size-4096           4094   4094   4096    1    1 : tunables   24   12    0 : slabdata   4094   4094      0
size-2048(DMA)         0      0   2048    2    1 : tunables   24   12    0 : slabdata      0      0      0
size-2048            506    536   2048    2    1 : tunables   24   12    0 : slabdata    268    268      0
size-1024(DMA)         0      0   1024    4    1 : tunables   54   27    0 : slabdata      0      0      0
size-1024             75    124   1024    4    1 : tunables   54   27    0 : slabdata     31     31      0
size-512(DMA)          0      0    512    8    1 : tunables   54   27    0 : slabdata      0      0      0
size-512            4279   4344    512    8    1 : tunables   54   27    0 : slabdata    543    543      0
size-256(DMA)          0      0    256   15    1 : tunables  120   60    0 : slabdata      0      0      0
size-256             141    255    256   15    1 : tunables  120   60    0 : slabdata     17     17      0
size-192(DMA)          0      0    192   20    1 : tunables  120   60    0 : slabdata      0      0      0
size-192             710    720    192   20    1 : tunables  120   60    0 : slabdata     36     36      0
size-128(DMA)          0      0    128   30    1 : tunables  120   60    0 : slabdata      0      0      0
size-128             360    360    128   30    1 : tunables  120   60    0 : slabdata     12     12      0
size-96(DMA)           0      0     96   40    1 : tunables  120   60    0 : slabdata      0      0      0
size-96              447    480     96   40    1 : tunables  120   60    0 : slabdata     12     12      0
size-64(DMA)           0      0     64   59    1 : tunables  120   60    0 : slabdata      0      0      0
size-32(DMA)           0      0     32  113    1 : tunables  120   60    0 : slabdata      0      0      0
size-64             1633   3127     64   59    1 : tunables  120   60    0 : slabdata     53     53      0
size-32             5553   5650     32  113    1 : tunables  120   60    0 : slabdata     50     50      0
kmem_cache           110    120     96   40    1 : tunables  120   60    0 : slabdata      3      3      0



cat /proc/meminfo:
MemTotal:       513972 kB
MemFree:        406748 kB
Buffers:         11312 kB
Cached:          44072 kB
SwapCached:          0 kB
Active:          44992 kB
Inactive:        19904 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       513972 kB
LowFree:        406748 kB
SwapTotal:           0 kB
SwapFree:            0 kB
Dirty:             304 kB
Writeback:           0 kB
Mapped:          15712 kB
Slab:            40772 kB
CommitLimit:    256984 kB
Committed_AS:    19652 kB
PageTables:        320 kB
VmallocTotal:   516072 kB
VmallocUsed:       436 kB
VmallocChunk:   515516 kB





^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: BUG: warning at kernel/softirq.c:141/local_bh_enable()
  2006-10-17 14:53 John Philips
@ 2006-10-17 16:30 ` Eric Dumazet
  0 siblings, 0 replies; 11+ messages in thread
From: Eric Dumazet @ 2006-10-17 16:30 UTC (permalink / raw)
  To: John Philips; +Cc: linux-kernel, linux-net

On Tuesday 17 October 2006 16:53, John Philips wrote:
> > Could you send us, once your machine is handling its typical load :
> >
> > lspci -v
> > ethtool -S eth6
> > tc -s -d qdisc
> > cat /proc/slabinfo
> > cat /proc/meminfo
>
> Eric,
>
> Here's the output of the commands you mentioned.  The box is handling a
> medium amount of load right now.  I set eth6 back to auto-negotiation, and
> haven't seen the kernel BUG messages for the past 1/2 hour.

OK, could you please send now :

ifconfig eth6
cat /proc/interrupts

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: BUG: warning at kernel/softirq.c:141/local_bh_enable()
@ 2006-10-17 16:43 John Philips
  2006-10-17 16:53 ` Eric Dumazet
  0 siblings, 1 reply; 11+ messages in thread
From: John Philips @ 2006-10-17 16:43 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: linux-kernel, linux-net

>OK, could you please send now :
>
>ifconfig eth6
>cat /proc/interrupts

Eric,

Here you go:

ifconfig eth6:
eth6      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
          inet addr:X.X.X.X  Bcast:X.X.X.X  Mask:X.X.X.X
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19015877 errors:0 dropped:880 overruns:82 frame:0
          TX packets:18771972 errors:1970 dropped:17259 overruns:25 carrier:25
          collisions:0 txqueuelen:1000
          RX bytes:2956503786 (2.7 GiB)  TX bytes:2149556909 (2.0 GiB)
          Interrupt:12 Base address:0x8000


cat /proc/interrupts:
           CPU0
  0:   71570907          XT-PIC  timer
  2:          0          XT-PIC  cascade
  4:        465          XT-PIC  serial
  8:          4          XT-PIC  rtc
 10:   17076423          XT-PIC  eth1
 11:    3602236          XT-PIC  eth2
 12:   52112382          XT-PIC  eth0, eth6
 14:     955580          XT-PIC  ide0
NMI:          0
LOC:          0
ERR:          0






^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: BUG: warning at kernel/softirq.c:141/local_bh_enable()
  2006-10-17 16:43 John Philips
@ 2006-10-17 16:53 ` Eric Dumazet
  2006-10-17 19:18   ` John Philips
  0 siblings, 1 reply; 11+ messages in thread
From: Eric Dumazet @ 2006-10-17 16:53 UTC (permalink / raw)
  To: John Philips; +Cc: linux-kernel, linux-net

On Tuesday 17 October 2006 18:43, John Philips wrote:
> >OK, could you please send now :
> >
> >ifconfig eth6
> >cat /proc/interrupts
>
> Eric,
>
> Here you go:
>
> ifconfig eth6:
> eth6      Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX
>           inet addr:X.X.X.X  Bcast:X.X.X.X  Mask:X.X.X.X
>           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
>           RX packets:19015877 errors:0 dropped:880 overruns:82 frame:0
>           TX packets:18771972 errors:1970 dropped:17259 overruns:25
> carrier:25 collisions:0 txqueuelen:1000
>           RX bytes:2956503786 (2.7 GiB)  TX bytes:2149556909 (2.0 GiB)
>           Interrupt:12 Base address:0x8000
>
>
> cat /proc/interrupts:
>            CPU0
>   0:   71570907          XT-PIC  timer
>   2:          0          XT-PIC  cascade
>   4:        465          XT-PIC  serial
>   8:          4          XT-PIC  rtc
>  10:   17076423          XT-PIC  eth1
>  11:    3602236          XT-PIC  eth2
>  12:   52112382          XT-PIC  eth0, eth6
>  14:     955580          XT-PIC  ide0
> NMI:          0
> LOC:          0
> ERR:          0

Hum, given your slow cpu, you might revert tx queue length to 2.4.XX level 
(100 instead of 1000)

ifconfig eth6 txqueuelen 100

Are you sure you cannot post here : 

tc -s -d qdisc show dev eth6

You might want to make inet_peer_cache purge faster :

echo 1 >/proc/sys/net/ipv4/inet_peer_gc_mintime
echo 2 >/proc/sys/net/ipv4/inet_peer_gc_maxtime

Eric

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: BUG: warning at kernel/softirq.c:141/local_bh_enable()
  2006-10-17 16:53 ` Eric Dumazet
@ 2006-10-17 19:18   ` John Philips
  2006-10-17 19:28     ` Eric Dumazet
  0 siblings, 1 reply; 11+ messages in thread
From: John Philips @ 2006-10-17 19:18 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: linux-kernel, linux-net

> Hum, given your slow cpu, you might revert tx queue
> length to 2.4.XX level 
> (100 instead of 1000)

I tried that, it didn't help any.

> Are you sure you cannot post here : 
> 
> tc -s -d qdisc show dev eth6

As I said, there are rules in place for every single
IP in a /22 subnet.  It would be over 12000 lines.  I
tried turning off the traffic shaping, it didn't help.
 
> You might want to make inet_peer_cache purge faster
> :
> 
> echo 1 >/proc/sys/net/ipv4/inet_peer_gc_mintime
> echo 2 >/proc/sys/net/ipv4/inet_peer_gc_maxtime

I tried that as well, unfortunately it didn't help.

It's worth noting that this behavior happens at
seemingly random times for random amounts of time.  It
also causes the interface to auto-negotiate it's
settings again.  During these periods, ping times to a
switch plugged directly into eth6 are 4000+ms.  When I
statically set the interface to 100baseT/full duplex
with mii-tool, ping times to the switch immediately
return to normal.  Unfortunately this fix only lasts a
few minutes, because the interface hangs up and
returns to auto-negotiation.

Also, I know this isn't a problem with my hardware
since it started happening immediately after I
upgraded the kernel from 2.4.25.

Thanks.

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: BUG: warning at kernel/softirq.c:141/local_bh_enable()
  2006-10-17 19:18   ` John Philips
@ 2006-10-17 19:28     ` Eric Dumazet
  0 siblings, 0 replies; 11+ messages in thread
From: Eric Dumazet @ 2006-10-17 19:28 UTC (permalink / raw)
  To: John Philips; +Cc: linux-kernel, linux-net

John Philips a écrit :
>> Hum, given your slow cpu, you might revert tx queue
>> length to 2.4.XX level 
>> (100 instead of 1000)
> 
> I tried that, it didn't help any.
> 
>> Are you sure you cannot post here : 
>>
>> tc -s -d qdisc show dev eth6
> 
> As I said, there are rules in place for every single
> IP in a /22 subnet.  It would be over 12000 lines.  I
> tried turning off the traffic shaping, it didn't help.
>  
>> You might want to make inet_peer_cache purge faster
>> :
>>
>> echo 1 >/proc/sys/net/ipv4/inet_peer_gc_mintime
>> echo 2 >/proc/sys/net/ipv4/inet_peer_gc_maxtime
> 
> I tried that as well, unfortunately it didn't help.

This was just to reduce size of the table (and time of the lookups), not to 
solve the nic problem at all :)

> 
> It's worth noting that this behavior happens at
> seemingly random times for random amounts of time.  It
> also causes the interface to auto-negotiate it's
> settings again.  During these periods, ping times to a
> switch plugged directly into eth6 are 4000+ms.  When I
> statically set the interface to 100baseT/full duplex
> with mii-tool, ping times to the switch immediately
> return to normal.  Unfortunately this fix only lasts a
> few minutes, because the interface hangs up and
> returns to auto-negotiation.
> 
> Also, I know this isn't a problem with my hardware
> since it started happening immediately after I
> upgraded the kernel from 2.4.25.

Yes, I supposed that your hardware was running OK with previous kernels.

Which NIC driver is handling eth6 ?


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: BUG: warning at kernel/softirq.c:141/local_bh_enable()
       [not found] <20061017201014.51060.qmail@web57802.mail.re3.yahoo.com>
@ 2006-10-17 20:54 ` Eric Dumazet
  2006-10-18 15:33   ` John Philips
  2006-10-18 18:19   ` John Philips
  0 siblings, 2 replies; 11+ messages in thread
From: Eric Dumazet @ 2006-10-17 20:54 UTC (permalink / raw)
  To: John Philips; +Cc: linux-kernel, linux-net

John Philips a écrit :
>> Which NIC driver is handling eth6 ?
> 
> Eric,
> 
> eth6 is a NatSemi DP83815 NIC

Well... lot of changes in drivers/net/natsemi.c between 2.4 and 2.6

Previous versions had a max_interrupt_work = 20;
RX_RING_SIZE is 32 for this NIC

But NAPI standard weight is 64, maybe you should try to lower it ? (so that an 
interrupt dont try to queue/dequeue too many packets at once)

/proc/sys/net/core/dev_weight
/proc/sys/net/core/netdev_budget

Eric

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: BUG: warning at kernel/softirq.c:141/local_bh_enable()
  2006-10-17 20:54 ` BUG: warning at kernel/softirq.c:141/local_bh_enable() Eric Dumazet
@ 2006-10-18 15:33   ` John Philips
  2006-10-18 18:19   ` John Philips
  1 sibling, 0 replies; 11+ messages in thread
From: John Philips @ 2006-10-18 15:33 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: linux-kernel, linux-net

> > eth6 is a NatSemi DP83815 NIC
> 
> Well... lot of changes in drivers/net/natsemi.c
> between 2.4 and 2.6
> 
> Previous versions had a max_interrupt_work = 20;
> RX_RING_SIZE is 32 for this NIC
> 
> But NAPI standard weight is 64, maybe you should try
> to lower it ? (so that an 
> interrupt dont try to queue/dequeue too many packets
> at once)
> 
> /proc/sys/net/core/dev_weight
> /proc/sys/net/core/netdev_budget

Eric,

Thanks for the suggestions, but I don't really
understand what you're saying.

Currently dev_weight is 64 and netdev_budget is 300. 
What do you recommend I set them to?



__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: BUG: warning at kernel/softirq.c:141/local_bh_enable()
  2006-10-17 20:54 ` BUG: warning at kernel/softirq.c:141/local_bh_enable() Eric Dumazet
  2006-10-18 15:33   ` John Philips
@ 2006-10-18 18:19   ` John Philips
  1 sibling, 0 replies; 11+ messages in thread
From: John Philips @ 2006-10-18 18:19 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: linux-kernel, linux-net

[-- Attachment #1: Type: text/plain, Size: 493 bytes --]

Eric,

Today I upgraded a few routers running 2.6.11.6 to the
same 2.6.17.8 kernel and experienced the same issues. 
It only happens on the boxes with the NatSemi card.

Attached you will find a diff between the natsemi.c
driver from 2.6.11.6 and 2.6.17.8.  Perhaps you'll see
where the problem exists (I don't understand C code).

Thanks

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

[-- Attachment #2: 3596274229-natsemi.c_2.6.11.6-2.6.11.17.diff --]
[-- Type: application/octet-stream, Size: 7890 bytes --]

6d5
< 	Portions copyright 2004 Harald Welte <laforge@gnumonks.org>
138a138,139
> 	* support for an external PHY
> 	* NAPI
162d162
< #include <linux/prefetch.h>
185a186,187
> /* Maximum events (Rx packets, etc.) to handle at each interrupt. */
> static int max_interrupt_work = 20;
190c192
< static const int multicast_filter_limit = 100;
---
> static int multicast_filter_limit = 100;
229c231
< #define NATSEMI_DEF_EEPROM_SIZE	24 /* 12 16-bit values */
---
> #define NATSEMI_EEPROM_SIZE	24 /* 12 16-bit values */
241c243
< static const char version[] __devinitdata =
---
> static char version[] __devinitdata =
251a254
> module_param(max_interrupt_work, int, 0);
256a260,261
> MODULE_PARM_DESC(max_interrupt_work, 
> 	"DP8381x maximum events handled per interrupt");
372c377
< static const struct {
---
> static struct {
689,690d693
< 	/* Interrupt status */
< 	u32 intr_status;
717,718d719
< 	/* EEPROM data */
< 	int eeprom_size;
750,751c751
< static int natsemi_poll(struct net_device *dev, int *budget);
< static void netdev_rx(struct net_device *dev, int *work_done, int work_to_do);
---
> static void netdev_rx(struct net_device *dev);
779,790d778
< static inline void natsemi_irq_enable(struct net_device *dev)
< {
< 	writel(1, ns_ioaddr(dev) + IntrEnable);
< 	readl(ns_ioaddr(dev) + IntrEnable);
< }
< 
< static inline void natsemi_irq_disable(struct net_device *dev)
< {
< 	writel(0, ns_ioaddr(dev) + IntrEnable);
< 	readl(ns_ioaddr(dev) + IntrEnable);
< }
< 
894,895d881
< 	np->intr_status = 0;
< 	np->eeprom_size = NATSEMI_DEF_EEPROM_SIZE;
949,951d934
< 	dev->poll = natsemi_poll;
< 	dev->weight = 64;
< 
1504,1528d1486
< static void reset_rx(struct net_device *dev)
< {
< 	int i;
< 	struct netdev_private *np = netdev_priv(dev);
< 	void __iomem *ioaddr = ns_ioaddr(dev);
< 
< 	np->intr_status &= ~RxResetDone;
< 
< 	writel(RxReset, ioaddr + ChipCmd);
< 
< 	for (i=0;i<NATSEMI_HW_TIMEOUT;i++) {
< 		np->intr_status |= readl(ioaddr + IntrStatus);
< 		if (np->intr_status & RxResetDone)
< 			break;
< 		udelay(15);
< 	}
< 	if (i==NATSEMI_HW_TIMEOUT) {
< 		printk(KERN_WARNING "%s: RX reset did not complete in %d usec.\n",
< 		       dev->name, i*15);
< 	} else if (netif_msg_hw(np)) {
< 		printk(KERN_WARNING "%s: RX reset took %d usec.\n",
< 		       dev->name, i*15);
< 	}
< }
< 
1971c1929
< 				skb->data, buflen, PCI_DMA_FROMDEVICE);
---
> 				skb->tail, buflen, PCI_DMA_FROMDEVICE);
2203,2204c2161,2162
< /* The interrupt handler doesn't actually handle interrupts itself, it
<  * schedules a NAPI poll if there is anything to do. */
---
> /* The interrupt handler does all of the Rx thread work and cleans up
>    after the Tx thread. */
2209a2168,2169
> 	int boguscnt = max_interrupt_work;
> 	unsigned int handled = 0;
2213,2226c2173,2175
< 	
< 	/* Reading automatically acknowledges. */
< 	np->intr_status = readl(ioaddr + IntrStatus);
< 
< 	if (netif_msg_intr(np))
< 		printk(KERN_DEBUG
< 		       "%s: Interrupt, status %#08x, mask %#08x.\n",
< 		       dev->name, np->intr_status,
< 		       readl(ioaddr + IntrMask));
< 
< 	if (!np->intr_status) 
< 		return IRQ_NONE;
< 
< 	prefetch(&np->rx_skbuff[np->cur_rx % RX_RING_SIZE]);
---
> 	do {
> 		/* Reading automatically acknowledges all int sources. */
> 		u32 intr_status = readl(ioaddr + IntrStatus);
2228,2234c2177,2181
< 	if (netif_rx_schedule_prep(dev)) {
< 		/* Disable interrupts and register for poll */
< 		natsemi_irq_disable(dev);
< 		__netif_rx_schedule(dev);
< 	}
< 	return IRQ_HANDLED;
< }
---
> 		if (netif_msg_intr(np))
> 			printk(KERN_DEBUG
> 				"%s: Interrupt, status %#08x, mask %#08x.\n",
> 				dev->name, intr_status,
> 				readl(ioaddr + IntrMask));
2236,2242c2183,2185
< /* This is the NAPI poll routine.  As well as the standard RX handling
<  * it also handles all other interrupts that the chip might raise.
<  */
< static int natsemi_poll(struct net_device *dev, int *budget)
< {
< 	struct netdev_private *np = netdev_priv(dev);
< 	void __iomem * ioaddr = ns_ioaddr(dev);
---
> 		if (intr_status == 0)
> 			break;
> 		handled = 1;
2244,2245c2187,2191
< 	int work_to_do = min(*budget, dev->quota);
< 	int work_done = 0;
---
> 		if (intr_status &
> 		   (IntrRxDone | IntrRxIntr | RxStatusFIFOOver |
> 		    IntrRxErr | IntrRxOverrun)) {
> 			netdev_rx(dev);
> 		}
2247,2249c2193,2194
< 	do {
< 		if (np->intr_status &
< 		    (IntrTxDone | IntrTxIntr | IntrTxIdle | IntrTxErr)) {
---
> 		if (intr_status &
> 		   (IntrTxDone | IntrTxIntr | IntrTxIdle | IntrTxErr)) {
2256,2269c2201,2202
< 		if (np->intr_status & IntrAbnormalSummary)
< 			netdev_error(dev, np->intr_status);
< 		
< 		if (np->intr_status &
< 		    (IntrRxDone | IntrRxIntr | RxStatusFIFOOver |
< 		     IntrRxErr | IntrRxOverrun)) {
< 			netdev_rx(dev, &work_done, work_to_do);
< 		}
< 		
< 		*budget -= work_done;
< 		dev->quota -= work_done;
< 
< 		if (work_done >= work_to_do)
< 			return 1;
---
> 		if (intr_status & IntrAbnormalSummary)
> 			netdev_error(dev, intr_status);
2271,2274c2204,2212
< 		np->intr_status = readl(ioaddr + IntrStatus);
< 	} while (np->intr_status);
< 
< 	netif_rx_complete(dev);
---
> 		if (--boguscnt < 0) {
> 			if (netif_msg_intr(np))
> 				printk(KERN_WARNING
> 					"%s: Too much work at interrupt, "
> 					"status=%#08x.\n",
> 					dev->name, intr_status);
> 			break;
> 		}
> 	} while (1);
2276,2281c2214,2215
< 	/* Reenable interrupts providing nothing is trying to shut
< 	 * the chip down. */
< 	spin_lock(&np->lock);
< 	if (!np->hands_off && netif_running(dev))
< 		natsemi_irq_enable(dev);
< 	spin_unlock(&np->lock);
---
> 	if (netif_msg_intr(np))
> 		printk(KERN_DEBUG "%s: exiting interrupt.\n", dev->name);
2283c2217
< 	return 0;
---
> 	return IRQ_RETVAL(handled);
2288c2222
< static void netdev_rx(struct net_device *dev, int *work_done, int work_to_do)
---
> static void netdev_rx(struct net_device *dev)
2306,2311d2239
< 
< 		if (*work_done >= work_to_do)
< 			break;
< 
< 		(*work_done)++;
< 
2323,2339d2250
< 
< 				/* The RX state machine has probably
< 				 * locked up beneath us.  Follow the
< 				 * reset procedure documented in
< 				 * AN-1287. */
< 
< 				spin_lock_irq(&np->lock);
< 				reset_rx(dev);
< 				reinit_rx(dev);
< 				writel(np->ring_dma, ioaddr + RxRingPtr);
< 				check_link(dev);
< 				spin_unlock_irq(&np->lock);
< 
< 				/* We'll enable RX on exit from this
< 				 * function. */
< 				break;
< 
2372c2283
< 					np->rx_skbuff[entry]->data, pkt_len, 0);
---
> 					np->rx_skbuff[entry]->tail, pkt_len, 0);
2385c2296
< 			netif_receive_skb(skb);
---
> 			netif_rx(skb);
2525,2527c2436,2438
< 			writel(HASH_TABLE + i, ioaddr + RxFilterAddr);
< 			writel((mc_filter[i + 1] << 8) + mc_filter[i],
< 			       ioaddr + RxFilterData);
---
> 			writew(HASH_TABLE + i, ioaddr + RxFilterAddr);
> 			writew((mc_filter[i+1]<<8) + mc_filter[i],
> 				ioaddr + RxFilterData);
2588,2589c2499
< 	struct netdev_private *np = netdev_priv(dev);
< 	return np->eeprom_size;
---
> 	return NATSEMI_EEPROM_SIZE;
2676c2586
< 	u8 *eebuf;
---
> 	u8 eebuf[NATSEMI_EEPROM_SIZE];
2679,2682d2588
< 	eebuf = kmalloc(np->eeprom_size, GFP_KERNEL);
< 	if (!eebuf)
< 		return -ENOMEM;
< 
2689d2594
< 	kfree(eebuf);
3045d2949
< 	struct netdev_private *np = netdev_priv(dev);
3048c2952
< 	for (i = 0; i < np->eeprom_size/2; i++) {
---
> 	for (i = 0; i < NATSEMI_EEPROM_SIZE/2; i++) {
3173c3077,3079
< 	natsemi_irq_disable(dev);
---
> 	/* Disable interrupts, and flush posted writes */
> 	writel(0, ioaddr + IntrEnable);
> 	readl(ioaddr + IntrEnable);
3255,3257d3160
<  *      * natsemi_poll: checks before reenabling interrupts.  suspend
<  *              sets hands_off, disables interrupts and then waits with
<  *              netif_poll_disable().
3262c3165
< static int natsemi_suspend (struct pci_dev *pdev, pm_message_t state)
---
> static int natsemi_suspend (struct pci_dev *pdev, u32 state)
3283,3284d3185
< 		netif_poll_disable(dev);
< 
3337d3237
< 	netif_poll_enable(dev);

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2006-10-18 18:19 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20061017201014.51060.qmail@web57802.mail.re3.yahoo.com>
2006-10-17 20:54 ` BUG: warning at kernel/softirq.c:141/local_bh_enable() Eric Dumazet
2006-10-18 15:33   ` John Philips
2006-10-18 18:19   ` John Philips
2006-10-17 16:43 John Philips
2006-10-17 16:53 ` Eric Dumazet
2006-10-17 19:18   ` John Philips
2006-10-17 19:28     ` Eric Dumazet
  -- strict thread matches above, loose matches on Subject: below --
2006-10-17 14:53 John Philips
2006-10-17 16:30 ` Eric Dumazet
2006-10-17 13:50 John Philips
2006-10-17 13:56 ` Eric Dumazet

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox