Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 289904
b: refs/heads/master
c: 3238a9b
h: refs/heads/master
v: v3
  • Loading branch information
Michael Chan authored and David S. Miller committed Feb 6, 2012
1 parent 0b464c2 commit a064a8e
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 94bf91baf3a16ec274de3cd913be3033c029f853
refs/heads/master: 3238a9be4d7ad95c741bcfe6c147406eeef62d95
38 changes: 34 additions & 4 deletions trunk/drivers/net/ethernet/broadcom/cnic.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* cnic.c: Broadcom CNIC core network driver.
*
* Copyright (c) 2006-2011 Broadcom Corporation
* Copyright (c) 2006-2012 Broadcom Corporation
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -2521,12 +2521,35 @@ static void cnic_bnx2x_kwqe_err(struct cnic_dev *dev, struct kwqe *kwqe)
u32 cid;
u32 opcode = KWQE_OPCODE(kwqe->kwqe_op_flag);
u32 layer_code = kwqe->kwqe_op_flag & KWQE_LAYER_MASK;
u32 kcqe_op;
int ulp_type;

cid = kwqe->kwqe_info0;
memset(&kcqe, 0, sizeof(kcqe));

if (layer_code == KWQE_FLAGS_LAYER_MASK_L5_ISCSI) {
if (layer_code == KWQE_FLAGS_LAYER_MASK_L5_FCOE) {
u32 l5_cid = 0;

ulp_type = CNIC_ULP_FCOE;
if (opcode == FCOE_KWQE_OPCODE_DISABLE_CONN) {
struct fcoe_kwqe_conn_enable_disable *req;

req = (struct fcoe_kwqe_conn_enable_disable *) kwqe;
kcqe_op = FCOE_KCQE_OPCODE_DISABLE_CONN;
cid = req->context_id;
l5_cid = req->conn_id;
} else if (opcode == FCOE_KWQE_OPCODE_DESTROY) {
kcqe_op = FCOE_KCQE_OPCODE_DESTROY_FUNC;
} else {
return;
}
kcqe.kcqe_op_flag = kcqe_op << KCQE_FLAGS_OPCODE_SHIFT;
kcqe.kcqe_op_flag |= KCQE_FLAGS_LAYER_MASK_L5_FCOE;
kcqe.kcqe_info1 = FCOE_KCQE_COMPLETION_STATUS_NIC_ERROR;
kcqe.kcqe_info2 = cid;
kcqe.kcqe_info0 = l5_cid;

} else if (layer_code == KWQE_FLAGS_LAYER_MASK_L5_ISCSI) {
ulp_type = CNIC_ULP_ISCSI;
if (opcode == ISCSI_KWQE_OPCODE_UPDATE_CONN)
cid = kwqe->kwqe_info1;
Expand All @@ -2539,7 +2562,6 @@ static void cnic_bnx2x_kwqe_err(struct cnic_dev *dev, struct kwqe *kwqe)

} else if (layer_code == KWQE_FLAGS_LAYER_MASK_L4) {
struct l4_kcq *l4kcqe = (struct l4_kcq *) &kcqe;
u32 kcqe_op;

ulp_type = CNIC_ULP_L4;
if (opcode == L4_KWQE_OPCODE_VALUE_CONNECT1)
Expand Down Expand Up @@ -2686,9 +2708,17 @@ static int cnic_submit_bnx2x_fcoe_kwqes(struct cnic_dev *dev,
opcode);
break;
}
if (ret < 0)
if (ret < 0) {
netdev_err(dev->netdev, "KWQE(0x%x) failed\n",
opcode);

/* Possibly bnx2x parity error, send completion
* to ulp drivers with error code to speed up
* cleanup and reset recovery.
*/
if (ret == -EIO || ret == -EAGAIN)
cnic_bnx2x_kwqe_err(dev, kwqe);
}
i += work;
}
return 0;
Expand Down
3 changes: 2 additions & 1 deletion trunk/drivers/net/ethernet/broadcom/cnic_defs.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

/* cnic.c: Broadcom CNIC core network driver.
*
* Copyright (c) 2006-2009 Broadcom Corporation
* Copyright (c) 2006-2012 Broadcom Corporation
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand Down Expand Up @@ -69,6 +69,7 @@

#define FCOE_KCQE_COMPLETION_STATUS_ERROR (0x1)
#define FCOE_KCQE_COMPLETION_STATUS_CTX_ALLOC_FAILURE (0x3)
#define FCOE_KCQE_COMPLETION_STATUS_NIC_ERROR (0x5)

/* KCQ (kernel completion queue) response op codes */
#define L4_KCQE_OPCODE_VALUE_CLOSE_COMP (53)
Expand Down

0 comments on commit a064a8e

Please sign in to comment.