Hi all, Below I've pasted a piece of e1000_intr() (Interrupt handler for the e1000 driver). I've a few questions on this. <<<<<<<<<<<<<<<<<<< snip >>>>>>>>>>>>>>>>>>>> icr = E1000_READ_REG(&adapter->hw, ICR); if (icr && netif_rx_schedule_prep(netdev)) { e1000_irq_disable(adapter); __netif_rx_schedule(netdev); <<<<<<<<<<<<<<<<<<<< snip >>>>>>>>>>>>>>>>>>>>>>>>> I don't have access to e1000 specs, but by going thru the code I assume that the E1000_READ_REG line will clear the Interrupt Status Register (Clear On Read). If that is true, I have a question about what will happen if the e1000 card is sharing interrupt with some other device. Suppose the e1000 driver is currently inside e1000_poll and we get an interrupt (due to the other device sharing the interrupt line). Since all the shared interrupt handlers are called by the kernel, e1000_intr will also be called. Now we call E1000_READ_REG which will clear the Interrupt Status Register (assuming that some status was pending to be read). We will not enter the if() block as netif_rx_schedule_prep() will fail due to the device already being polled. The question is. Won't this status be _lost_ for ever. If the other device is generating lots of interrupts, we will have lots of such e1000 device interrupt losses. This might have bad impact on interrupt latency. A better thing would be to do adapter->icr_pending |= icr; This way the polling routine will come to know abt the interrupt, even though we have cleared the status register. Thanx, tomar -- You have moved the mouse. Windows must be restarted for the changes to take effect. - : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html