netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 1/4] cnic: Fix occasional NULL pointer dereference during reboot.
@ 2012-06-28  1:08 Michael Chan
  2012-06-28  1:08 ` [PATCH net-next 2/4] cnic: Read bnx2x function number from internal register Michael Chan
  2012-06-28  4:28 ` [PATCH net-next 1/4] cnic: Fix occasional NULL pointer dereference during reboot David Miller
  0 siblings, 2 replies; 12+ messages in thread
From: Michael Chan @ 2012-06-28  1:08 UTC (permalink / raw)
  To: davem; +Cc: netdev

We register with bnx2x before we allocate ctx_tbl structure, so it is
possible for bnx2x to call cnic_ctl before the structure is allocated.
This can sometimes cause NULL pointer dereference of cp->ctx_tbl.  We
fix this by adding simple checking for valid state before proceeding.
The cnic_ctl call is RCU protected so we don't have to deal with race
conditions.

Because of the additional checking, we need to finish the shutdown
before clearing the CNIC_UP flag.

Signed-off-by: Michael Chan <mchan@broadcom.com>
---
 drivers/net/ethernet/broadcom/cnic.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/cnic.c b/drivers/net/ethernet/broadcom/cnic.c
index 0e9be2b..31b05ad 100644
--- a/drivers/net/ethernet/broadcom/cnic.c
+++ b/drivers/net/ethernet/broadcom/cnic.c
@@ -291,6 +291,9 @@ static int cnic_get_l5_cid(struct cnic_local *cp, u32 cid, u32 *l5_cid)
 {
 	u32 i;
 
+	if (!cp->ctx_tbl)
+		return -EINVAL;
+
 	for (i = 0; i < cp->max_cid_space; i++) {
 		if (cp->ctx_tbl[i].cid == cid) {
 			*l5_cid = i;
@@ -3220,6 +3223,9 @@ static int cnic_ctl(void *data, struct cnic_ctl_info *info)
 		u32 l5_cid;
 		struct cnic_local *cp = dev->cnic_priv;
 
+		if (!test_bit(CNIC_F_CNIC_UP, &dev->flags))
+			break;
+
 		if (cnic_get_l5_cid(cp, cid, &l5_cid) == 0) {
 			struct cnic_context *ctx = &cp->ctx_tbl[l5_cid];
 
@@ -4253,8 +4259,6 @@ static int cnic_cm_shutdown(struct cnic_dev *dev)
 	struct cnic_local *cp = dev->cnic_priv;
 	int i;
 
-	cp->stop_cm(dev);
-
 	if (!cp->csk_tbl)
 		return 0;
 
@@ -5290,6 +5294,7 @@ static void cnic_stop_hw(struct cnic_dev *dev)
 			i++;
 		}
 		cnic_shutdown_rings(dev);
+		cp->stop_cm(dev);
 		clear_bit(CNIC_F_CNIC_UP, &dev->flags);
 		RCU_INIT_POINTER(cp->ulp_ops[CNIC_ULP_L4], NULL);
 		synchronize_rcu();
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH net-next 2/4] cnic: Read bnx2x function number from internal register
  2012-06-28  1:08 [PATCH net-next 1/4] cnic: Fix occasional NULL pointer dereference during reboot Michael Chan
@ 2012-06-28  1:08 ` Michael Chan
  2012-06-28  1:08   ` [PATCH net-next 3/4] cnic: Remove uio mem[0] Michael Chan
  2012-06-28  4:28   ` [PATCH net-next 2/4] cnic: Read bnx2x function number from internal register David Miller
  2012-06-28  4:28 ` [PATCH net-next 1/4] cnic: Fix occasional NULL pointer dereference during reboot David Miller
  1 sibling, 2 replies; 12+ messages in thread
From: Michael Chan @ 2012-06-28  1:08 UTC (permalink / raw)
  To: davem; +Cc: netdev

From: Eddie Wai <eddie.wai@broadcom.com>

so that it will work on any hypervisor.

Signed-off-by: Eddie Wai <eddie.wai@broadcom.com>
Signed-off-by: Michael Chan <mchan@broadcom.com>
---
 drivers/net/ethernet/broadcom/cnic.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/cnic.c b/drivers/net/ethernet/broadcom/cnic.c
index 31b05ad..5980443 100644
--- a/drivers/net/ethernet/broadcom/cnic.c
+++ b/drivers/net/ethernet/broadcom/cnic.c
@@ -4988,8 +4988,14 @@ static int cnic_start_bnx2x_hw(struct cnic_dev *dev)
 	cp->port_mode = CHIP_PORT_MODE_NONE;
 
 	if (BNX2X_CHIP_IS_E2_PLUS(cp->chip_id)) {
-		u32 val = CNIC_RD(dev, MISC_REG_PORT4MODE_EN_OVWR);
+		u32 val;
+
+		pci_read_config_dword(dev->pcidev, PCICFG_ME_REGISTER, &val);
+		cp->func = (u8) ((val & ME_REG_ABS_PF_NUM) >>
+				 ME_REG_ABS_PF_NUM_SHIFT);
+		func = CNIC_FUNC(cp);
 
+		val = CNIC_RD(dev, MISC_REG_PORT4MODE_EN_OVWR);
 		if (!(val & 1))
 			val = CNIC_RD(dev, MISC_REG_PORT4MODE_EN);
 		else
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH net-next 3/4] cnic: Remove uio mem[0].
  2012-06-28  1:08 ` [PATCH net-next 2/4] cnic: Read bnx2x function number from internal register Michael Chan
@ 2012-06-28  1:08   ` Michael Chan
  2012-06-28  1:08     ` [PATCH net-next 4/4] cnic: Handle RAMROD_CMD_ID_CLOSE error Michael Chan
  2012-06-28  4:29     ` [PATCH net-next 3/4] cnic: Remove uio mem[0] David Miller
  2012-06-28  4:28   ` [PATCH net-next 2/4] cnic: Read bnx2x function number from internal register David Miller
  1 sibling, 2 replies; 12+ messages in thread
From: Michael Chan @ 2012-06-28  1:08 UTC (permalink / raw)
  To: davem; +Cc: netdev

This memory region is no longer used.  Userspace gets the BAR address
directly from sysfs.

Signed-off-by: Michael Chan <mchan@broadcom.com>
---
 drivers/net/ethernet/broadcom/cnic.c |    5 +----
 1 files changed, 1 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/cnic.c b/drivers/net/ethernet/broadcom/cnic.c
index 5980443..ec43df1 100644
--- a/drivers/net/ethernet/broadcom/cnic.c
+++ b/drivers/net/ethernet/broadcom/cnic.c
@@ -1063,10 +1063,7 @@ static int cnic_init_uio(struct cnic_dev *dev)
 
 	uinfo = &udev->cnic_uinfo;
 
-	uinfo->mem[0].addr = dev->netdev->base_addr;
-	uinfo->mem[0].internal_addr = dev->regview;
-	uinfo->mem[0].size = dev->netdev->mem_end - dev->netdev->mem_start;
-	uinfo->mem[0].memtype = UIO_MEM_PHYS;
+	uinfo->mem[0].memtype = UIO_MEM_NONE;
 
 	if (test_bit(CNIC_F_BNX2_CLASS, &dev->flags)) {
 		uinfo->mem[1].addr = (unsigned long) cp->status_blk.gen &
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH net-next 4/4] cnic: Handle RAMROD_CMD_ID_CLOSE error.
  2012-06-28  1:08   ` [PATCH net-next 3/4] cnic: Remove uio mem[0] Michael Chan
@ 2012-06-28  1:08     ` Michael Chan
  2012-06-28  1:08       ` [PATCH net-next 1/2] bnx2: Add "fall through" comments Michael Chan
  2012-06-28  4:29       ` [PATCH net-next 4/4] cnic: Handle RAMROD_CMD_ID_CLOSE error David Miller
  2012-06-28  4:29     ` [PATCH net-next 3/4] cnic: Remove uio mem[0] David Miller
  1 sibling, 2 replies; 12+ messages in thread
From: Michael Chan @ 2012-06-28  1:08 UTC (permalink / raw)
  To: davem; +Cc: netdev

From: Eddie Wai <eddie.wai@broadcom.com>

If firmware returns error status, proceed to close the iSCSI connection.
Update version to 2.5.11.

Signed-off-by: Eddie Wai <eddie.wai@broadcom.com>
Signed-off-by: Michael Chan <mchan@broadcom.com>
---
 drivers/net/ethernet/broadcom/cnic.c    |    9 +++++++++
 drivers/net/ethernet/broadcom/cnic_if.h |    4 ++--
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/cnic.c b/drivers/net/ethernet/broadcom/cnic.c
index ec43df1..f897306 100644
--- a/drivers/net/ethernet/broadcom/cnic.c
+++ b/drivers/net/ethernet/broadcom/cnic.c
@@ -3953,6 +3953,15 @@ static void cnic_cm_process_kcqe(struct cnic_dev *dev, struct kcqe *kcqe)
 		cnic_cm_upcall(cp, csk, opcode);
 		break;
 
+	case L5CM_RAMROD_CMD_ID_CLOSE:
+		if (l4kcqe->status != 0) {
+			netdev_warn(dev->netdev, "RAMROD CLOSE compl with "
+				    "status 0x%x\n", l4kcqe->status);
+			opcode = L4_KCQE_OPCODE_VALUE_CLOSE_COMP;
+			/* Fall through */
+		} else {
+			break;
+		}
 	case L4_KCQE_OPCODE_VALUE_RESET_RECEIVED:
 	case L4_KCQE_OPCODE_VALUE_CLOSE_COMP:
 	case L4_KCQE_OPCODE_VALUE_RESET_COMP:
diff --git a/drivers/net/ethernet/broadcom/cnic_if.h b/drivers/net/ethernet/broadcom/cnic_if.h
index d63d455..54f68f0 100644
--- a/drivers/net/ethernet/broadcom/cnic_if.h
+++ b/drivers/net/ethernet/broadcom/cnic_if.h
@@ -14,8 +14,8 @@
 
 #include "bnx2x/bnx2x_mfw_req.h"
 
-#define CNIC_MODULE_VERSION	"2.5.10"
-#define CNIC_MODULE_RELDATE	"March 21, 2012"
+#define CNIC_MODULE_VERSION	"2.5.11"
+#define CNIC_MODULE_RELDATE	"June 27, 2012"
 
 #define CNIC_ULP_RDMA		0
 #define CNIC_ULP_ISCSI		1
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH net-next 1/2] bnx2: Add "fall through" comments
  2012-06-28  1:08     ` [PATCH net-next 4/4] cnic: Handle RAMROD_CMD_ID_CLOSE error Michael Chan
@ 2012-06-28  1:08       ` Michael Chan
  2012-06-28  1:08         ` [PATCH net-next 2/2] bnx2: Add missing netif_tx_disable() in bnx2_close() Michael Chan
  2012-06-28  4:28         ` [PATCH net-next 1/2] bnx2: Add "fall through" comments David Miller
  2012-06-28  4:29       ` [PATCH net-next 4/4] cnic: Handle RAMROD_CMD_ID_CLOSE error David Miller
  1 sibling, 2 replies; 12+ messages in thread
From: Michael Chan @ 2012-06-28  1:08 UTC (permalink / raw)
  To: davem; +Cc: netdev

to indicate that the mising break statements are intended.

Signed-off-by: Michael Chan <mchan@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnx2.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnx2.c b/drivers/net/ethernet/broadcom/bnx2.c
index 9b69a62..e6116ec 100644
--- a/drivers/net/ethernet/broadcom/bnx2.c
+++ b/drivers/net/ethernet/broadcom/bnx2.c
@@ -1972,22 +1972,26 @@ bnx2_remote_phy_event(struct bnx2 *bp)
 		switch (speed) {
 			case BNX2_LINK_STATUS_10HALF:
 				bp->duplex = DUPLEX_HALF;
+				/* fall through */
 			case BNX2_LINK_STATUS_10FULL:
 				bp->line_speed = SPEED_10;
 				break;
 			case BNX2_LINK_STATUS_100HALF:
 				bp->duplex = DUPLEX_HALF;
+				/* fall through */
 			case BNX2_LINK_STATUS_100BASE_T4:
 			case BNX2_LINK_STATUS_100FULL:
 				bp->line_speed = SPEED_100;
 				break;
 			case BNX2_LINK_STATUS_1000HALF:
 				bp->duplex = DUPLEX_HALF;
+				/* fall through */
 			case BNX2_LINK_STATUS_1000FULL:
 				bp->line_speed = SPEED_1000;
 				break;
 			case BNX2_LINK_STATUS_2500HALF:
 				bp->duplex = DUPLEX_HALF;
+				/* fall through */
 			case BNX2_LINK_STATUS_2500FULL:
 				bp->line_speed = SPEED_2500;
 				break;
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH net-next 2/2] bnx2: Add missing netif_tx_disable() in bnx2_close()
  2012-06-28  1:08       ` [PATCH net-next 1/2] bnx2: Add "fall through" comments Michael Chan
@ 2012-06-28  1:08         ` Michael Chan
  2012-06-28  4:28           ` David Miller
  2012-06-28  4:28         ` [PATCH net-next 1/2] bnx2: Add "fall through" comments David Miller
  1 sibling, 1 reply; 12+ messages in thread
From: Michael Chan @ 2012-06-28  1:08 UTC (permalink / raw)
  To: davem; +Cc: netdev

to stop all tx queues.  Update version to 2.2.3.

Signed-off-by: Michael Chan <mchan@broadcom.com>
---
 drivers/net/ethernet/broadcom/bnx2.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnx2.c b/drivers/net/ethernet/broadcom/bnx2.c
index e6116ec..9eb7624 100644
--- a/drivers/net/ethernet/broadcom/bnx2.c
+++ b/drivers/net/ethernet/broadcom/bnx2.c
@@ -58,8 +58,8 @@
 #include "bnx2_fw.h"
 
 #define DRV_MODULE_NAME		"bnx2"
-#define DRV_MODULE_VERSION	"2.2.2"
-#define DRV_MODULE_RELDATE	"June 16, 2012"
+#define DRV_MODULE_VERSION	"2.2.3"
+#define DRV_MODULE_RELDATE	"June 27, 2012"
 #define FW_MIPS_FILE_06		"bnx2/bnx2-mips-06-6.2.3.fw"
 #define FW_RV2P_FILE_06		"bnx2/bnx2-rv2p-06-6.0.15.fw"
 #define FW_MIPS_FILE_09		"bnx2/bnx2-mips-09-6.2.1b.fw"
@@ -6703,6 +6703,7 @@ bnx2_close(struct net_device *dev)
 
 	bnx2_disable_int_sync(bp);
 	bnx2_napi_disable(bp);
+	netif_tx_disable(dev);
 	del_timer_sync(&bp->timer);
 	bnx2_shutdown_chip(bp);
 	bnx2_free_irq(bp);
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 1/2] bnx2: Add "fall through" comments
  2012-06-28  1:08       ` [PATCH net-next 1/2] bnx2: Add "fall through" comments Michael Chan
  2012-06-28  1:08         ` [PATCH net-next 2/2] bnx2: Add missing netif_tx_disable() in bnx2_close() Michael Chan
@ 2012-06-28  4:28         ` David Miller
  1 sibling, 0 replies; 12+ messages in thread
From: David Miller @ 2012-06-28  4:28 UTC (permalink / raw)
  To: mchan; +Cc: netdev

From: "Michael Chan" <mchan@broadcom.com>
Date: Wed, 27 Jun 2012 18:08:23 -0700

> to indicate that the mising break statements are intended.
> 
> Signed-off-by: Michael Chan <mchan@broadcom.com>

Applied.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 2/2] bnx2: Add missing netif_tx_disable() in bnx2_close()
  2012-06-28  1:08         ` [PATCH net-next 2/2] bnx2: Add missing netif_tx_disable() in bnx2_close() Michael Chan
@ 2012-06-28  4:28           ` David Miller
  0 siblings, 0 replies; 12+ messages in thread
