diff options
author | Michael Chan <mchan@broadcom.com> | 2012-03-21 11:38:34 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-03-21 21:57:36 -0400 |
commit | 8ec3e70207486bbd3e2d3c0d6b809116ccd4f219 (patch) | |
tree | bda290a8c461fe639fe99a7210e75615c1bef03d /drivers/net/ethernet/broadcom/cnic.c | |
parent | 7ae5289017e5ed5514b2603d157fb54c058a3c82 (diff) |
cnic: Fix parity error code conflict
The recently added parity error handling used an error code that was
already defined for a different error. This could lead to bnx2x
firmware assert. We need to fix this with new error codes that are
defined for parity error only.
Signed-off-by: Michael Chan <mchan@broadcom.com>
Reviewed-by: Eddie Wai <eddie.wai@broadcom.com>
Reviewed-by: Bhanu Prakash Gollapudi <bprakash@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/broadcom/cnic.c')
-rw-r--r-- | drivers/net/ethernet/broadcom/cnic.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/net/ethernet/broadcom/cnic.c b/drivers/net/ethernet/broadcom/cnic.c index 7b65716b8734..c95e7b5e2b85 100644 --- a/drivers/net/ethernet/broadcom/cnic.c +++ b/drivers/net/ethernet/broadcom/cnic.c | |||
@@ -47,6 +47,7 @@ | |||
47 | #include "bnx2x/bnx2x_hsi.h" | 47 | #include "bnx2x/bnx2x_hsi.h" |
48 | #include "../../../scsi/bnx2i/57xx_iscsi_constants.h" | 48 | #include "../../../scsi/bnx2i/57xx_iscsi_constants.h" |
49 | #include "../../../scsi/bnx2i/57xx_iscsi_hsi.h" | 49 | #include "../../../scsi/bnx2i/57xx_iscsi_hsi.h" |
50 | #include "../../../scsi/bnx2fc/bnx2fc_constants.h" | ||
50 | #include "cnic.h" | 51 | #include "cnic.h" |
51 | #include "cnic_defs.h" | 52 | #include "cnic_defs.h" |
52 | 53 | ||
@@ -2547,7 +2548,7 @@ static void cnic_bnx2x_kwqe_err(struct cnic_dev *dev, struct kwqe *kwqe) | |||
2547 | } | 2548 | } |
2548 | kcqe.kcqe_op_flag = kcqe_op << KCQE_FLAGS_OPCODE_SHIFT; | 2549 | kcqe.kcqe_op_flag = kcqe_op << KCQE_FLAGS_OPCODE_SHIFT; |
2549 | kcqe.kcqe_op_flag |= KCQE_FLAGS_LAYER_MASK_L5_FCOE; | 2550 | kcqe.kcqe_op_flag |= KCQE_FLAGS_LAYER_MASK_L5_FCOE; |
2550 | kcqe.kcqe_info1 = FCOE_KCQE_COMPLETION_STATUS_NIC_ERROR; | 2551 | kcqe.kcqe_info1 = FCOE_KCQE_COMPLETION_STATUS_PARITY_ERROR; |
2551 | kcqe.kcqe_info2 = cid; | 2552 | kcqe.kcqe_info2 = cid; |
2552 | kcqe.kcqe_info0 = l5_cid; | 2553 | kcqe.kcqe_info0 = l5_cid; |
2553 | 2554 | ||
@@ -2558,7 +2559,7 @@ static void cnic_bnx2x_kwqe_err(struct cnic_dev *dev, struct kwqe *kwqe) | |||
2558 | 2559 | ||
2559 | kcqe.kcqe_op_flag = (opcode + 0x10) << KCQE_FLAGS_OPCODE_SHIFT; | 2560 | kcqe.kcqe_op_flag = (opcode + 0x10) << KCQE_FLAGS_OPCODE_SHIFT; |
2560 | kcqe.kcqe_op_flag |= KCQE_FLAGS_LAYER_MASK_L5_ISCSI; | 2561 | kcqe.kcqe_op_flag |= KCQE_FLAGS_LAYER_MASK_L5_ISCSI; |
2561 | kcqe.kcqe_info1 = ISCSI_KCQE_COMPLETION_STATUS_NIC_ERROR; | 2562 | kcqe.kcqe_info1 = ISCSI_KCQE_COMPLETION_STATUS_PARITY_ERR; |
2562 | kcqe.kcqe_info2 = cid; | 2563 | kcqe.kcqe_info2 = cid; |
2563 | cnic_get_l5_cid(cp, BNX2X_SW_CID(cid), &kcqe.kcqe_info0); | 2564 | cnic_get_l5_cid(cp, BNX2X_SW_CID(cid), &kcqe.kcqe_info0); |
2564 | 2565 | ||
@@ -2577,7 +2578,7 @@ static void cnic_bnx2x_kwqe_err(struct cnic_dev *dev, struct kwqe *kwqe) | |||
2577 | 2578 | ||
2578 | kcqe.kcqe_op_flag = (kcqe_op << KCQE_FLAGS_OPCODE_SHIFT) | | 2579 | kcqe.kcqe_op_flag = (kcqe_op << KCQE_FLAGS_OPCODE_SHIFT) | |
2579 | KCQE_FLAGS_LAYER_MASK_L4; | 2580 | KCQE_FLAGS_LAYER_MASK_L4; |
2580 | l4kcqe->status = L4_KCQE_COMPLETION_STATUS_NIC_ERROR; | 2581 | l4kcqe->status = L4_KCQE_COMPLETION_STATUS_PARITY_ERROR; |
2581 | l4kcqe->cid = cid; | 2582 | l4kcqe->cid = cid; |
2582 | cnic_get_l5_cid(cp, BNX2X_SW_CID(cid), &l4kcqe->conn_id); | 2583 | cnic_get_l5_cid(cp, BNX2X_SW_CID(cid), &l4kcqe->conn_id); |
2583 | } else { | 2584 | } else { |
@@ -3933,7 +3934,8 @@ static void cnic_cm_process_kcqe(struct cnic_dev *dev, struct kcqe *kcqe) | |||
3933 | case L4_KCQE_OPCODE_VALUE_CONNECT_COMPLETE: | 3934 | case L4_KCQE_OPCODE_VALUE_CONNECT_COMPLETE: |
3934 | if (l4kcqe->status == 0) | 3935 | if (l4kcqe->status == 0) |
3935 | set_bit(SK_F_OFFLD_COMPLETE, &csk->flags); | 3936 | set_bit(SK_F_OFFLD_COMPLETE, &csk->flags); |
3936 | else if (l4kcqe->status == L4_KCQE_COMPLETION_STATUS_NIC_ERROR) | 3937 | else if (l4kcqe->status == |
3938 | L4_KCQE_COMPLETION_STATUS_PARITY_ERROR) | ||
3937 | set_bit(SK_F_HW_ERR, &csk->flags); | 3939 | set_bit(SK_F_HW_ERR, &csk->flags); |
3938 | 3940 | ||
3939 | smp_mb__before_clear_bit(); | 3941 | smp_mb__before_clear_bit(); |
@@ -3946,7 +3948,7 @@ static void cnic_cm_process_kcqe(struct cnic_dev *dev, struct kcqe *kcqe) | |||
3946 | case L4_KCQE_OPCODE_VALUE_RESET_COMP: | 3948 | case L4_KCQE_OPCODE_VALUE_RESET_COMP: |
3947 | case L5CM_RAMROD_CMD_ID_SEARCHER_DELETE: | 3949 | case L5CM_RAMROD_CMD_ID_SEARCHER_DELETE: |
3948 | case L5CM_RAMROD_CMD_ID_TERMINATE_OFFLOAD: | 3950 | case L5CM_RAMROD_CMD_ID_TERMINATE_OFFLOAD: |
3949 | if (l4kcqe->status == L4_KCQE_COMPLETION_STATUS_NIC_ERROR) | 3951 | if (l4kcqe->status == L4_KCQE_COMPLETION_STATUS_PARITY_ERROR) |
3950 | set_bit(SK_F_HW_ERR, &csk->flags); | 3952 | set_bit(SK_F_HW_ERR, &csk->flags); |
3951 | 3953 | ||
3952 | cp->close_conn(csk, opcode); | 3954 | cp->close_conn(csk, opcode); |