• Heiner Kallweit's avatar
    r8169: fix NAPI handling under high load · aa8d067c
    Heiner Kallweit authored
    [ Upstream commit 6b839b6c ]
    
    rtl_rx() and rtl_tx() are called only if the respective bits are set
    in the interrupt status register. Under high load NAPI may not be
    able to process all data (work_done == budget) and it will schedule
    subsequent calls to the poll callback.
    rtl_ack_events() however resets the bits in the interrupt status
    register, therefore subsequent calls to rtl8169_poll() won't call
    rtl_rx() and rtl_tx() - chip interrupts are still disabled.
    
    Fix this by calling rtl_rx() and rtl_tx() independent of the bits
    set in the interrupt status register. Both functions will detect
    if there's nothing to do for them.
    
    Fixes: da78dbff ("r8169: remove work from irq handler.")
    Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    aa8d067c
r8169.c 210 KB