List Info

Thread: Re: ipw2200 stalls on high load




Re: ipw2200 stalls on high load
user name
2008-02-05 09:09:14
On Tue, 2008-02-05 at 09:35 +0100, Sebastian Siewior wrote:
> * Dan Williams | 2008-02-04 18:24:10 [-0500]:
> 
> >Could you put some debugging information into
ipw_rx() to print out the
> >values of r and i right before the while (i != r)
loop, and inside the
> >if (fill_rx) block later down what count and i
are?
> Sure:
> 
> [ 1849.374846] Before while 0x0000001c != 0x0000001d
> [ 1849.378151] Before while 0x0000001d != 0x0000001e
> [ 1849.378970] Before while 0x0000001e != 0x0000001f
> [ 1849.381220] Before while 0x0000001f != 0x00000000
> [ 1849.383092] Before while 0x00000000 != 0x00000001
> [ 1849.385513] Before while 0x00000001 != 0x00000002
> [ 1849.387636] Before while 0x00000002 != 0x00000003
> [ 1849.389580] Before while 0x00000003 != 0x00000004
> [ 1849.391561] Before while 0x00000004 != 0x00000005
> [ 1849.393720] Before while 0x00000005 != 0x00000006
> [ 1849.395799] Before while 0x00000006 != 0x00000007
> [ 1849.397941] Before while 0x00000007 != 0x00000008
> [ 1849.399885] Before while 0x00000008 != 0x00000009
> [ 1849.402127] Before while 0x00000009 != 0x0000000a
> [ 1849.405144] Before while 0x0000000a != 0x0000000b
> [ 1849.406376] Before while 0x0000000b != 0x0000000c
> [ 1849.409953] Before while 0x0000000c != 0x0000000d
> [ 1849.410070] fill_rx block, count: 0x00000000 i:
0x0000000d
> [ 1849.410492] Before while 0x0000000d != 0x0000000e
> [ 1849.410610] fill_rx block, count: 0x00000000 i:
0x0000000e
> [ 1849.412598] Before while 0x0000000e != 0x0000000f
> [ 1849.412716] fill_rx block, count: 0x00000000 i:
0x0000000f
> [ 1849.414930] Before while 0x0000000f != 0x00000010
> [ 1849.415048] fill_rx block, count: 0x00000000 i:
0x00000010
> [ 1849.417127] Before while 0x00000010 != 0x00000011
> [ 1849.417244] fill_rx block, count: 0x00000000 i:
0x00000011
> [ 1849.419324] Before while 0x00000011 != 0x00000012
> [ 1849.419441] fill_rx block, count: 0x00000000 i:
0x00000012
> [ 1849.421367] Before while 0x00000012 != 0x00000013
> [ 1849.421486] fill_rx block, count: 0x00000000 i:
0x00000013
> [ 1849.423275] Before while 0x00000013 != 0x00000014
> [ 1849.423392] fill_rx block, count: 0x00000000 i:
0x00000014
> [ 1849.425472] Before while 0x00000014 != 0x00000015
> [ 1849.425591] fill_rx block, count: 0x00000000 i:
0x00000015
> [ 1849.427461] Before while 0x00000015 != 0x00000016
> [ 1849.427579] fill_rx block, count: 0x00000000 i:
0x00000016
> [ 1849.429440] Before while 0x00000016 != 0x00000017
> [ 1849.429557] fill_rx block, count: 0x00000000 i:
0x00000017
> [ 1849.431618] Before while 0x00000017 != 0x00000018
> [ 1849.431736] fill_rx block, count: 0x00000000 i:
0x00000018
> [ 1849.434472] Before while 0x00000018 != 0x00000019
> [ 1849.434590] fill_rx block, count: 0x00000000 i:
0x00000019
> [  854.288510] ipw2200: Firmware error detected. 
Restarting.
> [ 1109.987456] Before while 0x00000000 != 0x00000001
> [  854.530339] Before while 0x00000001 != 0x00000002
> [  854.566437] Before while 0x00000002 != 0x00000003
> [  854.596029] Before while 0x00000003 != 0x00000004
> [  854.620725] Before while 0x00000004 != 0x00000005
> [  854.621141] Before while 0x00000005 != 0x00000006
> [  854.621189] Before while 0x00000006 != 0x00000007
> [  854.633339] Before while 0x00000007 != 0x00000008
> [  854.634229] Before while 0x00000008 != 0x00000009
> [  854.639772] Before while 0x00000009 != 0x0000000a
> [  854.639812] Before while 0x0000000a != 0x0000000b
> [  854.674365] Before while 0x0000000b != 0x0000000c
> [  854.697891] Before while 0x0000000c != 0x0000000d
> [  854.721436] Before while 0x0000000d != 0x0000000e
> [  854.744974] Before while 0x0000000e != 0x0000000f
> [  854.768516] Before while 0x0000000f != 0x00000010
> [  854.792058] Before while 0x00000010 != 0x00000011
> [  854.816046] Before while 0x00000011 != 0x00000012
> [  854.816127] Before while 0x00000012 != 0x00000013
> [  854.816172] Before while 0x00000013 != 0x00000014
> [  854.816688] Before while 0x00000014 != 0x00000015
> [  854.857375] Before while 0x00000015 != 0x00000016
> [  855.047194] Before while 0x00000016 != 0x00000017
> [  855.048013] Before while 0x00000017 != 0x00000018
> 
> I'm not sure why the timestamps aren't incrementing.

