diff options
author | Ido Shamay | 2015-04-30 16:32:46 +0200 |
---|---|---|
committer | David S. Miller | 2015-04-30 22:47:50 +0200 |
commit | 07841f9d94c11afe00c0498cf242edf4075729f4 (patch) | |
tree | c92c000d3119f222b8fcee9fe732bd796804f193 /drivers/net/ethernet/mellanox/mlx4/en_netdev.c | |
parent | netxen_nic: use spin_[un]lock_bh around tx_clean_lock (diff) | |
download | kernel-qcow2-linux-07841f9d94c11afe00c0498cf242edf4075729f4.tar.gz kernel-qcow2-linux-07841f9d94c11afe00c0498cf242edf4075729f4.tar.xz kernel-qcow2-linux-07841f9d94c11afe00c0498cf242edf4075729f4.zip |
net/mlx4_en: Schedule napi when RX buffers allocation fails
When system is out of memory, refilling of RX buffers fails while
the driver continue to pass the received packets to the kernel stack.
At some point, when all RX buffers deplete, driver may fall into a
sleep, and not recover when memory for new RX buffers is once again
availible. This is because hardware does not have valid descriptors,
so no interrupt will be generated for the driver to return to work
in napi context. Fix it by schedule the napi poll function from
stats_task delayed workqueue, as long as the allocations fail.
Signed-off-by: Ido Shamay <idos@mellanox.com>
Signed-off-by: Amir Vadai <amirv@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx4/en_netdev.c')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/en_netdev.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c index bf173d7b873b..32f5ec737472 100644 --- a/drivers/net/ethernet/mellanox/mlx4/en_netdev.c +++ b/drivers/net/ethernet/mellanox/mlx4/en_netdev.c @@ -1467,6 +1467,7 @@ static void mlx4_en_service_task(struct work_struct *work) if (mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_TS) mlx4_en_ptp_overflow_check(mdev); + mlx4_en_recover_from_oom(priv); queue_delayed_work(mdev->workqueue, &priv->service_task, SERVICE_TASK_DELAY); } |