提交 b8997cfb 编写于 作者: C Chiqijun 提交者: Yang Yingliang

net/hinic: Add lock for mgmt channel event_flag

driver inclusion
category: bugfix
bugzilla: 4472

-----------------------------------------------------------------------

event_flag in struct hinic_msg_pf_to_mgmt marks the sending status of
the message, add lock for mgmt channel event_flag in
hinic_force_complete_all.
Signed-off-by: NChiqijun <chiqijun@huawei.com>
Reviewed-by: NZengweiliang <zengweiliang.zengweiliang@huawei.com>
Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
上级 4e8d3889
...@@ -780,10 +780,12 @@ void hinic_force_complete_all(void *hwdev) ...@@ -780,10 +780,12 @@ void hinic_force_complete_all(void *hwdev)
if (hinic_func_type(dev) != TYPE_VF && if (hinic_func_type(dev) != TYPE_VF &&
hinic_is_hwdev_mod_inited(dev, HINIC_HWDEV_MGMT_INITED)) { hinic_is_hwdev_mod_inited(dev, HINIC_HWDEV_MGMT_INITED)) {
recv_resp_msg = &dev->pf_to_mgmt->recv_resp_msg_from_mgmt; recv_resp_msg = &dev->pf_to_mgmt->recv_resp_msg_from_mgmt;
spin_lock_bh(&dev->pf_to_mgmt->sync_event_lock);
if (dev->pf_to_mgmt->event_flag == SEND_EVENT_START) { if (dev->pf_to_mgmt->event_flag == SEND_EVENT_START) {
complete(&recv_resp_msg->recv_done); complete(&recv_resp_msg->recv_done);
dev->pf_to_mgmt->event_flag = SEND_EVENT_TIMEOUT; dev->pf_to_mgmt->event_flag = SEND_EVENT_TIMEOUT;
} }
spin_unlock_bh(&dev->pf_to_mgmt->sync_event_lock);
} }
/* only flush sync cmdq to avoid blocking remove */ /* only flush sync cmdq to avoid blocking remove */
......
...@@ -80,9 +80,9 @@ ...@@ -80,9 +80,9 @@
static void pf_to_mgmt_send_event_set(struct hinic_msg_pf_to_mgmt *pf_to_mgmt, static void pf_to_mgmt_send_event_set(struct hinic_msg_pf_to_mgmt *pf_to_mgmt,
int event_flag) int event_flag)
{ {
spin_lock(&pf_to_mgmt->sync_event_lock); spin_lock_bh(&pf_to_mgmt->sync_event_lock);
pf_to_mgmt->event_flag = event_flag; pf_to_mgmt->event_flag = event_flag;
spin_unlock(&pf_to_mgmt->sync_event_lock); spin_unlock_bh(&pf_to_mgmt->sync_event_lock);
} }
/** /**
...@@ -1085,7 +1085,7 @@ static void mgmt_resp_msg_handler(struct hinic_msg_pf_to_mgmt *pf_to_mgmt, ...@@ -1085,7 +1085,7 @@ static void mgmt_resp_msg_handler(struct hinic_msg_pf_to_mgmt *pf_to_mgmt,
if (recv_msg->msg_id & ASYNC_MSG_FLAG) if (recv_msg->msg_id & ASYNC_MSG_FLAG)
return; return;
spin_lock(&pf_to_mgmt->sync_event_lock); spin_lock_bh(&pf_to_mgmt->sync_event_lock);
if (recv_msg->msg_id == pf_to_mgmt->sync_msg_id && if (recv_msg->msg_id == pf_to_mgmt->sync_msg_id &&
pf_to_mgmt->event_flag == SEND_EVENT_START) { pf_to_mgmt->event_flag == SEND_EVENT_START) {
complete(&recv_msg->recv_done); complete(&recv_msg->recv_done);
...@@ -1098,7 +1098,7 @@ static void mgmt_resp_msg_handler(struct hinic_msg_pf_to_mgmt *pf_to_mgmt, ...@@ -1098,7 +1098,7 @@ static void mgmt_resp_msg_handler(struct hinic_msg_pf_to_mgmt *pf_to_mgmt,
pf_to_mgmt->sync_msg_id, recv_msg->msg_id, pf_to_mgmt->sync_msg_id, recv_msg->msg_id,
pf_to_mgmt->event_flag); pf_to_mgmt->event_flag);
} }
spin_unlock(&pf_to_mgmt->sync_event_lock); spin_unlock_bh(&pf_to_mgmt->sync_event_lock);
} }
static void recv_mgmt_msg_work_handler(struct work_struct *work) static void recv_mgmt_msg_work_handler(struct work_struct *work)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册