Skip to contentSkip to conversation

be2net: fix a bug in UE detection logic

PATCH Applied Ajit Khaparde 2 participants 5 messages Aug 25, 2010 – Sep 3, 2010

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 2/3 be2net: fix a bug in UE detection logic

The ONLINE registers can return 0xFFFFFFFF on more than one occassion. On systems that care, reading these registers could lead to problems.

So the new code decides that the ASIC has encountered and error by reading the UE_STATUS_LOW/HIGH registers. AND them with the mask values and a non-zero result indicates an error.

---
 drivers/net/benet/be_main.c |   32 ++++++++------------------------
 1 files changed, 8 insertions(+), 24 deletions(-)
drivers/net/benet/be_main.c +8 -24
index a5a24e6..6eda7a0 100644
@@ -1750,26 +1750,7 @@ static int be_poll_tx_mcc(struct napi_struct *napi, int budget)
 	return 1;
 }
 
-static inline bool be_detect_ue(struct be_adapter *adapter)
-{
-	u32 online0 = 0, online1 = 0;
-
-	pci_read_config_dword(adapter->pdev, PCICFG_ONLINE0, &online0);
-
-	pci_read_config_dword(adapter->pdev, PCICFG_ONLINE1, &online1);
-
-	if (!online0 || !online1) {
-		adapter->ue_detected = true;
-		dev_err(&adapter->pdev->dev,
-			"UE Detected!! online0=%d online1=%d\n",
-			online0, online1);
-		return true;
-	}
-
-	return false;
-}
-
-void be_dump_ue(struct be_adapter *adapter)
+void be_detect_dump_ue(struct be_adapter *adapter)
 {
 	u32 ue_status_lo, ue_status_hi, ue_status_lo_mask, ue_status_hi_mask;
 	u32 i;
@@ -1786,6 +1767,11 @@ void be_dump_ue(struct be_adapter *adapter)
 	ue_status_lo = (ue_status_lo & (~ue_status_lo_mask));
 	ue_status_hi = (ue_status_hi & (~ue_status_hi_mask));
 
+	if (ue_status_lo || ue_status_hi) {
+		adapter->ue_detected = true;
+		dev_err(&adapter->pdev->dev, "UE Detected!!\n");
+	}
+
 	if (ue_status_lo) {
 		for (i = 0; ue_status_lo; ue_status_lo >>= 1, i++) {
 			if (ue_status_lo & 1)
@@ -1821,10 +1807,8 @@ static void be_worker(struct work_struct *work)
 		adapter->rx_post_starved = false;
 		be_post_rx_frags(adapter);
 	}
-	if (!adapter->ue_detected) {
-		if (be_detect_ue(adapter))
-			be_dump_ue(adapter);
-	}
+	if (!adapter->ue_detected)
+		be_detect_dump_ue(adapter);
 
 	schedule_delayed_work(&adapter->work, msecs_to_jiffies(1000));
 }
Signature · 1 line
1.7.0.4
maintainer Applied
#1 lore raw

From: Ajit Khaparde <[email protected]>
Date: Wed, 25 Aug 2010 15:57:31 +0530

Quoted 9 lines

The ONLINE registers can return 0xFFFFFFFF on more than one occassion. On systems that care, reading these registers could lead to problems.

So the new code decides that the ASIC has encountered and error by reading the UE_STATUS_LOW/HIGH registers. AND them with the mask values and a non-zero result indicates an error.

Applied.

maintainer
#2 lore raw

From: David Miller <[email protected]>
Date: Wed, 25 Aug 2010 14:23:11 -0700 (PDT)

Quoted 7 lines

From: Ajit Khaparde <[email protected]>
Date: Wed, 25 Aug 2010 15:57:31 +0530

Quoted 4 lines

The ONLINE registers can return 0xFFFFFFFF on more than one occassion. On systems that care, reading these registers could lead to problems.

Quoted 7 lines
Quoted 5 lines

So the new code decides that the ASIC has encountered and error by reading the UE_STATUS_LOW/HIGH registers. AND them with the mask values and a non-zero result indicates an error.

Applied.

You didn't even build test what you submitted to me:

ERROR: "be_dump_ue" [drivers/net/benet/be2net.ko] undefined!

I'm reverting both patches.

maintainer
#3 lore raw

From: David Miller <[email protected]>
Date: Wed, 25 Aug 2010 21:15:00 -0700 (PDT)

Quoted 16 lines

From: David Miller <[email protected]>
Date: Wed, 25 Aug 2010 14:23:11 -0700 (PDT)

Quoted 13 lines

From: Ajit Khaparde <[email protected]>
Date: Wed, 25 Aug 2010 15:57:31 +0530

Quoted 9 lines

The ONLINE registers can return 0xFFFFFFFF on more than one occassion. On systems that care, reading these registers could lead to problems.

So the new code decides that the ASIC has encountered and error by reading the UE_STATUS_LOW/HIGH registers. AND them with the mask values and a non-zero result indicates an error.

Quoted 7 lines
Quoted 1 line

Applied.

You didn't even build test what you submitted to me:

ERROR: "be_dump_ue" [drivers/net/benet/be2net.ko] undefined!

I'm reverting both patches.

Of course I meant "I'm reverting all 3 patches."

#4 lore raw
In reply to David Miller
Quoted 16 lines · David Miller

From: David Miller <[email protected]>
Date: Wed, 25 Aug 2010 14:23:11 -0700 (PDT)

Quoted 13 lines

From: Ajit Khaparde <[email protected]>
Date: Wed, 25 Aug 2010 15:57:31 +0530

Quoted 9 lines

The ONLINE registers can return 0xFFFFFFFF on more than one occassion. On systems that care, reading these registers could lead to problems.

So the new code decides that the ASIC has encountered and error by reading the UE_STATUS_LOW/HIGH registers. AND them with the mask values and a non-zero result indicates an error.

Quoted 7 lines
Quoted 1 line

Applied.

You didn't even build test what you submitted to me:

ERROR: "be_dump_ue" [drivers/net/benet/be2net.ko] undefined!

I'm reverting both patches.

Not sure why this happened and how I missed it because I did compile the driver before sending the patches out. Will take care of this in future. Thanks