From: David Miller @ 2012-06-28  4:28 UTC (permalink / raw)
  To: mchan; +Cc: netdev

From: "Michael Chan" <mchan@broadcom.com>
Date: Wed, 27 Jun 2012 18:08:24 -0700

> to stop all tx queues.  Update version to 2.2.3.
> 
> Signed-off-by: Michael Chan <mchan@broadcom.com>

Applied.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 1/4] cnic: Fix occasional NULL pointer dereference during reboot.
  2012-06-28  1:08 [PATCH net-next 1/4] cnic: Fix occasional NULL pointer dereference during reboot Michael Chan
  2012-06-28  1:08 ` [PATCH net-next 2/4] cnic: Read bnx2x function number from internal register Michael Chan
@ 2012-06-28  4:28 ` David Miller
  1 sibling, 0 replies; 12+ messages in thread
From: David Miller @ 2012-06-28  4:28 UTC (permalink / raw)
  To: mchan; +Cc: netdev

From: "Michael Chan" <mchan@broadcom.com>
Date: Wed, 27 Jun 2012 18:08:19 -0700

> We register with bnx2x before we allocate ctx_tbl structure, so it is
> possible for bnx2x to call cnic_ctl before the structure is allocated.
> This can sometimes cause NULL pointer dereference of cp->ctx_tbl.  We
> fix this by adding simple checking for valid state before proceeding.
> The cnic_ctl call is RCU protected so we don't have to deal with race
> conditions.
> 
> Because of the additional checking, we need to finish the shutdown
> before clearing the CNIC_UP flag.
> 
> Signed-off-by: Michael Chan <mchan@broadcom.com>

Applied.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 2/4] cnic: Read bnx2x function number from internal register
  2012-06-28  1:08 ` [PATCH net-next 2/4] cnic: Read bnx2x function number from internal register Michael Chan
  2012-06-28  1:08   ` [PATCH net-next 3/4] cnic: Remove uio mem[0] Michael Chan
@ 2012-06-28  4:28   ` David Miller
  1 sibling, 0 replies; 12+ messages in thread
From: David Miller @ 2012-06-28  4:28 UTC (permalink / raw)
  To: mchan; +Cc: netdev

From: "Michael Chan" <mchan@broadcom.com>
Date: Wed, 27 Jun 2012 18:08:20 -0700

> From: Eddie Wai <eddie.wai@broadcom.com>
> 
> so that it will work on any hypervisor.
> 
> Signed-off-by: Eddie Wai <eddie.wai@broadcom.com>
> Signed-off-by: Michael Chan <mchan@broadcom.com>

Applied.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 3/4] cnic: Remove uio mem[0].
  2012-06-28  1:08   ` [PATCH net-next 3/4] cnic: Remove uio mem[0] Michael Chan
  2012-06-28  1:08     ` [PATCH net-next 4/4] cnic: Handle RAMROD_CMD_ID_CLOSE error Michael Chan
@ 2012-06-28  4:29     ` David Miller
  1 sibling, 0 replies; 12+ messages in thread