This seems to indicate that on your machine ipw_rx() is only
ever called
for one packet, i.e. the firmware never seems to write more
than one
packet into the ring buffer for the host to read, or maybe
the host is
fast enough that it can process each interrupt.

That would mean that count never gets above 8, and that the
RX queue is
never restocked.  The (count >= 8) part might be specific
to the
3945/4965 drivers, since they apparently restock the RX
queue in blocks
of 8.  Can you try to change the:

if (count >= 8)

to

if (count)

and see what that does for you?  Also, can you log the value
of
"ipw_rx_queue_space (priv->rxq)" on the same
line as your "fill_rx
block" printk?

Thanks!
Dan

> >Also, what's the procedure to reproduce this again?
 I couldn't get that
> >bit to trigger but I wasn't really sure what to do
to stress the 2200
> >that far, otherwise I could have tested the patch
more before posting.
> 
> I did not get this when do something like:
> | ssh box 'cat /dev/zero' >  /dev/null
> 
> but it works fine with a firefox download from the same
machine. It was
> triggered after a download of 22.9 MiB at rate of about
664 KiB (this is
> what the download window says).
> 
> >Thanks,
> >Dan
> 
> Sebastian


------------------------------------------------------------
-------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
ipw2100-devel mailing list
ipw2100-devellists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ipw2100-d
evel

Re: ipw2200 stalls on high load
user name
2008-02-05 10:50:51
> 
> That would mean that count never gets above 8, and that
the 
> RX queue is never restocked.  The (count >= 8) part
might be 
> specific to the
> 3945/4965 drivers, since they apparently restock the RX
queue 
> in blocks of 8.  

That's right, the 3945 and 4965 hardware like to see the
index change on
boundaries of 8.  You'll see that, somewhere in the driver
code, the
lower 3 bits of the index get masked to 0.  I don't know
what 2200's
requirements are in this regard.

-- Ben --

------------------------------------------------------------
-------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
ipw2100-devel mailing list
ipw2100-devellists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ipw2100-d
evel

Re: ipw2200 stalls on high load
country flaguser name
Germany
2008-02-05 17:53:44
* Dan Williams | 2008-02-05 10:09:14 [-0500]:

>That would mean that count never gets above 8, and that
the RX queue is
>never restocked.  The (count >= 8) part might be
specific to the
>3945/4965 drivers, since they apparently restock the RX
queue in blocks
>of 8.  Can you try to change the:
>
>if (count >= 8)
>
>to
>
>if (count)
>
>and see what that does for you?  Also, can you log the
value of
>"ipw_rx_queue_space (priv->rxq)" on the
same line as your "fill_rx
>block" printk?

This gives the following from time to time:
| [ 3327.863414] fill_rx block, count: 0x00000000 i:
0x0000000e, ipw_rx_queue_space: 0x00000011
| [ 3329.704780] fill_rx block, count: 0x00000000 i:
0x00000003, ipw_rx_queue_space: 0x00000011
| [ 3331.532242] fill_rx block, count: 0x00000000 i:
0x0000001a, ipw_rx_queue_space: 0x00000011
| [ 3333.306232] fill_rx block, count: 0x00000000 i:
0x00000009, ipw_rx_queue_space: 0x00000011
| [ 3335.062033] fill_rx block, count: 0x00000000 i:
0x00000018, ipw_rx_queue_space: 0x00000011
| [ 3336.983284] fill_rx block, count: 0x00000000 i:
0x0000000e, ipw_rx_queue_space: 0x00000011
| [ 3338.792414] fill_rx block, count: 0x00000000 i:
0x00000005, ipw_rx_queue_space: 0x00000011
| [ 3340.624946] fill_rx block, count: 0x00000000 i:
0x00000012, ipw_rx_queue_space: 0x00000011
| [ 3343.179358] fill_rx block, count: 0x00000000 i:
0x00000015, ipw_rx_queue_space: 0x00000011

and I had no firmware restart this time. It seems that it
got fixed 
thx.

Sebastian

------------------------------------------------------------
-------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
ipw2100-devel mailing list
ipw2100-devellists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ipw2100-d
evel

[1-3]

about | contact  Other archives ( Real Estate discussion Medical topics )