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: a723fb8efe29 ("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:
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);
|
||||
if (ret)
|
||||
goto out_buffer_fail;
|
||||
|
||||
if (!(i % HNS3_RESCHED_BD_NUM))
|
||||
cond_resched();
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -3946,6 +3949,7 @@ int hns3_init_all_ring(struct hns3_nic_priv *priv)
|
||||
}
|
||||
|
||||
u64_stats_init(&priv->ring[i].syncp);
|
||||
cond_resched();
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -182,6 +182,8 @@ enum hns3_nic_state {
|
||||
|
||||
#define HNS3_RING_EN_B 0
|
||||
|
||||
#define HNS3_RESCHED_BD_NUM 1024
|
||||
|
||||
enum hns3_pkt_l2t_type {
|
||||
HNS3_L2_TYPE_UNICAST,
|
||||
HNS3_L2_TYPE_MULTICAST,
|
||||
|
Loading…
x
Reference in New Issue
Block a user