From: David Miller @ 2012-06-28  4:29 UTC (permalink / raw)
  To: mchan; +Cc: netdev

From: "Michael Chan" <mchan@broadcom.com>
Date: Wed, 27 Jun 2012 18:08:21 -0700

> This memory region is no longer used.  Userspace gets the BAR address
> directly from sysfs.
> 
> Signed-off-by: Michael Chan <mchan@broadcom.com>

Applied.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next 4/4] cnic: Handle RAMROD_CMD_ID_CLOSE error.
  2012-06-28  1:08     ` [PATCH net-next 4/4] cnic: Handle RAMROD_CMD_ID_CLOSE error Michael Chan
  2012-06-28  1:08       ` [PATCH net-next 1/2] bnx2: Add "fall through" comments Michael Chan
@ 2012-06-28  4:29       ` David Miller
  1 sibling, 0 replies; 12+ messages in thread
From: David Miller @ 2012-06-28  4:29 UTC (permalink / raw)
  To: mchan; +Cc: netdev

From: "Michael Chan" <mchan@broadcom.com>
Date: Wed, 27 Jun 2012 18:08:22 -0700

> From: Eddie Wai <eddie.wai@broadcom.com>
> 
> If firmware returns error status, proceed to close the iSCSI connection.
> Update version to 2.5.11.
> 
> Signed-off-by: Eddie Wai <eddie.wai@broadcom.com>
> Signed-off-by: Michael Chan <mchan@broadcom.com>

Applied.

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2012-06-28  4:29 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-06-28  1:08 [PATCH net-next 1/4] cnic: Fix occasional NULL pointer dereference during reboot Michael Chan
2012-06-28  1:08 ` [PATCH net-next 2/4] cnic: Read bnx2x function number from internal register Michael Chan
2012-06-28  1:08   ` [PATCH net-next 3/4] cnic: Remove uio mem[0] Michael Chan
2012-06-28  1:08     ` [PATCH net-next 4/4] cnic: Handle RAMROD_CMD_ID_CLOSE error Michael Chan
2012-06-28  1:08       ` [PATCH net-next 1/2] bnx2: Add "fall through" comments Michael Chan
2012-06-28  1:08         ` [PATCH net-next 2/2] bnx2: Add missing netif_tx_disable() in bnx2_close() Michael Chan
2012-06-28  4:28           ` David Miller
2012-06-28  4:28         ` [PATCH net-next 1/2] bnx2: Add "fall through" comments David Miller
2012-06-28  4:29       ` [PATCH net-next 4/4] cnic: Handle RAMROD_CMD_ID_CLOSE error David Miller
2012-06-28  4:29     ` [PATCH net-next 3/4] cnic: Remove uio mem[0] David Miller
2012-06-28  4:28   ` [PATCH net-next 2/4] cnic: Read bnx2x function number from internal register David Miller
2012-06-28  4:28 ` [PATCH net-next 1/4] cnic: Fix occasional NULL pointer dereference during reboot David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).