Description of problem:
If have a machine with an integrated network card at *eth1*.
According to 'lspci', this is an:
00:04.0 Ethernet controller: Silicon Integrated Systems [SiS] SiS900 PCI Fast
Ethernet (rev 90)
Additionally, the machine has an additional network card at *eth2*.
According to 'lspci', this is an:
00:09.0 Ethernet controller: 3Com Corporation 3c905B 100BaseTX [Cyclone] (rev 34)
Finally (and not of consequence here), the machine has a third network card at
*eth0*. According to 'lspci', this is an:
00:0b.0 Ethernet controller: 3Com Corporation 3c905C-TX/TX-M [Tornado] (rev 6c)
I want to use bridge two networks using (eth1,eth2) using "brctl".
This succeeds and the bridge works for some time. However, after a few MBytes
have transited, the following errors show up in the kernel log:
Dec 7 16:25:17 greyhound kernel: eth1: Memory squeeze,deferring packet.
Dec 7 16:25:28 greyhound kernel: eth1: NULL pointer encountered in Rx ring,
Dec 7 16:25:59 greyhound last message repeated 262 times
Dec 7 16:27:00 greyhound last message repeated 239 times
Dec 7 16:28:01 greyhound last message repeated 227 times
Dec 7 16:29:02 greyhound last message repeated 157 times
Dec 7 16:30:03 greyhound last message repeated 165 times
Dec 7 16:30:29 greyhound last message repeated 50 times
...and the bridge shuts down (no packets seem to pass any longer).
This seems to be a known problem with the SiS 900:
I need more time to play around with this...
Linux greyhound 2.6.9-42.0.3.ELsmp #1 SMP Mon Sep 25 17:28:02 EDT 2006 i686 i686
The SiS900 driver appears to do things backwards. They unmap the received
buffer in sis900_rx, pass it to the network stack, and then try to refill the
emptied slot. Instead they should be trying to allocate a new buffer to replace
the old one first. If they fail, we drop the received packet and recycle the
skbuff we already have. If we succeed in the allocation, then we recieve the
current packet and replace the hole in the rx_skbuff list with the newly
allocated skbuff. That way we never run into the situation in which we have to
leave a hole in the buffer ring, which appears to be causing the problem. I'll
post a patch for this early next week.
Indeed, this is exactly what every network driver should be doing
in this situation.
Created attachment 147898 [details]
patch to reoder refill operations in sis driver
This patch refills the rx buffer in the right oder to avoid holes in the sis
driver. I'll post a test kernel shortly.
kernel package with the above patch available for test at:
Please let me know if it fixes your problem. Thanks
Update: "Still waiting for an opportunity to test this". Sorry.
No problem. I'm sending this upstream, as I think its pretty straightforward.
If it gets accepted, I'll just post it for RHEL inclusion. Let me know what the
testing results are though, if you get to ASAP. Thanks
This request was evaluated by Red Hat Kernel Team for inclusion in a Red
Hat Enterprise Linux maintenance release, and has moved to bugzilla
committed in stream U6 build 55.9. A test kernel with this patch is available
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on the solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.