• Lennert Buytenhek's avatar
    mv643xx_eth: OOM handling fixes · 1319ebad
    Lennert Buytenhek authored
    Currently, when OOM occurs during rx ring refill, mv643xx_eth will get
    into an infinite loop, due to the refill function setting the OOM bit
    but not clearing the 'rx refill needed' bit for this queue, while the
    calling function (the NAPI poll handler) will call the refill function
    in a loop until the 'rx refill needed' bit goes off, without checking
    the OOM bit.
    
    This patch fixes this by checking the OOM bit in the NAPI poll handler
    before attempting to do rx refill.  This means that once OOM occurs,
    we won't try to do any memory allocations again until the next invocation
    of the poll handler.
    
    While we're at it, change the OOM flag to be a single bit instead of
    one bit per receive queue since OOM is a system state rather than a
    per-queue state, and cancel the OOM timer on entry to the NAPI poll
    handler if it's running to prevent it from firing when we've already
    come out of OOM.
    Signed-off-by: default avatarLennert Buytenhek <buytenh@marvell.com>
    Cc: stable@kernel.org
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1319ebad
mv643xx_eth.c 71.2 KB