diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c index 74b7f7e648f0125acdf248a42ed338fc7b8ab4c1..755404795ef8bdf13f3124222ad3f2e61cbd63b0 100644 --- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c @@ -1208,9 +1208,12 @@ static int __hns_roce_cmq_send(struct hns_roce_dev *hr_dev, desc_ret = le16_to_cpu(desc[handle].retval); if (desc_ret == CMD_EXEC_SUCCESS) ret = 0; - else + else if (desc_ret == CMD_EXEC_TIMEOUT) { + priv->cmq.last_status = desc_ret; + ret = -ETIME; + } else ret = -EIO; - priv->cmq.last_status = desc_ret; + ntc++; handle++; if (ntc == csq->desc_num) diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.h b/drivers/infiniband/hw/hns/hns_roce_hw_v2.h index 1f58cb6eca268f15b80781651bf4d7ee75a80a15..4ff9f3c7f62ec0c9abedcac576722eed6f886e0a 100644 --- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.h +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.h @@ -306,6 +306,7 @@ enum hns_roce_cmd_return_status { CMD_NO_AUTH = 1, CMD_NOT_EXEC = 2, CMD_QUEUE_FULL = 3, + CMD_EXEC_TIMEOUT = 8, }; enum hns_roce_sgid_type {