diff options
author | Henry Orosco <henry.orosco@intel.com> | 2016-11-30 16:14:15 -0500 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2016-12-05 16:09:44 -0500 |
commit | 78300cf8152f87adb20fbe71a600e0d8d72aabe8 (patch) | |
tree | dbdd3837f42e0720c8e7cc0ca6992b5bf3928ebc | |
parent | 1ef936b229c54e73a3cce9f4eb8dd5a146add073 (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.h | 1 | ||||
-rw-r--r-- | drivers/infiniband/hw/i40iw/i40iw_utils.c | 10 |
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); |