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