|
@@ -701,10 +701,11 @@ void bnx2i_send_cmd_cleanup_req(struct bnx2i_hba *hba, struct bnx2i_cmd *cmd)
|
|
|
* this routine prepares and posts CONN_OFLD_REQ1/2 KWQE to initiate
|
|
|
* iscsi connection context clean-up process
|
|
|
*/
|
|
|
-void bnx2i_send_conn_destroy(struct bnx2i_hba *hba, struct bnx2i_endpoint *ep)
|
|
|
+int bnx2i_send_conn_destroy(struct bnx2i_hba *hba, struct bnx2i_endpoint *ep)
|
|
|
{
|
|
|
struct kwqe *kwqe_arr[2];
|
|
|
struct iscsi_kwqe_conn_destroy conn_cleanup;
|
|
|
+ int rc = -EINVAL;
|
|
|
|
|
|
memset(&conn_cleanup, 0x00, sizeof(struct iscsi_kwqe_conn_destroy));
|
|
|
|
|
@@ -721,7 +722,9 @@ void bnx2i_send_conn_destroy(struct bnx2i_hba *hba, struct bnx2i_endpoint *ep)
|
|
|
|
|
|
kwqe_arr[0] = (struct kwqe *) &conn_cleanup;
|
|
|
if (hba->cnic && hba->cnic->submit_kwqes)
|
|
|
- hba->cnic->submit_kwqes(hba->cnic, kwqe_arr, 1);
|
|
|
+ rc = hba->cnic->submit_kwqes(hba->cnic, kwqe_arr, 1);
|
|
|
+
|
|
|
+ return rc;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -732,8 +735,8 @@ void bnx2i_send_conn_destroy(struct bnx2i_hba *hba, struct bnx2i_endpoint *ep)
|
|
|
*
|
|
|
* 5706/5708/5709 specific - prepares and posts CONN_OFLD_REQ1/2 KWQE
|
|
|
*/
|
|
|
-static void bnx2i_570x_send_conn_ofld_req(struct bnx2i_hba *hba,
|
|
|
- struct bnx2i_endpoint *ep)
|
|
|
+static int bnx2i_570x_send_conn_ofld_req(struct bnx2i_hba *hba,
|
|
|
+ struct bnx2i_endpoint *ep)
|
|
|
{
|
|
|
struct kwqe *kwqe_arr[2];
|
|
|
struct iscsi_kwqe_conn_offload1 ofld_req1;
|
|
@@ -741,6 +744,7 @@ static void bnx2i_570x_send_conn_ofld_req(struct bnx2i_hba *hba,
|
|
|
dma_addr_t dma_addr;
|
|
|
int num_kwqes = 2;
|
|
|
u32 *ptbl;
|
|
|
+ int rc = -EINVAL;
|
|
|
|
|
|
ofld_req1.hdr.op_code = ISCSI_KWQE_OPCODE_OFFLOAD_CONN1;
|
|
|
ofld_req1.hdr.flags =
|
|
@@ -778,7 +782,9 @@ static void bnx2i_570x_send_conn_ofld_req(struct bnx2i_hba *hba,
|
|
|
ofld_req2.num_additional_wqes = 0;
|
|
|
|
|
|
if (hba->cnic && hba->cnic->submit_kwqes)
|
|
|
- hba->cnic->submit_kwqes(hba->cnic, kwqe_arr, num_kwqes);
|
|
|
+ rc = hba->cnic->submit_kwqes(hba->cnic, kwqe_arr, num_kwqes);
|
|
|
+
|
|
|
+ return rc;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -789,8 +795,8 @@ static void bnx2i_570x_send_conn_ofld_req(struct bnx2i_hba *hba,
|
|
|
*
|
|
|
* 57710 specific - prepares and posts CONN_OFLD_REQ1/2 KWQE
|
|
|
*/
|
|
|
-static void bnx2i_5771x_send_conn_ofld_req(struct bnx2i_hba *hba,
|
|
|
- struct bnx2i_endpoint *ep)
|
|
|
+static int bnx2i_5771x_send_conn_ofld_req(struct bnx2i_hba *hba,
|
|
|
+ struct bnx2i_endpoint *ep)
|
|
|
{
|
|
|
struct kwqe *kwqe_arr[5];
|
|
|
struct iscsi_kwqe_conn_offload1 ofld_req1;
|
|
@@ -799,6 +805,7 @@ static void bnx2i_5771x_send_conn_ofld_req(struct bnx2i_hba *hba,
|
|
|
dma_addr_t dma_addr;
|
|
|
int num_kwqes = 2;
|
|
|
u32 *ptbl;
|
|
|
+ int rc = -EINVAL;
|
|
|
|
|
|
ofld_req1.hdr.op_code = ISCSI_KWQE_OPCODE_OFFLOAD_CONN1;
|
|
|
ofld_req1.hdr.flags =
|
|
@@ -844,7 +851,9 @@ static void bnx2i_5771x_send_conn_ofld_req(struct bnx2i_hba *hba,
|
|
|
num_kwqes += 1;
|
|
|
|
|
|
if (hba->cnic && hba->cnic->submit_kwqes)
|
|
|
- hba->cnic->submit_kwqes(hba->cnic, kwqe_arr, num_kwqes);
|
|
|
+ rc = hba->cnic->submit_kwqes(hba->cnic, kwqe_arr, num_kwqes);
|
|
|
+
|
|
|
+ return rc;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -855,12 +864,16 @@ static void bnx2i_5771x_send_conn_ofld_req(struct bnx2i_hba *hba,
|
|
|
*
|
|
|
* this routine prepares and posts CONN_OFLD_REQ1/2 KWQE
|
|
|
*/
|
|
|
-void bnx2i_send_conn_ofld_req(struct bnx2i_hba *hba, struct bnx2i_endpoint *ep)
|
|
|
+int bnx2i_send_conn_ofld_req(struct bnx2i_hba *hba, struct bnx2i_endpoint *ep)
|
|
|
{
|
|
|
+ int rc;
|
|
|
+
|
|
|
if (test_bit(BNX2I_NX2_DEV_57710, &hba->cnic_dev_type))
|
|
|
- bnx2i_5771x_send_conn_ofld_req(hba, ep);
|
|
|
+ rc = bnx2i_5771x_send_conn_ofld_req(hba, ep);
|
|
|
else
|
|
|
- bnx2i_570x_send_conn_ofld_req(hba, ep);
|
|
|
+ rc = bnx2i_570x_send_conn_ofld_req(hba, ep);
|
|
|
+
|
|
|
+ return rc;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -2165,11 +2178,24 @@ static void bnx2i_process_ofld_cmpl(struct bnx2i_hba *hba,
|
|
|
}
|
|
|
|
|
|
if (ofld_kcqe->completion_status) {
|
|
|
+ ep->state = EP_STATE_OFLD_FAILED;
|
|
|
if (ofld_kcqe->completion_status ==
|
|
|
ISCSI_KCQE_COMPLETION_STATUS_CTX_ALLOC_FAILURE)
|
|
|
- printk(KERN_ALERT "bnx2i: unable to allocate"
|
|
|
- " iSCSI context resources\n");
|
|
|
- ep->state = EP_STATE_OFLD_FAILED;
|
|
|
+ printk(KERN_ALERT "bnx2i (%s): ofld1 cmpl - unable "
|
|
|
+ "to allocate iSCSI context resources\n",
|
|
|
+ hba->netdev->name);
|
|
|
+ else if (ofld_kcqe->completion_status ==
|
|
|
+ ISCSI_KCQE_COMPLETION_STATUS_INVALID_OPCODE)
|
|
|
+ printk(KERN_ALERT "bnx2i (%s): ofld1 cmpl - invalid "
|
|
|
+ "opcode\n", hba->netdev->name);
|
|
|
+ else if (ofld_kcqe->completion_status ==
|
|
|
+ ISCSI_KCQE_COMPLETION_STATUS_CID_BUSY)
|
|
|
+ /* error status code valid only for 5771x chipset */
|
|
|
+ ep->state = EP_STATE_OFLD_FAILED_CID_BUSY;
|
|
|
+ else
|
|
|
+ printk(KERN_ALERT "bnx2i (%s): ofld1 cmpl - invalid "
|
|
|
+ "error code %d\n", hba->netdev->name,
|
|
|
+ ofld_kcqe->completion_status);
|
|
|
} else {
|
|
|
ep->state = EP_STATE_OFLD_COMPL;
|
|
|
cid_addr = ofld_kcqe->iscsi_conn_context_id;
|