From 1a5e6e13666bff4760141d588921ac04593103b7 Mon Sep 17 00:00:00 2001 From: Weihang Li Date: Thu, 18 Jul 2019 19:32:39 +0800 Subject: [PATCH] RDMA/hns: add handling of CMD_EXEC_TIMEOUT driver inclusion category: bugfix bugzilla: NA CVE: NA The application layer should be aware of cmq timeout, so we assign last_status with CMD_EXEC_TIMEOUT in this case. In other situations, app layer don't care about this variable. Feature or Bugfix: Bugfix Signed-off-by: Weihang Li Reviewed-by: chenglang Reviewed-by: liuyixian Reviewed-by: Yang Yingliang Signed-off-by: Yang Yingliang --- drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 7 +++++-- drivers/infiniband/hw/hns/hns_roce_hw_v2.h | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c index 74b7f7e648f0..755404795ef8 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 1f58cb6eca26..4ff9f3c7f62e 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 { -- GitLab