Skip to contentSkip to conversation

ixgbe: Fix ixgbe_tx_map error path

PATCH In review Anton Blanchard 2 participants 3 messages Jan 12, 2010

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

PATCH 1/1 ixgbe: Fix ixgbe_tx_map error path

Commit e5a43549f7a58509a91b299a51337d386697b92c (ixgbe: remove skb_dma_map/unmap calls from driver) looks to have introduced a bug in ixgbe_tx_map. If we get an error from a PCI DMA call, we loop backwards through count until it becomes -1 and return that.

The caller of ixgbe_tx_map expects 0 on error, so return that instead.

---

drivers/net/ixgbe/ixgbe_main.c +1 -1
index 1a2ea62..af660ba 100644
@@ -5174,7 +5174,7 @@ dma_error:
 		ixgbe_unmap_and_free_tx_resource(adapter, tx_buffer_info);
 	}
 
-	return count;
+	return 0;
 }
 
 static void ixgbe_tx_queue(struct ixgbe_adapter *adapter,
#1 lore raw

Actually it looks like the bug for ixgbe is in the while (count >= 0) check. It should be just while (count > 0) insead.

It also appears there is an issue I may have introduced in igb as well. I will go back through the drivers and see about submitting some patches to address these issues.

Thanks,

Alex

-----Original Message-----
From: Anton Blanchard [mailto:[email protected]]
Sent: Tuesday, January 12, 2010 3:02 AM
To: Kirsher, Jeffrey T; Brandeburg, Jesse; Allan, Bruce W; Waskiewicz Jr, Peter P; Ronciak, John; Skidmore, Donald C; Zou, Yi; Duyck, Alexander H
Cc: [email protected]; [email protected]
Subject: [PATCH] ixgbe: Fix ixgbe_tx_map error path

Commit e5a43549f7a58509a91b299a51337d386697b92c (ixgbe: remove skb_dma_map/unmap calls from driver) looks to have introduced a bug in ixgbe_tx_map. If we get an error from a PCI DMA call, we loop backwards through count until it becomes -1 and return that.

The caller of ixgbe_tx_map expects 0 on error, so return that instead.

---

drivers/net/ixgbe/ixgbe_main.c +1 -1
index 1a2ea62..af660ba 100644
@@ -5174,7 +5174,7 @@ dma_error:
 		ixgbe_unmap_and_free_tx_resource(adapter, tx_buffer_info);
 	}
 
-	return count;
+	return 0;
 }
 
 static void ixgbe_tx_queue(struct ixgbe_adapter *adapter,
#2 lore raw
Quoted 10 lines · Alexander H

Actually it looks like the bug for ixgbe is in the while (count >= 0) check. It should be just while (count > 0) insead.

It also appears there is an issue I may have introduced in igb as well. I will go back through the drivers and see about submitting some patches to address these issues.

Thanks,

Alex

It looks like we actually have some other patches in place that are addressing the count >= 0 issue. This patch addresses the remaining return value of -1 issues for ixgbe. I think we should probably pull it into Jeff's tree for testing, and I will generate a separate patch for the igb issues.

Thanks,

Alex

Quoted 34 lines

-----Original Message-----
From: Anton Blanchard [mailto:[email protected]]
Sent: Tuesday, January 12, 2010 3:02 AM
To: Kirsher, Jeffrey T; Brandeburg, Jesse; Allan, Bruce W; Waskiewicz Jr, Peter P; Ronciak, John; Skidmore, Donald C; Zou, Yi; Duyck, Alexander H
Cc: [email protected]; [email protected]
Subject: [PATCH] ixgbe: Fix ixgbe_tx_map error path

Commit e5a43549f7a58509a91b299a51337d386697b92c (ixgbe: remove skb_dma_map/unmap calls from driver) looks to have introduced a bug in ixgbe_tx_map. If we get an error from a PCI DMA call, we loop backwards
through count until it becomes -1 and return that.

The caller of ixgbe_tx_map expects 0 on error, so return that instead.

---

drivers/net/ixgbe/ixgbe_main.c +1 -1
index 1a2ea62..af660ba 100644
@@ -5174,7 +5174,7 @@ dma_error:
 		ixgbe_unmap_and_free_tx_resource(adapter, tx_buffer_info);
 	}
 
-	return count;
+	return 0;
 }
 
 static void ixgbe_tx_queue(struct ixgbe_adapter *adapter,