This is the mail archive of the
ecos-discuss@sourceware.org
mailing list for the eCos project.
RE: RE: Trouble using lwIP (driver crash...)
- From: Gary Thomas <gary at chez-thomas dot org>
- To: Michael Grimard <michaelg at maxt dot com>
- Cc: Andrew Lunn <andrew at lunn dot ch>, ecos-discuss at sourceware dot org
- Date: Wed, 05 Apr 2006 08:43:27 -0600
- Subject: RE: [ECOS] RE: Trouble using lwIP (driver crash...)
- References: <001e01c658be$06220080$490a0a0a@cygnus>
On Wed, 2006-04-05 at 10:34 -0400, Michael Grimard wrote:
> This is the call stack of the recursion:
>
> input_thread()
> i82559_deliver()
> PacketRxReady()
> eth_drv_recv()
> ecosif_input()
> etharp_arp_input()
> low_level_output()
> eth_drv_send()
> i82559_can_send()
> -->PacketRxReady
> eth_drv_recv()
> ecosif_input()
> ...
>
>
> So the recursion happens in i82559_can_send() when it calls PacketRxReady().
I don't see the point of calling PacketRxReady() from i82559_can_send().
The point of "can_send()" is to determine of the device can accept any
more packets *to transmit* - received packets should not be part of that
calculation.
Try removing that call from i82559_can_send()
>
> This time, it was for the reply of an ARP request.
>
>
> Michael
>
>
> -----Original Message-----
> From: Andrew Lunn [mailto:andrew@lunn.ch]
> Sent: April 5, 2006 9:57 AM
> To: Michael Grimard
> Cc: ecos-discuss@sourceware.org
> Subject: Re: [ECOS] RE: Trouble using lwIP (driver crash...)
>
> On Wed, Apr 05, 2006 at 09:53:25AM -0400, Michael Grimard wrote:
> >
> > Already done that.
> >
> > This is what I got:
> >
> > InitRxRing 0
> > ResetRxRing 0
> > InitTxRing 0
> > ResetTxRing 0
> > Device 0 (eth0), rx descriptor 0:
> > Rx 0 12e160 (status 8000a022): 1 sg's, 60 bytes Device 0 (eth0), rx
> > descriptor 0:
> > Rx 0 12e160 (status 8000a022): 1 sg's, 60 bytes Device 0 (eth0), rx
> > descriptor 0:
> > Rx 0 12e160 (status 8000a022): 1 sg's, 60 bytes Device 0 (eth0), rx
> > descriptor 0:
> > Rx 0 12e160 (status 8000a022): 1 sg's, 60 bytes Device 0 (eth0), rx
> > descriptor 0:
> > Rx 0 12e160 (status 8000a022): 1 sg's, 60 bytes Device 0 (eth0), rx
> > descriptor 0:
> > Rx 0 12e160 (status 8000a022): 1 sg's, 60 bytes Device 0 (eth0), rx
> > descriptor 0:
> > Rx 0 12e160 (status 8000a022): 1 sg's, 60 bytes Device 0 (eth0), rx
> > descriptor 0:
> > Rx 0 12e160 (status 8000a022): 1 sg's, 60 bytes Device 0 (eth0), rx
> > descriptor 0:
> > Rx 0 12e160 (status 8000a022): 1 sg's, 60 bytes Device 0 (eth0), rx
> > descriptor 0:
> > Rx 0 12e160 (status 8000a022): 1 sg's, 60 bytes Device 0 (eth0), rx
> > descriptor 0:
> > Rx 0 12e160 (status 8000a022): 1 sg's, 60 bytes ASSERT FAIL:
> > <5>if_i82559.c[2370]i82559_can_send() send: Excess send recursions
> > ASSERT FAIL: <5>if_i82559.c [2370] i82559_can_send()
> >
> >
> > All I do is ping eCos three times.
>
> It looks like you will have to debug this further. Try single stepping from
> eth_drv_send() and work out why it goes recursive.
>
> Andrew
>
>
--
Gary Thomas <gary@chez-thomas.org>
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss