return p_tlv;
 }
 
+static void qed_vf_pf_req_end(struct qed_hwfn *p_hwfn, int req_status)
+{
+       union pfvf_tlvs *resp = p_hwfn->vf_iov_info->pf2vf_reply;
+
+       DP_VERBOSE(p_hwfn, QED_MSG_IOV,
+                  "VF request status = 0x%x, PF reply status = 0x%x\n",
+                  req_status, resp->default_resp.hdr.status);
+
+       mutex_unlock(&(p_hwfn->vf_iov_info->mutex));
+}
+
 static int qed_send_msg2pf(struct qed_hwfn *p_hwfn, u8 *done, u32 resp_size)
 {
        union vfpf_tlvs *p_req = p_hwfn->vf_iov_info->vf2pf_request;
                           "VF <-- PF Timeout [Type %d]\n",
                           p_req->first_tlv.tl.type);
                rc = -EBUSY;
-               goto exit;
        } else {
                DP_VERBOSE(p_hwfn, QED_MSG_IOV,
                           "PF response: %d [Type %d]\n",
                           *done, p_req->first_tlv.tl.type);
        }
 
-exit:
-       mutex_unlock(&(p_hwfn->vf_iov_info->mutex));
-
        return rc;
 }
 
        }
 
 exit:
+       qed_vf_pf_req_end(p_hwfn, rc);
+
        return rc;
 }
 
        resp = &p_iov->pf2vf_reply->queue_start;
        rc = qed_send_msg2pf(p_hwfn, &resp->hdr.status, sizeof(*resp));
        if (rc)
-               return rc;
+               goto exit;
 
-       if (resp->hdr.status != PFVF_STATUS_SUCCESS)
-               return -EINVAL;
+       if (resp->hdr.status != PFVF_STATUS_SUCCESS) {
+               rc = -EINVAL;
+               goto exit;
+       }
 
        /* Learn the address of the producer from the response */
        if (pp_prod && !p_iov->b_pre_fp_hsi) {
                __internal_ram_wr(p_hwfn, *pp_prod, sizeof(u32),
                                  (u32 *)&init_prod_val);
        }
+exit:
+       qed_vf_pf_req_end(p_hwfn, rc);
 
        return rc;
 }
        resp = &p_iov->pf2vf_reply->default_resp;
        rc = qed_send_msg2pf(p_hwfn, &resp->hdr.status, sizeof(*resp));
        if (rc)
-               return rc;
+               goto exit;
+
+       if (resp->hdr.status != PFVF_STATUS_SUCCESS) {
+               rc = -EINVAL;
+               goto exit;
+       }
 
-       if (resp->hdr.status != PFVF_STATUS_SUCCESS)
-               return -EINVAL;
+exit:
+       qed_vf_pf_req_end(p_hwfn, rc);
 
        return rc;
 }
                           tx_queue_id, *pp_doorbell, resp->offset);
        }
 exit:
+       qed_vf_pf_req_end(p_hwfn, rc);
 
        return rc;
 }
        resp = &p_iov->pf2vf_reply->default_resp;
        rc = qed_send_msg2pf(p_hwfn, &resp->hdr.status, sizeof(*resp));
        if (rc)
-               return rc;
+               goto exit;
 
-       if (resp->hdr.status != PFVF_STATUS_SUCCESS)
-               return -EINVAL;
+       if (resp->hdr.status != PFVF_STATUS_SUCCESS) {
+               rc = -EINVAL;
+               goto exit;
+       }
+
+exit:
+       qed_vf_pf_req_end(p_hwfn, rc);
 
        return rc;
 }
        resp = &p_iov->pf2vf_reply->default_resp;
        rc = qed_send_msg2pf(p_hwfn, &resp->hdr.status, sizeof(*resp));
        if (rc)
-               return rc;
+               goto exit;
+
+       if (resp->hdr.status != PFVF_STATUS_SUCCESS) {
+               rc = -EINVAL;
+               goto exit;
+       }
 
-       if (resp->hdr.status != PFVF_STATUS_SUCCESS)
-               return -EINVAL;
+exit:
+       qed_vf_pf_req_end(p_hwfn, rc);
 
        return rc;
 }
 
        rc = qed_send_msg2pf(p_hwfn, &resp->hdr.status, sizeof(*resp));
        if (rc)
-               return rc;
+               goto exit;
 
-       if (resp->hdr.status != PFVF_STATUS_SUCCESS)
-               return -EINVAL;
+       if (resp->hdr.status != PFVF_STATUS_SUCCESS) {
+               rc = -EINVAL;
+               goto exit;
+       }
+
+exit:
+       qed_vf_pf_req_end(p_hwfn, rc);
 
        return rc;
 }
 
        rc = qed_send_msg2pf(p_hwfn, &resp->hdr.status, resp_size);
        if (rc)
-               return rc;
+               goto exit;
 
-       if (resp->hdr.status != PFVF_STATUS_SUCCESS)
-               return -EINVAL;
+       if (resp->hdr.status != PFVF_STATUS_SUCCESS) {
+               rc = -EINVAL;
+               goto exit;
+       }
 
        qed_vf_handle_vp_update_tlvs_resp(p_hwfn, p_params);
 
+exit:
+       qed_vf_pf_req_end(p_hwfn, rc);
+
        return rc;
 }
 
        resp = &p_iov->pf2vf_reply->default_resp;
        rc = qed_send_msg2pf(p_hwfn, &resp->hdr.status, sizeof(*resp));
        if (rc)
-               return rc;
+               goto exit;
 
-       if (resp->hdr.status != PFVF_STATUS_SUCCESS)
-               return -EAGAIN;
+       if (resp->hdr.status != PFVF_STATUS_SUCCESS) {
+               rc = -EAGAIN;
+               goto exit;
+       }
 
        p_hwfn->b_int_enabled = 0;
 
-       return 0;
+exit:
+       qed_vf_pf_req_end(p_hwfn, rc);
+
+       return rc;
 }
 
 int qed_vf_pf_release(struct qed_hwfn *p_hwfn)
        if (!rc && resp->hdr.status != PFVF_STATUS_SUCCESS)
                rc = -EAGAIN;
 
+       qed_vf_pf_req_end(p_hwfn, rc);
+
        p_hwfn->b_int_enabled = 0;
 
        if (p_iov->vf2pf_request)
        resp = &p_iov->pf2vf_reply->default_resp;
        rc = qed_send_msg2pf(p_hwfn, &resp->hdr.status, sizeof(*resp));
        if (rc)
-               return rc;
+               goto exit;
 
-       if (resp->hdr.status != PFVF_STATUS_SUCCESS)
-               return -EAGAIN;
+       if (resp->hdr.status != PFVF_STATUS_SUCCESS) {
+               rc = -EAGAIN;
+               goto exit;
+       }
 
-       return 0;
+exit:
+       qed_vf_pf_req_end(p_hwfn, rc);
+
+       return rc;
 }
 
 int qed_vf_pf_int_cleanup(struct qed_hwfn *p_hwfn)
 
        rc = qed_send_msg2pf(p_hwfn, &resp->hdr.status, sizeof(*resp));
        if (rc)
-               return rc;
+               goto exit;
+
+       if (resp->hdr.status != PFVF_STATUS_SUCCESS) {
+               rc = -EINVAL;
+               goto exit;
+       }
 
-       if (resp->hdr.status != PFVF_STATUS_SUCCESS)
-               return -EINVAL;
+exit:
+       qed_vf_pf_req_end(p_hwfn, rc);
 
-       return 0;
+       return rc;
 }
 
 u16 qed_vf_get_igu_sb_id(struct qed_hwfn *p_hwfn, u16 sb_id)