Fork us on GitHub Follow us on Facebook Follow us on Twitter

Opened 9 months ago

Last modified 7 months ago

#818 new defect

e1k driver appears to claim the wrong interrupt

Reported by: Colin Parker Owned by:
Priority: minor Milestone:
Component: helenos/drv/e1k Version: mainline
Keywords: Cc:
Blocker for: Depends on:
See also:

Description

In the IRQ pseudo-code for the e1k driver, the interrupt claim is based on reading a non-zero value for the interrupt cause read (ICR) register of the device. However, the interrupt mask is set so that only one bit (ICR_RXT0) will trigger interrupts. This means that if another interrupt cause is true, the driver will claim any IRQs even though the e1k was not the source of the interrupt. I was able to work around this by having the pseudo-code mask the register before testing.

Background: I've compiled HelenOS for amd64 targeting EFI firmware rather than PC. I test it using qemu and the Intel Tianocore/EDK2 firmware. Using default PC firmware this problem doesn't seem to have symptoms, but in my configuration it prevents both the USB ehci and e1k drivers from sharing the IRQ. So I suspect it also involves something like a race condition between the drivers, but with my suggested fix it should work in both situations.

Change History (1)

comment:1 Changed 7 months ago by Jiri Svoboda

That sound like good root cause and reasonable fix. Can you submit a pull request, please? Thanks!

Note: See TracTickets for help on using tickets.