• Joakim Zhang's avatar
    net: fec: only clear interrupt of handling queue in fec_enet_rx_queue() · b5bd95d1
    Joakim Zhang authored
    Background:
    We have a customer is running a Profinet stack on the 8MM which receives and
    responds PNIO packets every 4ms and PNIO-CM packets every 40ms. However, from
    time to time the received PNIO-CM package is "stock" and is only handled when
    receiving a new PNIO-CM or DCERPC-Ping packet (tcpdump shows the PNIO-CM and
    the DCERPC-Ping packet at the same time but the PNIO-CM HW timestamp is from
    the expected 40 ms and not the 2s delay of the DCERPC-Ping).
    
    After debugging, we noticed PNIO, PNIO-CM and DCERPC-Ping packets would
    be handled by different RX queues.
    
    The root cause should be driver ack all queues' interrupt when handle a
    specific queue in fec_enet_rx_queue(). The blamed patch is introduced to
    receive as much packets as possible once to avoid interrupt flooding.
    But it's unreasonable to clear other queues'interrupt when handling one
    queue, this patch tries to fix it.
    
    Fixes: ed63f1dc (net: fec: clear receive interrupts before processing a packet)
    Cc: Russell King <rmk+kernel@arm.linux.org.uk>
    Reported-by: default avatarNicolas Diaz <nicolas.diaz@nxp.com>
    Signed-off-by: default avatarJoakim Zhang <qiangqing.zhang@nxp.com>
    Link: https://lore.kernel.org/r/20211206135457.15946-1-qiangqing.zhang@nxp.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    b5bd95d1
fec_main.c 108 KB