[net-2.6 PATCH 1/3] qlge:Fix crash caused by mailbox execution on wedged chip.

Subsystems: networking drivers, the rest

STALE5510d

11 messages, 3 authors, 2011-07-02 · open the first message on its own page

[net-2.6 PATCH 1/3] qlge:Fix crash caused by mailbox execution on wedged chip.

From: Ron Mercer <hidden>
Date: 2011-06-23 18:11:34

From: Jitendra Kalsaria <redacted>

When we are in a recover process from a chip fatal error,
	driver should skip over execution of mailbox commands during
	resetting chip.

Signed-off-by: Jitendra Kalsaria <redacted>
Signed-off-by: Ron Mercer <redacted>
---
 drivers/net/qlge/qlge.h      |    1 +
 drivers/net/qlge/qlge_main.c |   20 +++++++++++++++-----
 2 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/drivers/net/qlge/qlge.h b/drivers/net/qlge/qlge.h
index d328507..b2c8612 100644
--- a/drivers/net/qlge/qlge.h
+++ b/drivers/net/qlge/qlge.h
@@ -1996,6 +1996,7 @@ enum {
 	QL_LB_LINK_UP = 10,
 	QL_FRC_COREDUMP = 11,
 	QL_EEH_FATAL = 12,
+	QL_ASIC_RECOVERY = 14, /* We are in ascic recovery. */
 };
 
 /* link_status bit definitions */
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index 930ae45..4fbefcf 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -2152,6 +2152,10 @@ void ql_queue_asic_error(struct ql_adapter *qdev)
 	 * thread
 	 */
 	clear_bit(QL_ADAPTER_UP, &qdev->flags);
+	/* Set asic recovery bit to indicate reset process that we are
+	 * in fatal error recovery process rather than normal close
+	 */
+	set_bit(QL_ASIC_RECOVERY, &qdev->flags);
 	queue_delayed_work(qdev->workqueue, &qdev->asic_reset_work, 0);
 }
 
@@ -3818,11 +3822,17 @@ static int ql_adapter_reset(struct ql_adapter *qdev)
 	end_jiffies = jiffies +
 		max((unsigned long)1, usecs_to_jiffies(30));
 
-	/* Stop management traffic. */
-	ql_mb_set_mgmnt_traffic_ctl(qdev, MB_SET_MPI_TFK_STOP);
+	/* Check if bit is set then skip the mailbox command and
+	 * clear the bit, else we are in normal reset process.
+	 */
+	if (!test_bit(QL_ASIC_RECOVERY, &qdev->flags)) {
+		/* Stop management traffic. */
+		ql_mb_set_mgmnt_traffic_ctl(qdev, MB_SET_MPI_TFK_STOP);
 
-	/* Wait for the NIC and MGMNT FIFOs to empty. */
-	ql_wait_fifo_empty(qdev);
+		/* Wait for the NIC and MGMNT FIFOs to empty. */
+		ql_wait_fifo_empty(qdev);
+	} else
+		clear_bit(QL_ASIC_RECOVERY, &qdev->flags);
 
 	ql_write32(qdev, RST_FO, (RST_FO_FR << 16) | RST_FO_FR);
 
-- 
1.6.0.2

[net-2.6 PATCH 3/3] qlge:Version change to v1.00.00.29

From: Ron Mercer <hidden>
Date: 2011-06-23 18:11:16

From: Jitendra Kalsaria <redacted>

Signed-off-by: Jitendra Kalsaria <redacted>
Signed-off-by: Ron Mercer <redacted>
---
 drivers/net/qlge/qlge.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/net/qlge/qlge.h b/drivers/net/qlge/qlge.h
index b2c8612..ca306fd 100644
--- a/drivers/net/qlge/qlge.h
+++ b/drivers/net/qlge/qlge.h
@@ -16,7 +16,7 @@
  */
 #define DRV_NAME  	"qlge"
 #define DRV_STRING 	"QLogic 10 Gigabit PCI-E Ethernet Driver "
-#define DRV_VERSION	"v1.00.00.27.00.00-01"
+#define DRV_VERSION	"v1.00.00.29.00.00-01"
 
 #define WQ_ADDR_ALIGN	0x3	/* 4 byte alignment */
 
-- 
1.6.0.2

[net-2.6 PATCH 2/3] qlge:Fix printk priority so chip fatal errors are always reported.

