0.99L and timeouts

Andrew Morton andrewm@uow.edu.au
Mon Apr 10 20:01:47 2000


Bogdan Costescu wrote:
> 
> On Mon, 10 Apr 2000, Andrew Morton wrote:
> 
> > The 3c59x specs can be obtained from
> > http://support.3com.com/partners/developer/developer_form.html
> 
> Thank you for this! I thought that they are under NDA...
> 
> > hmmm...  It does write the address of the dirty_tx buffer to
> > DownListPtr, which should trigger a transmit once the transmitter is
> > unstalled.
> 
> Only if cur_tx - dirty_tx > 0, which is not true as they are equal!

Oh.  I now understand your point.  cur_tx == dirty_tx and tx_full == 1.

I've looked and looked.  I can't see a logic bug, SMP race or IRQ race
which could cause this.  I suggest you put some explicit code in various
places to detect this condition and print something out, so we can
identify it as near as poss to its cause.  Odd.

There are a couple of buglets which you should probably fix as well:

In vortex_timer():

       /* Set the full-duplex bit. */
       outb((vp->full_duplex ? 0x20 : 0) |
          (dev->mtu > 1500 ? 0x40 : 0),
          ioaddr + Wn3_MAC_Ctrl);

This should have an EL3WINDOW(3); immediately before it.  I think it's
writing to the wrong window here.  This won't help though.

And in vortex_open():

vp->intr_enable = SetIntrEnb | IntLatch | TxAvailable | RxComplete |
        StatsFull | HostError | TxComplete | IntReq
       | (vp->bus_master ? DMADone : 0) | UpComplete | DownComplete;

That should be

vp->intr_enable = SetIntrEnb | IntLatch | TxAvailable |
        (vp->full_bus_master_rx ? 0 : RxComplete) |
        StatsFull | HostError | TxComplete | IntReq
        | (vp->bus_master ? DMADone : 0) | UpComplete | DownComplete;

This could conceivably fix it.


In vortex_interrupt() I suggest you put some printk's in to ensure that
the 'status & RxComplete' and 'status & TxAvailable' tests are _not_
returning true. These are for the vortex (as opposed to boomerang)
hardware and shouldn't be taken.



I am not able to reproduce the problem here.  I've set
max_interrupt_work to 4 and TX_RING_SIZE to 2 and pounded traffic
through it.  What is your setup?

Are you able to reproduce the problem running uniprocessor?

-- 
-akpm-
-------------------------------------------------------------------
To unsubscribe send a message body containing "unsubscribe"
to linux-vortex-bug-request@beowulf.org