E1000 driver and NAPI : Possible interrupt losses.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux