[ECOS] Ping the RLTK 8139 driver with a large packet and it crashes

Wayne Visser wvisser@lszpaper.com
Fri Mar 9 15:28:00 GMT 2007


Hi again,

I did some more checking into this with 
CYGDBG_DEVS_ETH_RLTK_8139_CHATTER enabled.

When pinged with a large packet (ping -s 40000) this happens:

rltk8139_deliver(eth0): receive buffer overflow
rltk8139_stop(eth0)
rltk8139_start(eth0)
rltk8139_start(eth0): 8139 was successfully reset.
8139 reg address 0x00 = 0xa1c9d000 0x00003faf 0x00000200 0x00000000
8139 reg address 0x10 = 0x00002000 0x00002000 0x00002000 0x00002000
8139 reg address 0x20 = 0x00196170 0x00196770 0x00196d70 0x00197370
8139 reg address 0x30 = 0x0018d960 0x0d000000 0x0000fff0 0x0000802f
8139 reg address 0x40 = 0x77400600 0x0000b68e 0xb54a8a01 0x00000000
8139 reg address 0x50 = 0x008d1000 0x00000000 0x0088e110 0x00100a20
8139 reg address 0x60 = 0x1100000f 0x01e1782d 0x000145e1 0x00000000
8139 reg address 0x70 = 0x00000704 0x000207c8 0x60f60c59 0x7b732660
8139 reg address 0x80 = 0x0000001a 0x88080802 0x00100104 0x14000000
8139 reg address 0x90 = 0x00040204 0x00200000 0x09200080 0x08200000
8139 reg address 0xa0 = 0x00a00000 0x80006400 0x000000a0 0x08010002
8139 reg address 0xb0 = 0x800c1011 0x40000300 0x4000230a 0x01000000
8139 reg address 0xc0 = 0x40000008 0x21008080 0x00000000 0x01100028
8139 reg address 0xd0 = 0x00441000 0x00000000 0x00000003 0x00000000
8139 reg address 0xe0 = 0x00000000 0x00000000 0x00000000 0x00000000
8139 reg address 0xf0 = 0x00000000 0x00000000 0x00000000 0x00000000

At this point, the 8139 seems stuck and rltk8139_deliver() is no longer 
periodically being called, though the kernel is still running.

I'm at a bit of a loss with this.  Any tips as to how I could proceed? 
Thanks.

   -- Wayne


Wayne Visser wrote:
> 
> Hi all,
> 
> My target is an i386 with the default eCos TCP stack, eCos HTTP, TFTP 
> servers and a Modbus/TCP server we wrote in house.  The ethernet driver 
> is the RealTek 8139.
> 
> I first started suspecting something was wrong with the ethernet driver 
> when my target randomly crashed after 5-10 minutes under heavy ethernet 
> loads: ping flood + http + tftp traffic.
> 
> Then I discovered it would crash repeatably if pinged with a large 
> packet i.e. ping -s 40000.  The threshold seems to be around 32k, which 
> is coincidently the size of the RX buffer.  I have 
> CYGNUM_DEVS_ETH_RLTK_8139_RX_BUF_LEN_IDX set to 2, which is the default.
> 
> This behaviour is true when CYGPKG_DEVS_ETH_RLTK_8139_SHARE_INTERRUPTS 
> is enabled or not.
> 
> The driver has some comments about cache coherency, which I don't 
> understand well.  In any case, I don't think they're applicable to the 
> i386 target (is that true?)
> 
> I'm using the eCos CVS snapped on 31 Jan 2007.  gcc 3.4.4, cygwin.
> 
> Any help would be appreciated.
> 

-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss



More information about the Ecos-discuss mailing list