net: hns3: add cond_resched() to hns3 ring buffer init process
[ Upstream commit 968fde83841a8c23558dfbd0a0c69d636db52b55 ]
Currently hns3 ring buffer init process would hold cpu too long with big
Tx/Rx ring depth. This could cause soft lockup.
So this patch adds cond_resched() to the process. Then cpu can break to
run other tasks instead of busy looping.
Fixes: a723fb8efe
("net: hns3: refine for set ring parameters")
Signed-off-by: Jie Wang <wangjie125@huawei.com>
Signed-off-by: Jijie Shao <shaojijie@huawei.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
bd8e1e6af6
commit
187e293c82
@@ -2513,6 +2513,9 @@ static int hns3_alloc_ring_buffers(struct hns3_enet_ring *ring)
|
|||||||
ret = hns3_alloc_and_attach_buffer(ring, i);
|
ret = hns3_alloc_and_attach_buffer(ring, i);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out_buffer_fail;
|
goto out_buffer_fail;
|
||||||
|
|
||||||
|
if (!(i % HNS3_RESCHED_BD_NUM))
|
||||||
|
cond_resched();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -3946,6 +3949,7 @@ int hns3_init_all_ring(struct hns3_nic_priv *priv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
u64_stats_init(&priv->ring[i].syncp);
|
u64_stats_init(&priv->ring[i].syncp);
|
||||||
|
cond_resched();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -182,6 +182,8 @@ enum hns3_nic_state {
|
|||||||
|
|
||||||
#define HNS3_RING_EN_B 0
|
#define HNS3_RING_EN_B 0
|
||||||
|
|
||||||
|
#define HNS3_RESCHED_BD_NUM 1024
|
||||||
|
|
||||||
enum hns3_pkt_l2t_type {
|
enum hns3_pkt_l2t_type {
|
||||||
HNS3_L2_TYPE_UNICAST,
|
HNS3_L2_TYPE_UNICAST,
|
||||||
HNS3_L2_TYPE_MULTICAST,
|
HNS3_L2_TYPE_MULTICAST,
|
||||||
|
Reference in New Issue
Block a user