aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenry Orosco <henry.orosco@intel.com>2016-11-30 16:14:15 -0500
committerDoug Ledford <dledford@redhat.com>2016-12-05 16:09:44 -0500
commit78300cf8152f87adb20fbe71a600e0d8d72aabe8 (patch)
treedbdd3837f42e0720c8e7cc0ca6992b5bf3928ebc
parent1ef936b229c54e73a3cce9f4eb8dd5a146add073 (diff)
i40iw: Add request for reset on CQP timeout
When CQP times out, send a request to LAN driver for reset. Signed-off-by: Mustafa Ismail <mustafa.ismail@intel.com> Signed-off-by: Henry Orosco <henry.orosco@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
-rw-r--r--drivers/infiniband/hw/i40iw/i40iw.h1
-rw-r--r--drivers/infiniband/hw/i40iw/i40iw_utils.c10
2 files changed, 10 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/i40iw/i40iw.h b/drivers/infiniband/hw/i40iw/i40iw.h
index c795c6160261..ef188e6b1f89 100644
--- a/drivers/infiniband/hw/i40iw/i40iw.h
+++ b/drivers/infiniband/hw/i40iw/i40iw.h
@@ -304,6 +304,7 @@ struct i40iw_device {
304 u32 mpa_version; 304 u32 mpa_version;
305 bool dcb; 305 bool dcb;
306 bool closing; 306 bool closing;
307 bool reset;
307 u32 used_pds; 308 u32 used_pds;
308 u32 used_cqs; 309 u32 used_cqs;
309 u32 used_mrs; 310 u32 used_mrs;
diff --git a/drivers/infiniband/hw/i40iw/i40iw_utils.c b/drivers/infiniband/hw/i40iw/i40iw_utils.c
index 641f00f3dda1..4a08ffb75d2e 100644
--- a/drivers/infiniband/hw/i40iw/i40iw_utils.c
+++ b/drivers/infiniband/hw/i40iw/i40iw_utils.c
@@ -396,7 +396,10 @@ static int i40iw_wait_event(struct i40iw_device *iwdev,
396 i40iw_pr_err("error cqp command 0x%x timed out ret = %d\n", 396 i40iw_pr_err("error cqp command 0x%x timed out ret = %d\n",
397 info->cqp_cmd, timeout_ret); 397 info->cqp_cmd, timeout_ret);
398 err_code = -ETIME; 398 err_code = -ETIME;
399 i40iw_request_reset(iwdev); 399 if (!iwdev->reset) {
400 iwdev->reset = true;
401 i40iw_request_reset(iwdev);
402 }
400 goto done; 403 goto done;
401 } 404 }
402 cqp_error = cqp_request->compl_info.error; 405 cqp_error = cqp_request->compl_info.error;
@@ -426,6 +429,11 @@ enum i40iw_status_code i40iw_handle_cqp_op(struct i40iw_device *iwdev,
426 struct cqp_commands_info *info = &cqp_request->info; 429 struct cqp_commands_info *info = &cqp_request->info;
427 int err_code = 0; 430 int err_code = 0;
428 431
432 if (iwdev->reset) {
433 i40iw_free_cqp_request(&iwdev->cqp, cqp_request);
434 return I40IW_ERR_CQP_COMPL_ERROR;
435 }
436
429 status = i40iw_process_cqp_cmd(dev, info); 437 status = i40iw_process_cqp_cmd(dev, info);
430 if (status) { 438 if (status) {
431 i40iw_pr_err("error cqp command 0x%x failed\n", info->cqp_cmd); 439 i40iw_pr_err("error cqp command 0x%x failed\n", info->cqp_cmd);