diff --git a/drivers/net/ethernet/huawei/hinic/hinic_hwdev.c b/drivers/net/ethernet/huawei/hinic/hinic_hwdev.c index ed2fce3363a887ece62a76da1d3bd1f7d883e7b4..e815eec59b459a83edb39a9507b5a2188b79a8ca 100644 --- a/drivers/net/ethernet/huawei/hinic/hinic_hwdev.c +++ b/drivers/net/ethernet/huawei/hinic/hinic_hwdev.c @@ -780,10 +780,12 @@ void hinic_force_complete_all(void *hwdev) if (hinic_func_type(dev) != TYPE_VF && hinic_is_hwdev_mod_inited(dev, HINIC_HWDEV_MGMT_INITED)) { 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) { complete(&recv_resp_msg->recv_done); 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 */ diff --git a/drivers/net/ethernet/huawei/hinic/hinic_mgmt.c b/drivers/net/ethernet/huawei/hinic/hinic_mgmt.c index 41e530364f0dc914653d07fa4749b90fc7445781..38abf8fe081752da7e471991689b32623d40011e 100644 --- a/drivers/net/ethernet/huawei/hinic/hinic_mgmt.c +++ b/drivers/net/ethernet/huawei/hinic/hinic_mgmt.c @@ -80,9 +80,9 @@ static void pf_to_mgmt_send_event_set(struct hinic_msg_pf_to_mgmt *pf_to_mgmt, 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; - 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, if (recv_msg->msg_id & ASYNC_MSG_FLAG) 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 && pf_to_mgmt->event_flag == SEND_EVENT_START) { complete(&recv_msg->recv_done); @@ -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->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)