Messages in this thread | | | Date | Mon, 06 Mar 2000 16:46:04 -0500 | From | Jeff Garzik <> | Subject | Re: 3c59x & Cat 4003 Ethernet Lockups |
| |
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/
| |