• Yannick Vignon's avatar
    net: stmmac: Do not enable RX FIFO overflow interrupts · 8a7cb245
    Yannick Vignon authored
    The RX FIFO overflows when the system is not able to process all received
    packets and they start accumulating (first in the DMA queue in memory,
    then in the FIFO). An interrupt is then raised for each overflowing packet
    and handled in stmmac_interrupt(). This is counter-productive, since it
    brings the system (or more likely, one CPU core) to its knees to process
    the FIFO overflow interrupts.
    
    stmmac_interrupt() handles overflow interrupts by writing the rx tail ptr
    into the corresponding hardware register (according to the MAC spec, this
    has the effect of restarting the MAC DMA). However, without freeing any rx
    descriptors, the DMA stops right away, and another overflow interrupt is
    raised as the FIFO overflows again. Since the DMA is already restarted at
    the end of stmmac_rx_refill() after freeing descriptors, disabling FIFO
    overflow interrupts and the corresponding handling code has no side effect,
    and eliminates the interrupt storm when the RX FIFO overflows.
    Signed-off-by: default avatarYannick Vignon <yannick.vignon@nxp.com>
    Link: https://lore.kernel.org/r/20210506143312.20784-1-yannick.vignon@oss.nxp.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    8a7cb245
stmmac_main.c 196 KB