]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
i40iw: Add request for reset on CQP timeout
authorHenry Orosco <henry.orosco@intel.com>
Wed, 30 Nov 2016 21:14:15 +0000 (15:14 -0600)
committerDoug Ledford <dledford@redhat.com>
Mon, 5 Dec 2016 21:09:44 +0000 (16:09 -0500)
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>
drivers/infiniband/hw/i40iw/i40iw.h
drivers/infiniband/hw/i40iw/i40iw_utils.c

index c795c61602610701bee6e7191fb0a28f8609a43d..ef188e6b1f89fb4972b8b894d3d96bee6025b814 100644 (file)
@@ -304,6 +304,7 @@ struct i40iw_device {
        u32 mpa_version;
        bool dcb;
        bool closing;
+       bool reset;
        u32 used_pds;
        u32 used_cqs;
        u32 used_mrs;
index 641f00f3dda11b90260187edaf5c5229311affd6..4a08ffb75d2e8e66377206768d586202c561bd08 100644 (file)
@@ -396,7 +396,10 @@ static int i40iw_wait_event(struct i40iw_device *iwdev,
                i40iw_pr_err("error cqp command 0x%x timed out ret = %d\n",
                             info->cqp_cmd, timeout_ret);
                err_code = -ETIME;
-               i40iw_request_reset(iwdev);
+               if (!iwdev->reset) {
+                       iwdev->reset = true;
+                       i40iw_request_reset(iwdev);
+               }
                goto done;
        }
        cqp_error = cqp_request->compl_info.error;
@@ -426,6 +429,11 @@ enum i40iw_status_code i40iw_handle_cqp_op(struct i40iw_device *iwdev,
        struct cqp_commands_info *info = &cqp_request->info;
        int err_code = 0;
 
+       if (iwdev->reset) {
+               i40iw_free_cqp_request(&iwdev->cqp, cqp_request);
+               return I40IW_ERR_CQP_COMPL_ERROR;
+       }
+
        status = i40iw_process_cqp_cmd(dev, info);
        if (status) {
                i40iw_pr_err("error cqp command 0x%x failed\n", info->cqp_cmd);