From: Ron Mercer <hidden>
Date: 2011-06-23 18:11:22

From: Jitendra Kalsaria <redacted>

Precedence of the printk should be at higher level so chip
	fatal errors are always reported.

Signed-off-by: Jitendra Kalsaria <redacted>
Signed-off-by: Ron Mercer <redacted>
---
 drivers/net/qlge/qlge_main.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index 4fbefcf..66274ab 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -2170,7 +2170,7 @@ static void ql_process_chip_ae_intr(struct ql_adapter *qdev,
 		return;
 
 	case CAM_LOOKUP_ERR_EVENT:
-		netif_err(qdev, link, qdev->ndev,
+		netif_err(qdev, drv, qdev->ndev,
 			  "Multiple CAM hits lookup occurred.\n");
 		netif_err(qdev, drv, qdev->ndev,
 			  "This event shouldn't occur.\n");
@@ -2178,13 +2178,13 @@ static void ql_process_chip_ae_intr(struct ql_adapter *qdev,
 		return;
 
 	case SOFT_ECC_ERROR_EVENT:
-		netif_err(qdev, rx_err, qdev->ndev,
+		netif_err(qdev, drv, qdev->ndev,
 			  "Soft ECC error detected.\n");
 		ql_queue_asic_error(qdev);
 		break;
 
 	case PCI_ERR_ANON_BUF_RD:
-		netif_err(qdev, rx_err, qdev->ndev,
+		netif_err(qdev, drv, qdev->ndev,
 			  "PCI error occurred when reading anonymous buffers from rx_ring %d.\n",
 			  ib_ae_rsp->q_id);
 		ql_queue_asic_error(qdev);
@@ -2441,10 +2441,10 @@ static irqreturn_t qlge_isr(int irq, void *dev_id)
 	 */
 	if (var & STS_FE) {
 		ql_queue_asic_error(qdev);
-		netif_err(qdev, intr, qdev->ndev,
+		netif_err(qdev, drv, qdev->ndev,
 			  "Got fatal error, STS = %x.\n", var);
 		var = ql_read32(qdev, ERR_STS);
-		netif_err(qdev, intr, qdev->ndev,
+		netif_err(qdev, drv, qdev->ndev,
 			  "Resetting chip. Error Status Register = 0x%x\n", var);
 		return IRQ_HANDLED;
 	}
-- 
1.6.0.2

Re: [net-2.6 PATCH 2/3] qlge:Fix printk priority so chip fatal errors are always reported.

From: Joe Perches <joe@perches.com>
Date: 2011-06-23 18:50:51

On Thu, 2011-06-23 at 10:52 -0700, Ron Mercer wrote:
From: Jitendra Kalsaria <redacted>
Precedence of the printk should be at higher level so chip
	fatal errors are always reported.
You probably want to use netdev_err then, not a masked
netif_err when it is optionally not reported.
quoted hunk
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
[]
quoted hunk
@@ -2170,7 +2170,7 @@ static void ql_process_chip_ae_intr(struct ql_adapter *qdev,
 		return;
 
 	case CAM_LOOKUP_ERR_EVENT:
-		netif_err(qdev, link, qdev->ndev,
+		netif_err(qdev, drv, qdev->ndev,
 			  "Multiple CAM hits lookup occurred.\n");
		netdev_err(qdev->ndev, "Multiple CAM hits lookup occurred\n");
quoted hunk
@@ -2178,13 +2178,13 @@ static void ql_process_chip_ae_intr(struct ql_adapter *qdev,
 		return;
 
 	case SOFT_ECC_ERROR_EVENT:
-		netif_err(qdev, rx_err, qdev->ndev,
+		netif_err(qdev, drv, qdev->ndev,
 			  "Soft ECC error detected.\n");
		netdev_err(qdev->ndev, "Soft ECC error detected\n");

etc...

Re: [net-2.6 PATCH 2/3] qlge:Fix printk priority so chip fatal errors are always reported.

From: Ron Mercer <hidden>
Date: 2011-06-23 19:00:04

On Thu, Jun 23, 2011 at 11:50:49AM -0700, Joe Perches wrote:
On Thu, 2011-06-23 at 10:52 -0700, Ron Mercer wrote:
quoted
From: Jitendra Kalsaria <redacted>
Precedence of the printk should be at higher level so chip
	fatal errors are always reported.
You probably want to use netdev_err then, not a masked
netif_err when it is optionally not reported.
Thanks.  We will respin these after waiting a bit for more comments.

[net-2.6 PATCH 1/3] qlge:Fix crash caused by mailbox execution on wedged chip.

From: Ron Mercer <hidden>
Date: 2011-06-30 20:18:52

From: Jitendra Kalsaria <redacted>

When we are in a recover process from a chip fatal error,
	driver should skip over execution of mailbox commands during
	resetting chip.

Signed-off-by: Jitendra Kalsaria <redacted>
Signed-off-by: Ron Mercer <redacted>
---
 drivers/net/qlge/qlge.h      |    1 +
 drivers/net/qlge/qlge_main.c |   20 +++++++++++++++-----
 2 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/drivers/net/qlge/qlge.h b/drivers/net/qlge/qlge.h
index d328507..b2c8612 100644
--- a/drivers/net/qlge/qlge.h
+++ b/drivers/net/qlge/qlge.h
@@ -1996,6 +1996,7 @@ enum {
 	QL_LB_LINK_UP = 10,
 	QL_FRC_COREDUMP = 11,
 	QL_EEH_FATAL = 12,
+	QL_ASIC_RECOVERY = 14, /* We are in ascic recovery. */
 };
 
 /* link_status bit definitions */
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index 930ae45..4fbefcf 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -2152,6 +2152,10 @@ void ql_queue_asic_error(struct ql_adapter *qdev)
 	 * thread
 	 */
 	clear_bit(QL_ADAPTER_UP, &qdev->flags);
+	/* Set asic recovery bit to indicate reset process that we are
+	 * in fatal error recovery process rather than normal close
+	 */
+	set_bit(QL_ASIC_RECOVERY, &qdev->flags);
 	queue_delayed_work(qdev->workqueue, &qdev->asic_reset_work, 0);
 }
 
@@ -3818,11 +3822,17 @@ static int ql_adapter_reset(struct ql_adapter *qdev)
 	end_jiffies = jiffies +
 		max((unsigned long)1, usecs_to_jiffies(30));
 
-	/* Stop management traffic. */
-	ql_mb_set_mgmnt_traffic_ctl(qdev, MB_SET_MPI_TFK_STOP);
+	/* Check if bit is set then skip the mailbox command and
+	 * clear the bit, else we are in normal reset process.
+	 */
+	if (!test_bit(QL_ASIC_RECOVERY, &qdev->flags)) {
+		/* Stop management traffic. */
+		ql_mb_set_mgmnt_traffic_ctl(qdev, MB_SET_MPI_TFK_STOP);
 
-	/* Wait for the NIC and MGMNT FIFOs to empty. */
-	ql_wait_fifo_empty(qdev);
+		/* Wait for the NIC and MGMNT FIFOs to empty. */
+		ql_wait_fifo_empty(qdev);
+	} else
+		clear_bit(QL_ASIC_RECOVERY, &qdev->flags);
 
 	ql_write32(qdev, RST_FO, (RST_FO_FR << 16) | RST_FO_FR);
 
-- 
1.6.0.2

Re: [net-2.6 PATCH 1/3] qlge:Fix crash caused by mailbox execution on wedged chip.

From: David Miller <davem@davemloft.net>
Date: 2011-07-02 00:36:31

From: Ron Mercer <redacted>
Date: Thu, 30 Jun 2011 13:02:05 -0700
From: Jitendra Kalsaria <redacted>

When we are in a recover process from a chip fatal error,
	driver should skip over execution of mailbox commands during
	resetting chip.

Signed-off-by: Jitendra Kalsaria <redacted>
Signed-off-by: Ron Mercer <redacted>
Applied.

[net-2.6 PATCH 3/3] qlge:Version change to v1.00.00.29

From: Ron Mercer <hidden>
Date: 2011-06-30 20:18:53

From: Jitendra Kalsaria <redacted>

Signed-off-by: Jitendra Kalsaria <redacted>
Signed-off-by: Ron Mercer <redacted>
---
 drivers/net/qlge/qlge.h |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/net/qlge/qlge.h b/drivers/net/qlge/qlge.h
index b2c8612..ca306fd 100644
--- a/drivers/net/qlge/qlge.h
+++ b/drivers/net/qlge/qlge.h
@@ -16,7 +16,7 @@
  */
 #define DRV_NAME  	"qlge"
 #define DRV_STRING 	"QLogic 10 Gigabit PCI-E Ethernet Driver "
-#define DRV_VERSION	"v1.00.00.27.00.00-01"
+#define DRV_VERSION	"v1.00.00.29.00.00-01"
 
 #define WQ_ADDR_ALIGN	0x3	/* 4 byte alignment */
 
-- 
1.6.0.2

Re: [net-2.6 PATCH 3/3] qlge:Version change to v1.00.00.29

From: David Miller <davem@davemloft.net>
Date: 2011-07-02 00:36:45

From: Ron Mercer <redacted>
Date: Thu, 30 Jun 2011 13:02:07 -0700
From: Jitendra Kalsaria <redacted>

Signed-off-by: Jitendra Kalsaria <redacted>
Signed-off-by: Ron Mercer <redacted>
Applied.

[net-2.6 PATCH 2/3] qlge: Fix printk priority so chip fatal errors are always reported.

From: Ron Mercer <hidden>
Date: 2011-06-30 20:19:50

From: Jitendra Kalsaria <redacted>

Precedence of the printk should be at higher level so chip fatal
errors are always reported.

Signed-off-by: Jitendra Kalsaria <redacted>
Signed-off-by: Ron Mercer <redacted>
---
 drivers/net/qlge/qlge_main.c |   22 +++++++++-------------
 1 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index 4fbefcf..6b4ff97 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -2170,23 +2170,20 @@ static void ql_process_chip_ae_intr(struct ql_adapter *qdev,
 		return;
 
 	case CAM_LOOKUP_ERR_EVENT:
-		netif_err(qdev, link, qdev->ndev,
-			  "Multiple CAM hits lookup occurred.\n");
-		netif_err(qdev, drv, qdev->ndev,
-			  "This event shouldn't occur.\n");
+		netdev_err(qdev->ndev, "Multiple CAM hits lookup occurred.\n");
+		netdev_err(qdev->ndev, "This event shouldn't occur.\n");
 		ql_queue_asic_error(qdev);
 		return;
 
 	case SOFT_ECC_ERROR_EVENT:
-		netif_err(qdev, rx_err, qdev->ndev,
-			  "Soft ECC error detected.\n");
+		netdev_err(qdev->ndev, "Soft ECC error detected.\n");
 		ql_queue_asic_error(qdev);
 		break;
 
 	case PCI_ERR_ANON_BUF_RD:
-		netif_err(qdev, rx_err, qdev->ndev,
-			  "PCI error occurred when reading anonymous buffers from rx_ring %d.\n",
-			  ib_ae_rsp->q_id);
+		netdev_err(qdev->ndev, "PCI error occurred when reading "
+					"anonymous buffers from rx_ring %d.\n",
+					ib_ae_rsp->q_id);
 		ql_queue_asic_error(qdev);
 		break;
 
@@ -2441,11 +2438,10 @@ static irqreturn_t qlge_isr(int irq, void *dev_id)
 	 */
 	if (var & STS_FE) {
 		ql_queue_asic_error(qdev);
-		netif_err(qdev, intr, qdev->ndev,
-			  "Got fatal error, STS = %x.\n", var);
+		netdev_err(qdev->ndev, "Got fatal error, STS = %x.\n", var);
 		var = ql_read32(qdev, ERR_STS);
-		netif_err(qdev, intr, qdev->ndev,
-			  "Resetting chip. Error Status Register = 0x%x\n", var);
+		netdev_err(qdev->ndev, "Resetting chip. "
+					"Error Status Register = 0x%x\n", var);
 		return IRQ_HANDLED;
 	}
 
-- 
1.6.0.2

Re: [net-2.6 PATCH 2/3] qlge: Fix printk priority so chip fatal errors are always reported.

From: David Miller <davem@davemloft.net>
Date: 2011-07-02 00:36:38

From: Ron Mercer <redacted>
Date: Thu, 30 Jun 2011 13:02:06 -0700
From: Jitendra Kalsaria <redacted>

Precedence of the printk should be at higher level so chip fatal
errors are always reported.

Signed-off-by: Jitendra Kalsaria <redacted>
Signed-off-by: Ron Mercer <redacted>
Applied.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help