e1k driver appears to claim the wrong interrupt
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.