Re: 3c59x & Cat 4003 Ethernet Lockups

From: Jeff Garzik (jgarzik@mandrakesoft.com)
Date: Mon Mar 06 2000 - 16:46:04 EST


Alan Cox wrote:
>
> The problem is Don's workaround for too much work leaves the irq floating
> which is not allowed. The 2000 work limit stops false triggers. The real
> cases we see are also all false triggers.
>
> To make it work it would have to kill the 3c59x irq line

Something I was wondering... would the following make sense/be a good
idea in today's net drivers?

netdev_interrupt()

        stop card from generating interrupts (IntrMask &= ~(TX|RX))
        if (status & (TX|RX))
                mark tasklet/softirq
        { handle weird interrupts like RxErr, etc. }

netdev_tasklet()

        while (h/w status == Rx or Tx present)
                handle rx
                handle tx
                if (work_count++ == 20)
                        if (current->need_resched)
                                schedule()
        enable card interrupts (IntrMask |= (TX|RX))

I've always thought that REDUCING not increasing work done in interrupts
was the right way to go...
        

-- 
Jeff Garzik              | Rule 1:
Building 1024            | There is no cabal.
MandrakeSoft, Inc.       |

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Mar 07 2000 - 21:00:21 EST