net: hns: fix soft lockup when there is not enough memory
[ Upstream commit49edd6a2c4] When there is not enough memory and napi_alloc_skb() return NULL, the HNS driver will print error message, and than try again, if the memory is not enough for a while, huge error message and the retry operation will cause soft lockup. When napi_alloc_skb() return NULL because of no memory, we can get a warn_alloc() call trace, so this patch deletes the error message. We already use polling mode to handle irq, but the retry operation will render the polling weight inactive, this patch just return budget when the rx is not completed to avoid dead loop. Fixes:36eedfde1a("net: hns: Optimize hns_nic_common_poll for better performance") Fixes:b5996f11ea("net: add Hisilicon Network Subsystem basic ethernet support") Signed-off-by: Yonglong Liu <liuyonglong@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
0eb8f098a2
commit
11235a3d7b
1 changed files with 1 additions and 3 deletions
|
|
@ -569,7 +569,6 @@ static int hns_nic_poll_rx_skb(struct hns_nic_ring_data *ring_data,
|
|||
skb = *out_skb = napi_alloc_skb(&ring_data->napi,
|
||||
HNS_RX_HEAD_SIZE);
|
||||
if (unlikely(!skb)) {
|
||||
netdev_err(ndev, "alloc rx skb fail\n");
|
||||
ring->stats.sw_err_cnt++;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
|
@ -1060,7 +1059,6 @@ static int hns_nic_common_poll(struct napi_struct *napi, int budget)
|
|||
container_of(napi, struct hns_nic_ring_data, napi);
|
||||
struct hnae_ring *ring = ring_data->ring;
|
||||
|
||||
try_again:
|
||||
clean_complete += ring_data->poll_one(
|
||||
ring_data, budget - clean_complete,
|
||||
ring_data->ex_process);
|
||||
|
|
@ -1070,7 +1068,7 @@ try_again:
|
|||
napi_complete(napi);
|
||||
ring->q->handle->dev->ops->toggle_ring_irq(ring, 0);
|
||||
} else {
|
||||
goto try_again;
|
||||
return budget;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue