This is the mail archive of the
ecos-discuss@sourceware.org
mailing list for the eCos project.
Re: Ping the RLTK 8139 driver with a large packet and it crashes
- From: Wayne Visser <wvisser at lszpaper dot com>
- To: Wayne Visser <wvisser at lszpaper dot com>, ecos-discuss at sourceware dot org
- Date: Fri, 09 Mar 2007 10:28:06 -0500
- Subject: Re: [ECOS] Ping the RLTK 8139 driver with a large packet and it crashes
- References: <45E75A74.1000309@lszpaper.com>
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