diff --git a/drivers/infiniband/hw/hns/hns_roce_cmd.c b/drivers/infiniband/hw/hns/hns_roce_cmd.c index 4410e0a826cee265c7180ea4b59f18a33ec9de67..43e0d9bfca8b0ec60a63ee65b22151665ac45812 100644 --- a/drivers/infiniband/hw/hns/hns_roce_cmd.c +++ b/drivers/infiniband/hw/hns/hns_roce_cmd.c @@ -261,7 +261,10 @@ void hns_roce_cmd_use_polling(struct hns_roce_dev *hr_dev) { struct hns_roce_cmdq *hr_cmd = &hr_dev->cmd; - hr_cmd->use_events = 0; + if (hr_cmd->use_events) { + kfree(hr_cmd->context); + hr_cmd->use_events = 0; + } } struct hns_roce_cmd_mailbox diff --git a/drivers/infiniband/hw/hns/hns_roce_main.c b/drivers/infiniband/hw/hns/hns_roce_main.c index 1ad25e9491d846d510b6b2b544d9a336aeb956e5..f7876d833ba99366c770fa447936228bd82038f2 100644 --- a/drivers/infiniband/hw/hns/hns_roce_main.c +++ b/drivers/infiniband/hw/hns/hns_roce_main.c @@ -1435,8 +1435,8 @@ int hns_roce_init(struct hns_roce_dev *hr_dev) hns_roce_cleanup_hem(hr_dev); error_failed_init_hem: - if (hr_dev->cmd.use_events) - kfree(hr_dev->cmd.context); + if (hr_dev->cmd_mod) + hns_roce_cmd_use_polling(hr_dev); hr_dev->hw->cleanup_eq(hr_dev); error_failed_eq_table: @@ -1468,10 +1468,8 @@ void hns_roce_exit(struct hns_roce_dev *hr_dev) hns_roce_cleanup_bitmap(hr_dev); hns_roce_cleanup_hem(hr_dev); - if (hr_dev->cmd_mod) { - kfree(hr_dev->cmd.context); + if (hr_dev->cmd_mod) hns_roce_cmd_use_polling(hr_dev); - } hr_dev->hw->cleanup_eq(hr_dev); hns_roce_cmd_cleanup(hr_dev);