diff options
| -rw-r--r-- | drivers/net/ethernet/broadcom/cnic.c | 17 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/cnic.h | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/cnic_defs.h | 1 |
3 files changed, 13 insertions, 7 deletions
diff --git a/drivers/net/ethernet/broadcom/cnic.c b/drivers/net/ethernet/broadcom/cnic.c index 73060f4a2f5f..6f10c6939834 100644 --- a/drivers/net/ethernet/broadcom/cnic.c +++ b/drivers/net/ethernet/broadcom/cnic.c | |||
| @@ -1875,12 +1875,12 @@ static int cnic_bnx2x_destroy_ramrod(struct cnic_dev *dev, u32 l5_cid) | |||
| 1875 | hw_cid, NONE_CONNECTION_TYPE, &l5_data); | 1875 | hw_cid, NONE_CONNECTION_TYPE, &l5_data); |
| 1876 | 1876 | ||
| 1877 | if (ret == 0) { | 1877 | if (ret == 0) { |
| 1878 | wait_event(ctx->waitq, ctx->wait_cond); | 1878 | wait_event_timeout(ctx->waitq, ctx->wait_cond, CNIC_RAMROD_TMO); |
| 1879 | if (unlikely(test_bit(CTX_FL_CID_ERROR, &ctx->ctx_flags))) | 1879 | if (unlikely(test_bit(CTX_FL_CID_ERROR, &ctx->ctx_flags))) |
| 1880 | return -EBUSY; | 1880 | return -EBUSY; |
| 1881 | } | 1881 | } |
| 1882 | 1882 | ||
| 1883 | return ret; | 1883 | return 0; |
| 1884 | } | 1884 | } |
| 1885 | 1885 | ||
| 1886 | static int cnic_bnx2x_iscsi_destroy(struct cnic_dev *dev, struct kwqe *kwqe) | 1886 | static int cnic_bnx2x_iscsi_destroy(struct cnic_dev *dev, struct kwqe *kwqe) |
| @@ -2428,17 +2428,20 @@ static int cnic_bnx2x_fcoe_destroy(struct cnic_dev *dev, struct kwqe *kwqe) | |||
| 2428 | init_waitqueue_head(&ctx->waitq); | 2428 | init_waitqueue_head(&ctx->waitq); |
| 2429 | ctx->wait_cond = 0; | 2429 | ctx->wait_cond = 0; |
| 2430 | 2430 | ||
| 2431 | memset(&kcqe, 0, sizeof(kcqe)); | ||
| 2432 | kcqe.completion_status = FCOE_KCQE_COMPLETION_STATUS_ERROR; | ||
| 2431 | memset(&l5_data, 0, sizeof(l5_data)); | 2433 | memset(&l5_data, 0, sizeof(l5_data)); |
| 2432 | ret = cnic_submit_kwqe_16(dev, FCOE_RAMROD_CMD_ID_TERMINATE_CONN, cid, | 2434 | ret = cnic_submit_kwqe_16(dev, FCOE_RAMROD_CMD_ID_TERMINATE_CONN, cid, |
| 2433 | FCOE_CONNECTION_TYPE, &l5_data); | 2435 | FCOE_CONNECTION_TYPE, &l5_data); |
| 2434 | if (ret == 0) { | 2436 | if (ret == 0) { |
| 2435 | wait_event(ctx->waitq, ctx->wait_cond); | 2437 | wait_event_timeout(ctx->waitq, ctx->wait_cond, CNIC_RAMROD_TMO); |
| 2436 | set_bit(CTX_FL_DELETE_WAIT, &ctx->ctx_flags); | 2438 | if (ctx->wait_cond) |
| 2437 | queue_delayed_work(cnic_wq, &cp->delete_task, | 2439 | kcqe.completion_status = 0; |
| 2438 | msecs_to_jiffies(2000)); | ||
| 2439 | } | 2440 | } |
| 2440 | 2441 | ||
| 2441 | memset(&kcqe, 0, sizeof(kcqe)); | 2442 | set_bit(CTX_FL_DELETE_WAIT, &ctx->ctx_flags); |
| 2443 | queue_delayed_work(cnic_wq, &cp->delete_task, msecs_to_jiffies(2000)); | ||
| 2444 | |||
| 2442 | kcqe.op_code = FCOE_KCQE_OPCODE_DESTROY_CONN; | 2445 | kcqe.op_code = FCOE_KCQE_OPCODE_DESTROY_CONN; |
| 2443 | kcqe.fcoe_conn_id = req->conn_id; | 2446 | kcqe.fcoe_conn_id = req->conn_id; |
| 2444 | kcqe.fcoe_conn_context_id = cid; | 2447 | kcqe.fcoe_conn_context_id = cid; |
diff --git a/drivers/net/ethernet/broadcom/cnic.h b/drivers/net/ethernet/broadcom/cnic.h index 15b1c09f1d5c..30328097f516 100644 --- a/drivers/net/ethernet/broadcom/cnic.h +++ b/drivers/net/ethernet/broadcom/cnic.h | |||
| @@ -474,5 +474,7 @@ struct bnx2x_bd_chain_next { | |||
| 474 | MAX_STAT_COUNTER_ID_E1)) | 474 | MAX_STAT_COUNTER_ID_E1)) |
| 475 | #endif | 475 | #endif |
| 476 | 476 | ||
| 477 | #define CNIC_RAMROD_TMO (HZ / 4) | ||
| 478 | |||
| 477 | #endif | 479 | #endif |
| 478 | 480 | ||
diff --git a/drivers/net/ethernet/broadcom/cnic_defs.h b/drivers/net/ethernet/broadcom/cnic_defs.h index e47d21076767..239de898f071 100644 --- a/drivers/net/ethernet/broadcom/cnic_defs.h +++ b/drivers/net/ethernet/broadcom/cnic_defs.h | |||
| @@ -67,6 +67,7 @@ | |||
| 67 | #define FCOE_KWQE_OPCODE_DESTROY (10) | 67 | #define FCOE_KWQE_OPCODE_DESTROY (10) |
| 68 | #define FCOE_KWQE_OPCODE_STAT (11) | 68 | #define FCOE_KWQE_OPCODE_STAT (11) |
| 69 | 69 | ||
| 70 | #define FCOE_KCQE_COMPLETION_STATUS_ERROR (0x1) | ||
| 70 | #define FCOE_KCQE_COMPLETION_STATUS_CTX_ALLOC_FAILURE (0x3) | 71 | #define FCOE_KCQE_COMPLETION_STATUS_CTX_ALLOC_FAILURE (0x3) |
| 71 | 72 | ||
| 72 | /* KCQ (kernel completion queue) response op codes */ | 73 | /* KCQ (kernel completion queue) response op codes */ |
