Explorar o código

[BNX2]: Separate tx producer and consumer fields

Put the tx producer and consumer fields in separate cache lines in
the device structure, similar to the VJ net channel queue structure.

Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Michael Chan %!s(int64=19) %!d(string=hai) anos
pai
achega
29b12174ac
Modificáronse 2 ficheiros con 13 adicións e 9 borrados
  1. 1 0
      drivers/net/bnx2.c
  2. 12 9
      drivers/net/bnx2.h

+ 1 - 0
drivers/net/bnx2.c

@@ -48,6 +48,7 @@
 #include <linux/workqueue.h>
 #include <linux/crc32.h>
 #include <linux/prefetch.h>
+#include <linux/cache.h>
 
 #include "bnx2.h"
 #include "bnx2_fw.h"

+ 12 - 9
drivers/net/bnx2.h

@@ -3877,15 +3877,17 @@ struct bnx2 {
 #define USING_MSI_FLAG			0x20
 #define ASF_ENABLE_FLAG			0x40
 
-	struct tx_bd		*tx_desc_ring;
-	struct sw_bd		*tx_buf_ring;
-	u32			tx_prod_bseq;
-	u16			tx_prod;
-	u16			tx_cons;
-	int			tx_ring_size;
-
-	u16			hw_tx_cons;
-	u16			hw_rx_cons;
+	/* Put tx producer and consumer fields in separate cache lines. */
+
+	u32		tx_prod_bseq __attribute__((aligned(L1_CACHE_BYTES)));
+	u16		tx_prod;
+
+	struct tx_bd	*tx_desc_ring;
+	struct sw_bd	*tx_buf_ring;
+	int		tx_ring_size;
+
+	u16		tx_cons __attribute__((aligned(L1_CACHE_BYTES)));
+	u16		hw_tx_cons;
 
 #ifdef BCM_VLAN 
 	struct			vlan_group *vlgrp;
@@ -3899,6 +3901,7 @@ struct bnx2 {
 	u32			rx_prod_bseq;
 	u16			rx_prod;
 	u16			rx_cons;
+	u16			hw_rx_cons;
 
 	u32			rx_csum;