Hello,
We have a problem with Linux e1000e driver on an on-board e1000e controller, (listed as 82579LM). We have pinpointed the problem to a very simple test case.
A task sends an UDP packet every 5ms. Most of the time, this happens in a few microseconds, but from time to time, this can take a few multiples of 50 microseconds.
Instrumenting the driver, we found that the lost time happens in the function e1000e_update_tail_wa, where the function waits for the register at offset 0x05B54 to contain the bit 0x01000000. We understand from the code that using this register is a workaround for the 82579 chip. Looking at various datasheets, we were not able to find a documentation of what this register does and a description of exactly what this workaround is needed? Since this workaround is consuming time, is there any way we could replace it with say, a software spinlock?
Regards