Skip to content
  • Dmitry Bogdanov's avatar
    net: aquantia: fix out of memory condition on rx side · be6cef69
    Dmitry Bogdanov authored
    On embedded environments with hard memory limits it is a normal although
    rare case when skb can't be allocated on rx part under high traffic.
    
    In such OOM cases napi_complete_done() was not called.
    So the napi object became in an invalid state like it is "scheduled".
    Kernel do not re-schedules the poll of that napi object.
    
    Consequently, kernel can not remove that object the system hangs on
    `ifconfig down` waiting for a poll.
    
    We are fixing this by gracefully closing napi poll routine with correct
    invocation of napi_complete_done.
    
    This was reproduced with artificially failing the allocation of skb to
    simulate an "out of memory" error case and check that traffic does
    not get stuck.
    
    Fixes: 970a2e98
    
     ("net: ethernet: aquantia: Vector operations")
    Signed-off-by: default avatarIgor Russkikh <igor.russkikh@aquantia.com>
    Signed-off-by: default avatarDmitry Bogdanov <dmitry.bogdanov@aquantia.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    be6cef69