netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [net-next 00/11][pull request] Intel Wired LAN Driver Updates
@ 2012-02-07 12:33 Jeff Kirsher
  2012-02-07 12:33 ` [net-next 01/11] igbvf: refactor Interrupt Throttle Rate code Jeff Kirsher
                   ` (11 more replies)
  0 siblings, 12 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-02-07 12:33 UTC (permalink / raw)
  To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann

The following series contains updates to e1000, igbvf and e1000e.
Majority of the updates are to e1000e and do the following:
 - cleanup 82571 and 80003es2lan code
 - fix checkpatch and sparse warnings
 - fix whitespace/indentation
 - add missing initializers

The following are changes since commit 59d74026fa4b5df72a268f1e9578af500154ad07:
  Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master

Bruce Allan (9):
  e1000e: add missing initializers reported when compiling with W=1
  e1000e: cleanup - check return values consistently
  e1000e: cleanup e1000_init_mac_params_80003es2lan()
  e1000e: cleanup e1000_init_mac_params_82571()
  e1000e: cleanup e1000_set_phys_id
  e1000e: cleanup - use braces in both branches of a conditional
    statement
  e1000e: fix checkpatch warning from MINMAX test
  e1000e: fix sparse warnings with -D__CHECK_ENDIAN__
  e1000e: minor whitespace and indentation cleanup

Mitch A Williams (1):
  igbvf: refactor Interrupt Throttle Rate code

Tushar Dave (1):
  e1000: Adding e1000_dump function

 drivers/net/ethernet/intel/e1000/e1000.h        |    1 +
 drivers/net/ethernet/intel/e1000/e1000_hw.h     |   10 +
 drivers/net/ethernet/intel/e1000/e1000_main.c   |  224 +++++++++++++++++++++++
 drivers/net/ethernet/intel/e1000e/80003es2lan.c |   28 +--
 drivers/net/ethernet/intel/e1000e/82571.c       |   72 +++-----
 drivers/net/ethernet/intel/e1000e/ethtool.c     |    8 +-
 drivers/net/ethernet/intel/e1000e/ich8lan.c     |   12 +-
 drivers/net/ethernet/intel/e1000e/netdev.c      |  104 ++++++-----
 drivers/net/ethernet/intel/igbvf/ethtool.c      |   19 +-
 drivers/net/ethernet/intel/igbvf/igbvf.h        |   27 ++--
 drivers/net/ethernet/intel/igbvf/netdev.c       |  131 ++++++++------
 11 files changed, 438 insertions(+), 198 deletions(-)

-- 
1.7.7.6

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

* [net-next 01/11] igbvf: refactor Interrupt Throttle Rate code
  2012-02-07 12:33 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
@ 2012-02-07 12:33 ` Jeff Kirsher
  2012-02-07 12:33 ` [net-next 02/11] e1000: Adding e1000_dump function Jeff Kirsher
                   ` (10 subsequent siblings)
  11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-02-07 12:33 UTC (permalink / raw)
  To: davem; +Cc: Mitch A Williams, netdev, gospo, sassmann, Jeff Kirsher

From: Mitch A Williams <mitch.a.williams@intel.com>

The existing ITR code is broken and confusing, with lots of similarly-named
variables that do different things. Additionally, after the driver carefully
determines the optimal interrupt rate for the adapter, it then
ignores it and always writes a fixed, suboptimal value.

This patch refactors that code to make variable names more descriptive of
what they actually do, and then actually writes the calculated result to
the hardware.

Preliminary testing shows that netperf TCP_STREAM tests goes from ~918Mbps
to ~940Mbps, and TCP_RR goes from ~2k transactions/sec up to > 8k.

Signed-off-by: Mitch Williams <mitch.a.williams@intel.com>
Tested-by: Robert E Garrett <robertX.e.garrett@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 drivers/net/ethernet/intel/igbvf/ethtool.c |   19 ++--
 drivers/net/ethernet/intel/igbvf/igbvf.h   |   27 +++---
 drivers/net/ethernet/intel/igbvf/netdev.c  |  131 ++++++++++++++++------------
 3 files changed, 99 insertions(+), 78 deletions(-)

diff --git a/drivers/net/ethernet/intel/igbvf/ethtool.c b/drivers/net/ethernet/intel/igbvf/ethtool.c
index db7dce2..8ce6706 100644
--- a/drivers/net/ethernet/intel/igbvf/ethtool.c
+++ b/drivers/net/ethernet/intel/igbvf/ethtool.c
@@ -343,10 +343,10 @@ static int igbvf_get_coalesce(struct net_device *netdev,
 {
 	struct igbvf_adapter *adapter = netdev_priv(netdev);
 
-	if (adapter->itr_setting <= 3)
-		ec->rx_coalesce_usecs = adapter->itr_setting;
+	if (adapter->requested_itr <= 3)
+		ec->rx_coalesce_usecs = adapter->requested_itr;
 	else
-		ec->rx_coalesce_usecs = adapter->itr_setting >> 2;
+		ec->rx_coalesce_usecs = adapter->current_itr >> 2;
 
 	return 0;
 }
@@ -365,15 +365,16 @@ static int igbvf_set_coalesce(struct net_device *netdev,
 
 	/* convert to rate of irq's per second */
 	if (ec->rx_coalesce_usecs && ec->rx_coalesce_usecs <= 3) {
-		adapter->itr = IGBVF_START_ITR;
-		adapter->itr_setting = ec->rx_coalesce_usecs;
+		adapter->current_itr = IGBVF_START_ITR;
+		adapter->requested_itr = ec->rx_coalesce_usecs;
 	} else {
-		adapter->itr = ec->rx_coalesce_usecs << 2;
-		adapter->itr_setting = adapter->itr;
+		adapter->current_itr = ec->rx_coalesce_usecs << 2;
+		adapter->requested_itr = 1000000000 /
+					(adapter->current_itr * 256);
 	}
 
-	writel(adapter->itr,
-	       hw->hw_addr + adapter->rx_ring[0].itr_register);
+	writel(adapter->current_itr,
+	       hw->hw_addr + adapter->rx_ring->itr_register);
 
 	return 0;
 }
diff --git a/drivers/net/ethernet/intel/igbvf/igbvf.h b/drivers/net/ethernet/intel/igbvf/igbvf.h
index 2c6d87e..a895e2f 100644
--- a/drivers/net/ethernet/intel/igbvf/igbvf.h
+++ b/drivers/net/ethernet/intel/igbvf/igbvf.h
@@ -43,7 +43,18 @@ struct igbvf_info;
 struct igbvf_adapter;
 
 /* Interrupt defines */
-#define IGBVF_START_ITR                 648 /* ~6000 ints/sec */
+#define IGBVF_START_ITR                    488 /* ~8000 ints/sec */
+#define IGBVF_4K_ITR                       980
+#define IGBVF_20K_ITR                      196
+#define IGBVF_70K_ITR                       56
+
+enum latency_range {
+	lowest_latency = 0,
+	low_latency = 1,
+	bulk_latency = 2,
+	latency_invalid = 255
+};
+
 
 /* Interrupt modes, as used by the IntMode parameter */
 #define IGBVF_INT_MODE_LEGACY           0
@@ -155,6 +166,7 @@ struct igbvf_ring {
 	char name[IFNAMSIZ + 5];
 	u32 eims_value;
 	u32 itr_val;
+	enum latency_range itr_range;
 	u16 itr_register;
 	int set_itr;
 
@@ -187,10 +199,8 @@ struct igbvf_adapter {
 	unsigned long state;
 
 	/* Interrupt Throttle Rate */
-	u32 itr;
-	u32 itr_setting;
-	u16 tx_itr;
-	u16 rx_itr;
+	u32 requested_itr; /* ints/sec or adaptive */
+	u32 current_itr; /* Actual ITR register value, not ints/sec */
 
 	/*
 	 * Tx
@@ -299,13 +309,6 @@ enum igbvf_state_t {
 	__IGBVF_DOWN
 };
 
-enum latency_range {
-	lowest_latency = 0,
-	low_latency = 1,
-	bulk_latency = 2,
-	latency_invalid = 255
-};
-
 extern char igbvf_driver_name[];
 extern const char igbvf_driver_version[];
 
diff --git a/drivers/net/ethernet/intel/igbvf/netdev.c b/drivers/net/ethernet/intel/igbvf/netdev.c
index 4e9141c..446297f 100644
--- a/drivers/net/ethernet/intel/igbvf/netdev.c
+++ b/drivers/net/ethernet/intel/igbvf/netdev.c
@@ -632,14 +632,13 @@ void igbvf_free_rx_resources(struct igbvf_ring *rx_ring)
  *      traffic pattern.  Constants in this function were computed
  *      based on theoretical maximum wire speed and thresholds were set based
  *      on testing data as well as attempting to minimize response time
- *      while increasing bulk throughput.  This functionality is controlled
- *      by the InterruptThrottleRate module parameter.
+ *      while increasing bulk throughput.
  **/
-static unsigned int igbvf_update_itr(struct igbvf_adapter *adapter,
-                                     u16 itr_setting, int packets,
-                                     int bytes)
+static enum latency_range igbvf_update_itr(struct igbvf_adapter *adapter,
+					   enum latency_range itr_setting,
+					   int packets, int bytes)
 {
-	unsigned int retval = itr_setting;
+	enum latency_range retval = itr_setting;
 
 	if (packets == 0)
 		goto update_itr_done;
@@ -675,65 +674,87 @@ static unsigned int igbvf_update_itr(struct igbvf_adapter *adapter,
 			retval = low_latency;
 		}
 		break;
+	default:
+		break;
 	}
 
 update_itr_done:
 	return retval;
 }
 
-static void igbvf_set_itr(struct igbvf_adapter *adapter)
+static int igbvf_range_to_itr(enum latency_range current_range)
 {
-	struct e1000_hw *hw = &adapter->hw;
-	u16 current_itr;
-	u32 new_itr = adapter->itr;
-
-	adapter->tx_itr = igbvf_update_itr(adapter, adapter->tx_itr,
-	                                   adapter->total_tx_packets,
-	                                   adapter->total_tx_bytes);
-	/* conservative mode (itr 3) eliminates the lowest_latency setting */
-	if (adapter->itr_setting == 3 && adapter->tx_itr == lowest_latency)
-		adapter->tx_itr = low_latency;
-
-	adapter->rx_itr = igbvf_update_itr(adapter, adapter->rx_itr,
-	                                   adapter->total_rx_packets,
-	                                   adapter->total_rx_bytes);
-	/* conservative mode (itr 3) eliminates the lowest_latency setting */
-	if (adapter->itr_setting == 3 && adapter->rx_itr == lowest_latency)
-		adapter->rx_itr = low_latency;
+	int new_itr;
 
-	current_itr = max(adapter->rx_itr, adapter->tx_itr);
-
-	switch (current_itr) {
+	switch (current_range) {
 	/* counts and packets in update_itr are dependent on these numbers */
 	case lowest_latency:
-		new_itr = 70000;
+		new_itr = IGBVF_70K_ITR;
 		break;
 	case low_latency:
-		new_itr = 20000; /* aka hwitr = ~200 */
+		new_itr = IGBVF_20K_ITR;
 		break;
 	case bulk_latency:
-		new_itr = 4000;
+		new_itr = IGBVF_4K_ITR;
 		break;
 	default:
+		new_itr = IGBVF_START_ITR;
 		break;
 	}
+	return new_itr;
+}
+
+static void igbvf_set_itr(struct igbvf_adapter *adapter)
+{
+	u32 new_itr;
+
+	adapter->tx_ring->itr_range =
+			igbvf_update_itr(adapter,
+					 adapter->tx_ring->itr_val,
+					 adapter->total_tx_packets,
+					 adapter->total_tx_bytes);
+
+	/* conservative mode (itr 3) eliminates the lowest_latency setting */
+	if (adapter->requested_itr == 3 &&
+	    adapter->tx_ring->itr_range == lowest_latency)
+		adapter->tx_ring->itr_range = low_latency;
 
-	if (new_itr != adapter->itr) {
+	new_itr = igbvf_range_to_itr(adapter->tx_ring->itr_range);
+
+
+	if (new_itr != adapter->tx_ring->itr_val) {
+		u32 current_itr = adapter->tx_ring->itr_val;
 		/*
 		 * this attempts to bias the interrupt rate towards Bulk
 		 * by adding intermediate steps when interrupt rate is
 		 * increasing
 		 */
-		new_itr = new_itr > adapter->itr ?
-		             min(adapter->itr + (new_itr >> 2), new_itr) :
-		             new_itr;
-		adapter->itr = new_itr;
-		adapter->rx_ring->itr_val = 1952;
-
-		if (adapter->msix_entries)
-			adapter->rx_ring->set_itr = 1;
-		else
-			ew32(ITR, 1952);
+		new_itr = new_itr > current_itr ?
+			     min(current_itr + (new_itr >> 2), new_itr) :
+			     new_itr;
+		adapter->tx_ring->itr_val = new_itr;
+
+		adapter->tx_ring->set_itr = 1;
+	}
+
+	adapter->rx_ring->itr_range =
+			igbvf_update_itr(adapter, adapter->rx_ring->itr_val,
+					 adapter->total_rx_packets,
+					 adapter->total_rx_bytes);
+	if (adapter->requested_itr == 3 &&
+	    adapter->rx_ring->itr_range == lowest_latency)
+		adapter->rx_ring->itr_range = low_latency;
+
+	new_itr = igbvf_range_to_itr(adapter->rx_ring->itr_range);
+
+	if (new_itr != adapter->rx_ring->itr_val) {
+		u32 current_itr = adapter->rx_ring->itr_val;
+		new_itr = new_itr > current_itr ?
+			     min(current_itr + (new_itr >> 2), new_itr) :
+			     new_itr;
+		adapter->rx_ring->itr_val = new_itr;
+
+		adapter->rx_ring->set_itr = 1;
 	}
 }
 
@@ -835,6 +856,11 @@ static irqreturn_t igbvf_intr_msix_tx(int irq, void *data)
 	struct e1000_hw *hw = &adapter->hw;
 	struct igbvf_ring *tx_ring = adapter->tx_ring;
 
+	if (tx_ring->set_itr) {
+		writel(tx_ring->itr_val,
+		       adapter->hw.hw_addr + tx_ring->itr_register);
+		adapter->tx_ring->set_itr = 0;
+	}
 
 	adapter->total_tx_bytes = 0;
 	adapter->total_tx_packets = 0;
@@ -937,19 +963,10 @@ static void igbvf_configure_msix(struct igbvf_adapter *adapter)
 
 	igbvf_assign_vector(adapter, IGBVF_NO_QUEUE, 0, vector++);
 	adapter->eims_enable_mask |= tx_ring->eims_value;
-	if (tx_ring->itr_val)
-		writel(tx_ring->itr_val,
-		       hw->hw_addr + tx_ring->itr_register);
-	else
-		writel(1952, hw->hw_addr + tx_ring->itr_register);
-
+	writel(tx_ring->itr_val, hw->hw_addr + tx_ring->itr_register);
 	igbvf_assign_vector(adapter, 0, IGBVF_NO_QUEUE, vector++);
 	adapter->eims_enable_mask |= rx_ring->eims_value;
-	if (rx_ring->itr_val)
-		writel(rx_ring->itr_val,
-		       hw->hw_addr + rx_ring->itr_register);
-	else
-		writel(1952, hw->hw_addr + rx_ring->itr_register);
+	writel(rx_ring->itr_val, hw->hw_addr + rx_ring->itr_register);
 
 	/* set vector for other causes, i.e. link changes */
 
@@ -1027,7 +1044,7 @@ static int igbvf_request_msix(struct igbvf_adapter *adapter)
 		goto out;
 
 	adapter->tx_ring->itr_register = E1000_EITR(vector);
-	adapter->tx_ring->itr_val = 1952;
+	adapter->tx_ring->itr_val = adapter->current_itr;
 	vector++;
 
 	err = request_irq(adapter->msix_entries[vector].vector,
@@ -1037,7 +1054,7 @@ static int igbvf_request_msix(struct igbvf_adapter *adapter)
 		goto out;
 
 	adapter->rx_ring->itr_register = E1000_EITR(vector);
-	adapter->rx_ring->itr_val = 1952;
+	adapter->rx_ring->itr_val = adapter->current_itr;
 	vector++;
 
 	err = request_irq(adapter->msix_entries[vector].vector,
@@ -1151,7 +1168,7 @@ static int igbvf_poll(struct napi_struct *napi, int budget)
 	if (work_done < budget) {
 		napi_complete(napi);
 
-		if (adapter->itr_setting & 3)
+		if (adapter->requested_itr & 3)
 			igbvf_set_itr(adapter);
 
 		if (!test_bit(__IGBVF_DOWN, &adapter->state))
@@ -1521,8 +1538,8 @@ static int __devinit igbvf_sw_init(struct igbvf_adapter *adapter)
 	adapter->tx_abs_int_delay = 32;
 	adapter->rx_int_delay = 0;
 	adapter->rx_abs_int_delay = 8;
-	adapter->itr_setting = 3;
-	adapter->itr = 20000;
+	adapter->requested_itr = 3;
+	adapter->current_itr = IGBVF_START_ITR;
 
 	/* Set various function pointers */
 	adapter->ei->init_ops(&adapter->hw);
-- 
1.7.7.6

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

* [net-next 02/11] e1000: Adding e1000_dump function
  2012-02-07 12:33 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
  2012-02-07 12:33 ` [net-next 01/11] igbvf: refactor Interrupt Throttle Rate code Jeff Kirsher
@ 2012-02-07 12:33 ` Jeff Kirsher
  2012-02-07 15:40   ` Joe Perches
  2012-02-07 17:38   ` [net-next 02/11] e1000: Adding " Michal Kubeček
  2012-02-07 12:33 ` [net-next 03/11] e1000e: add missing initializers reported when compiling with W=1 Jeff Kirsher
                   ` (9 subsequent siblings)
  11 siblings, 2 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-02-07 12:33 UTC (permalink / raw)
  To: davem; +Cc: Tushar Dave, netdev, gospo, sassmann, Jeff Kirsher

From: Tushar Dave <tushar.n.dave@intel.com>

When TX hang occurs e1000_dump prints TX ring, RX ring and Device registers.

Signed-off-by: Tushar Dave <tushar.n.dave@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 drivers/net/ethernet/intel/e1000/e1000.h      |    1 +
 drivers/net/ethernet/intel/e1000/e1000_hw.h   |   10 +
 drivers/net/ethernet/intel/e1000/e1000_main.c |  224 +++++++++++++++++++++++++
 3 files changed, 235 insertions(+), 0 deletions(-)

diff --git a/drivers/net/ethernet/intel/e1000/e1000.h b/drivers/net/ethernet/intel/e1000/e1000.h
index 1e15969..2b6cd02 100644
--- a/drivers/net/ethernet/intel/e1000/e1000.h
+++ b/drivers/net/ethernet/intel/e1000/e1000.h
@@ -254,6 +254,7 @@ struct e1000_adapter {
 	atomic_t tx_fifo_stall;
 	bool pcix_82544;
 	bool detect_tx_hung;
+	bool dump_buffers;
 
 	/* RX */
 	bool (*clean_rx)(struct e1000_adapter *adapter,
diff --git a/drivers/net/ethernet/intel/e1000/e1000_hw.h b/drivers/net/ethernet/intel/e1000/e1000_hw.h
index f6c4d7e..11578c8 100644
--- a/drivers/net/ethernet/intel/e1000/e1000_hw.h
+++ b/drivers/net/ethernet/intel/e1000/e1000_hw.h
@@ -895,6 +895,11 @@ struct e1000_ffvt_entry {
 #define E1000_FCRTL    0x02160	/* Flow Control Receive Threshold Low - RW */
 #define E1000_FCRTH    0x02168	/* Flow Control Receive Threshold High - RW */
 #define E1000_PSRCTL   0x02170	/* Packet Split Receive Control - RW */
+#define E1000_RDFH     0x02410  /* RX Data FIFO Head - RW */
+#define E1000_RDFT     0x02418  /* RX Data FIFO Tail - RW */
+#define E1000_RDFHS    0x02420  /* RX Data FIFO Head Saved - RW */
+#define E1000_RDFTS    0x02428  /* RX Data FIFO Tail Saved - RW */
+#define E1000_RDFPC    0x02430  /* RX Data FIFO Packet Count - RW */
 #define E1000_RDBAL    0x02800	/* RX Descriptor Base Address Low - RW */
 #define E1000_RDBAH    0x02804	/* RX Descriptor Base Address High - RW */
 #define E1000_RDLEN    0x02808	/* RX Descriptor Length - RW */
@@ -1074,6 +1079,11 @@ struct e1000_ffvt_entry {
 #define E1000_82542_IMC      E1000_IMC
 #define E1000_82542_RCTL     E1000_RCTL
 #define E1000_82542_RDTR     0x00108
+#define E1000_82542_RDFH     E1000_RDFH
+#define E1000_82542_RDFT     E1000_RDFT
+#define E1000_82542_RDFHS    E1000_RDFHS
+#define E1000_82542_RDFTS    E1000_RDFTS
+#define E1000_82542_RDFPC    E1000_RDFPC
 #define E1000_82542_RDBAL    0x00110
 #define E1000_82542_RDBAH    0x00114
 #define E1000_82542_RDLEN    0x00118
diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
index 363fd39..1f86a70 100644
--- a/drivers/net/ethernet/intel/e1000/e1000_main.c
+++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
@@ -3239,6 +3239,228 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
 	return NETDEV_TX_OK;
 }
 
+#define NUM_REGS 38 /* 1 based count */
+static void e1000_regdump(struct e1000_adapter *adapter)
+{
+	struct e1000_hw *hw = &adapter->hw;
+	u32 regs[NUM_REGS];
+	u32 *regs_buff = regs;
+	int i = 0;
+
+	char *reg_name[] = {
+	"CTRL",  "STATUS",
+	"RCTL", "RDLEN", "RDH", "RDT", "RDTR",
+	"TCTL", "TDBAL", "TDBAH", "TDLEN", "TDH", "TDT",
+	"TIDV", "TXDCTL", "TADV", "TARC0",
+	"TDBAL1", "TDBAH1", "TDLEN1", "TDH1", "TDT1",
+	"TXDCTL1", "TARC1",
+	"CTRL_EXT", "ERT", "RDBAL", "RDBAH",
+	"TDFH", "TDFT", "TDFHS", "TDFTS", "TDFPC",
+	"RDFH", "RDFT", "RDFHS", "RDFTS", "RDFPC"
+	};
+
+	regs_buff[0]  = er32(CTRL);
+	regs_buff[1]  = er32(STATUS);
+
+	regs_buff[2]  = er32(RCTL);
+	regs_buff[3]  = er32(RDLEN);
+	regs_buff[4]  = er32(RDH);
+	regs_buff[5]  = er32(RDT);
+	regs_buff[6]  = er32(RDTR);
+
+	regs_buff[7]  = er32(TCTL);
+	regs_buff[8]  = er32(TDBAL);
+	regs_buff[9]  = er32(TDBAH);
+	regs_buff[10] = er32(TDLEN);
+	regs_buff[11] = er32(TDH);
+	regs_buff[12] = er32(TDT);
+	regs_buff[13] = er32(TIDV);
+	regs_buff[14] = er32(TXDCTL);
+	regs_buff[15] = er32(TADV);
+	regs_buff[16] = er32(TARC0);
+
+	regs_buff[17] = er32(TDBAL1);
+	regs_buff[18] = er32(TDBAH1);
+	regs_buff[19] = er32(TDLEN1);
+	regs_buff[20] = er32(TDH1);
+	regs_buff[21] = er32(TDT1);
+	regs_buff[22] = er32(TXDCTL1);
+	regs_buff[23] = er32(TARC1);
+	regs_buff[24] = er32(CTRL_EXT);
+	regs_buff[25] = er32(ERT);
+	regs_buff[26] = er32(RDBAL0);
+	regs_buff[27] = er32(RDBAH0);
+	regs_buff[28] = er32(TDFH);
+	regs_buff[29] = er32(TDFT);
+	regs_buff[30] = er32(TDFHS);
+	regs_buff[31] = er32(TDFTS);
+	regs_buff[32] = er32(TDFPC);
+	regs_buff[33] = er32(RDFH);
+	regs_buff[34] = er32(RDFT);
+	regs_buff[35] = er32(RDFHS);
+	regs_buff[36] = er32(RDFTS);
+	regs_buff[37] = er32(RDFPC);
+
+	pr_info("Register dump\n");
+	for (i = 0; i < NUM_REGS; i++) {
+		printk(KERN_INFO "%-15s  %08x\n",
+		reg_name[i], regs_buff[i]);
+	}
+}
+
+/*
+ * e1000_dump: Print registers, tx ring and rx ring
+ */
+static void e1000_dump(struct e1000_adapter *adapter)
+{
+	/* this code doesn't handle multiple rings */
+	struct e1000_tx_ring *tx_ring = adapter->tx_ring;
+	struct e1000_rx_ring *rx_ring = adapter->rx_ring;
+	int i;
+
+	if (!netif_msg_hw(adapter))
+		return;
+
+	/* Print Registers */
+	e1000_regdump(adapter);
+
+	/*
+	 * transmit dump
+	 */
+	pr_info("TX Desc ring0 dump\n");
+
+	/* Transmit Descriptor Formats - DEXT[29] is 0 (Legacy) or 1 (Extended)
+	 *
+	 * Legacy Transmit Descriptor
+	 *   +--------------------------------------------------------------+
+	 * 0 |         Buffer Address [63:0] (Reserved on Write Back)       |
+	 *   +--------------------------------------------------------------+
+	 * 8 | Special  |    CSS     | Status |  CMD    |  CSO   |  Length  |
+	 *   +--------------------------------------------------------------+
+	 *   63       48 47        36 35    32 31     24 23    16 15        0
+	 *
+	 * Extended Context Descriptor (DTYP=0x0) for TSO or checksum offload
+	 *   63      48 47    40 39       32 31             16 15    8 7      0
+	 *   +----------------------------------------------------------------+
+	 * 0 |  TUCSE  | TUCS0  |   TUCSS   |     IPCSE       | IPCS0 | IPCSS |
+	 *   +----------------------------------------------------------------+
+	 * 8 |   MSS   | HDRLEN | RSV | STA | TUCMD | DTYP |      PAYLEN      |
+	 *   +----------------------------------------------------------------+
+	 *   63      48 47    40 39 36 35 32 31   24 23  20 19                0
+	 *
+	 * Extended Data Descriptor (DTYP=0x1)
+	 *   +----------------------------------------------------------------+
+	 * 0 |                     Buffer Address [63:0]                      |
+	 *   +----------------------------------------------------------------+
+	 * 8 | VLAN tag |  POPTS  | Rsvd | Status | Command | DTYP |  DTALEN  |
+	 *   +----------------------------------------------------------------+
+	 *   63       48 47     40 39  36 35    32 31     24 23  20 19        0
+	 */
+	printk(KERN_INFO "Tc[desc]     [Ce CoCsIpceCoS] [MssHlRSCm0Plen] [bi->dma       ]"
+	       " leng  ntw timestmp         bi->skb\n");
+	printk(KERN_INFO "Td[desc]     [address 63:0  ] [VlaPoRSCm1Dlen] [bi->dma       ]"
+	       " leng  ntw timestmp         bi->skb\n");
+
+	if (!netif_msg_tx_done(adapter))
+		goto rx_ring_summary;
+
+	for (i = 0; tx_ring->desc && (i < tx_ring->count); i++) {
+		struct e1000_tx_desc *tx_desc = E1000_TX_DESC(*tx_ring, i);
+		struct e1000_buffer *buffer_info = &tx_ring->buffer_info[i];
+		struct my_u { u64 a; u64 b; };
+		struct my_u *u = (struct my_u *)tx_desc;
+		printk(KERN_INFO "T%c[0x%03X]    %016llX %016llX %016llX %04X  %3X "
+		       "%016llX %p",
+		       ((le64_to_cpu(u->b) & (1<<20)) ? 'd' : 'c'), i,
+		       le64_to_cpu(u->a), le64_to_cpu(u->b),
+		       (u64)buffer_info->dma, buffer_info->length,
+		       buffer_info->next_to_watch, (u64)buffer_info->time_stamp,
+		       buffer_info->skb);
+		if (i == tx_ring->next_to_use && i == tx_ring->next_to_clean)
+			printk(KERN_CONT" NTC/U\n");
+		else if (i == tx_ring->next_to_use)
+			printk(KERN_CONT " NTU\n");
+		else if (i == tx_ring->next_to_clean)
+			printk(KERN_CONT " NTC\n");
+		else
+			printk(KERN_CONT "\n");
+
+
+		if (netif_msg_pktdata(adapter) && buffer_info->dma != 0)
+			print_hex_dump(KERN_INFO, "", DUMP_PREFIX_ADDRESS,
+					16, 1, phys_to_virt(buffer_info->dma),
+					buffer_info->length, true);
+	}
+
+rx_ring_summary:
+	/*
+	 * receive dump
+	 */
+	pr_info("\nRX Desc ring dump\n");
+
+	/* Legacy Receive Descriptor Format
+	 *
+	 * +-----------------------------------------------------+
+	 * |                Buffer Address [63:0]                |
+	 * +-----------------------------------------------------+
+	 * | VLAN Tag | Errors | Status 0 | Packet csum | Length |
+	 * +-----------------------------------------------------+
+	 * 63       48 47    40 39      32 31         16 15      0
+	 */
+	printk(KERN_INFO "R[desc]      [address 63:0  ] [vl er S cks ln] "
+		"[bi->dma       ] [bi->skb]\n");
+
+	if (!netif_msg_rx_status(adapter))
+		goto exit;
+
+	for (i = 0; rx_ring->desc && (i < rx_ring->count); i++) {
+		struct e1000_rx_desc *rx_desc = E1000_RX_DESC(*rx_ring, i);
+		struct e1000_buffer *buffer_info = &rx_ring->buffer_info[i];
+		struct my_u { u64 a; u64 b; };
+		struct my_u *u = (struct my_u *)rx_desc;
+		printk(KERN_INFO "R[0x%03X]     %016llX %016llX %016llX %p",
+			i, le64_to_cpu(u->a), le64_to_cpu(u->b),
+			(u64)buffer_info->dma, buffer_info->skb);
+		if (i == rx_ring->next_to_use)
+			printk(KERN_CONT " NTU\n");
+		else if (i == rx_ring->next_to_clean)
+			printk(KERN_CONT " NTC\n");
+		else
+			printk(KERN_CONT "\n");
+
+		if (netif_msg_pktdata(adapter))
+			print_hex_dump(KERN_INFO, "",
+				DUMP_PREFIX_ADDRESS, 16, 1,
+				phys_to_virt(buffer_info->dma),
+				buffer_info->length, true);
+
+	} /* for */
+
+	/* dump the descriptor caches */
+	/* rx */
+	printk(KERN_INFO "e1000: Rx descriptor cache in 64bit format\n");
+	for (i = 0x6000; i <= 0x63FF ; i += 0x10) {
+		printk(KERN_INFO "R%04X: %08X|%08X %08X|%08X\n",
+				i,
+				readl(adapter->hw.hw_addr + i+4),
+				readl(adapter->hw.hw_addr + i),
+				readl(adapter->hw.hw_addr + i+12),
+				readl(adapter->hw.hw_addr + i+8));
+	}
+	/* tx */
+	printk(KERN_INFO "e1000: Tx descriptor cache in 64bit format\n");
+	for (i = 0x7000; i <= 0x73FF ; i += 0x10) {
+		printk(KERN_INFO "T%04X: %08X|%08X %08X|%08X\n",
+				i,
+				readl(adapter->hw.hw_addr + i+4),
+				readl(adapter->hw.hw_addr + i),
+				readl(adapter->hw.hw_addr + i+12),
+				readl(adapter->hw.hw_addr + i+8));
+	}
+exit:
+	return;
+}
+
 /**
  * e1000_tx_timeout - Respond to a Tx Hang
  * @netdev: network interface device structure
@@ -3260,6 +3482,7 @@ static void e1000_reset_task(struct work_struct *work)
 
 	if (test_bit(__E1000_DOWN, &adapter->flags))
 		return;
+	e_err(drv, "Reset adapter\n");
 	e1000_reinit_safe(adapter);
 }
 
@@ -3677,6 +3900,7 @@ static bool e1000_clean_tx_irq(struct e1000_adapter *adapter,
 				eop,
 				jiffies,
 				eop_desc->upper.fields.status);
+			e1000_dump(adapter);
 			netif_stop_queue(netdev);
 		}
 	}
-- 
1.7.7.6

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

* [net-next 03/11] e1000e: add missing initializers reported when compiling with W=1
  2012-02-07 12:33 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
  2012-02-07 12:33 ` [net-next 01/11] igbvf: refactor Interrupt Throttle Rate code Jeff Kirsher
  2012-02-07 12:33 ` [net-next 02/11] e1000: Adding e1000_dump function Jeff Kirsher
@ 2012-02-07 12:33 ` Jeff Kirsher
  2012-02-07 12:33 ` [net-next 04/11] e1000e: cleanup - check return values consistently Jeff Kirsher
                   ` (8 subsequent siblings)
  11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-02-07 12:33 UTC (permalink / raw)
  To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher

From: Bruce Allan <bruce.w.allan@intel.com>

warning: missing initializer

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 drivers/net/ethernet/intel/e1000e/netdev.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index 1a8dd2f..c05137f 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -137,7 +137,7 @@ static const struct e1000_reg_info e1000_reg_info_tbl[] = {
 	{E1000_TDFPC, "TDFPC"},
 
 	/* List Terminator */
-	{}
+	{0, NULL}
 };
 
 /*
@@ -6502,7 +6502,7 @@ static DEFINE_PCI_DEVICE_TABLE(e1000_pci_tbl) = {
 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH2_LV_LM), board_pch2lan },
 	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH2_LV_V), board_pch2lan },
 
-	{ }	/* terminate list */
+	{ 0, 0, 0, 0, 0, 0, 0 }	/* terminate list */
 };
 MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);
 
@@ -6521,7 +6521,9 @@ static struct pci_driver e1000_driver = {
 	.probe    = e1000_probe,
 	.remove   = __devexit_p(e1000_remove),
 #ifdef CONFIG_PM
-	.driver.pm = &e1000_pm_ops,
+	.driver   = {
+		.pm = &e1000_pm_ops,
+	},
 #endif
 	.shutdown = e1000_shutdown,
 	.err_handler = &e1000_err_handler
-- 
1.7.7.6

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

* [net-next 04/11] e1000e: cleanup - check return values consistently
  2012-02-07 12:33 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
                   ` (2 preceding siblings ...)
  2012-02-07 12:33 ` [net-next 03/11] e1000e: add missing initializers reported when compiling with W=1 Jeff Kirsher
@ 2012-02-07 12:33 ` Jeff Kirsher
  2012-02-07 12:33 ` [net-next 05/11] e1000e: cleanup e1000_init_mac_params_80003es2lan() Jeff Kirsher
                   ` (7 subsequent siblings)
  11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-02-07 12:33 UTC (permalink / raw)
  To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher

From: Bruce Allan <bruce.w.allan@intel.com>

The majority of the e1000e code checks most function return values using a
test like 'if (ret_val)' or 'if (!ret_val)' but there are a few instances
of 'if (ret_val == 0)'.  This patch converts the latter to the former for
consistency.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 drivers/net/ethernet/intel/e1000e/ethtool.c |    2 +-
 drivers/net/ethernet/intel/e1000e/ich8lan.c |    8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/intel/e1000e/ethtool.c b/drivers/net/ethernet/intel/e1000e/ethtool.c
index 92d5b62..f43af46 100644
--- a/drivers/net/ethernet/intel/e1000e/ethtool.c
+++ b/drivers/net/ethernet/intel/e1000e/ethtool.c
@@ -537,7 +537,7 @@ static int e1000_set_eeprom(struct net_device *netdev,
 		ret_val = e1000_read_nvm(hw, first_word, 1, &eeprom_buff[0]);
 		ptr++;
 	}
-	if (((eeprom->offset + eeprom->len) & 1) && (ret_val == 0))
+	if (((eeprom->offset + eeprom->len) & 1) && (!ret_val))
 		/* need read/modify/write of last changed EEPROM word */
 		/* only the first byte of the word is being modified */
 		ret_val = e1000_read_nvm(hw, last_word, 1,
diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
index 907b17b..0e64cc4 100644
--- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
@@ -2286,7 +2286,7 @@ static s32 e1000_flash_cycle_init_ich8lan(struct e1000_hw *hw)
 			}
 			udelay(1);
 		}
-		if (ret_val == 0) {
+		if (!ret_val) {
 			/*
 			 * Successful in waiting for previous cycle to timeout,
 			 * now set the Flash Cycle Done.
@@ -2404,7 +2404,7 @@ static s32 e1000_read_flash_data_ich8lan(struct e1000_hw *hw, u32 offset,
 		udelay(1);
 		/* Steps */
 		ret_val = e1000_flash_cycle_init_ich8lan(hw);
-		if (ret_val != 0)
+		if (ret_val)
 			break;
 
 		hsflctl.regval = er16flash(ICH_FLASH_HSFCTL);
@@ -2424,7 +2424,7 @@ static s32 e1000_read_flash_data_ich8lan(struct e1000_hw *hw, u32 offset,
 		 * read in (shift in) the Flash Data0, the order is
 		 * least significant byte first msb to lsb
 		 */
-		if (ret_val == 0) {
+		if (!ret_val) {
 			flash_data = er32flash(ICH_FLASH_FDATA0);
 			if (size == 1)
 				*data = (u8)(flash_data & 0x000000FF);
@@ -2936,7 +2936,7 @@ static s32 e1000_erase_flash_bank_ich8lan(struct e1000_hw *hw, u32 bank)
 
 			ret_val = e1000_flash_cycle_ich8lan(hw,
 					       ICH_FLASH_ERASE_COMMAND_TIMEOUT);
-			if (ret_val == 0)
+			if (!ret_val)
 				break;
 
 			/*
-- 
1.7.7.6

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

* [net-next 05/11] e1000e: cleanup e1000_init_mac_params_80003es2lan()
  2012-02-07 12:33 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
                   ` (3 preceding siblings ...)
  2012-02-07 12:33 ` [net-next 04/11] e1000e: cleanup - check return values consistently Jeff Kirsher
@ 2012-02-07 12:33 ` Jeff Kirsher
  2012-02-07 12:33 ` [net-next 06/11] e1000e: cleanup e1000_init_mac_params_82571() Jeff Kirsher
                   ` (6 subsequent siblings)
  11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-02-07 12:33 UTC (permalink / raw)
  To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher

From: Bruce Allan <bruce.w.allan@intel.com>

Combine two switch statements into one, convert a nebulous pointer to one
that is a bit more in keeping with the rest of the driver code and remove
some dead code (there are no 80003es2lan devices with fiber).  No change in
functionality, just cosmetic changes.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 drivers/net/ethernet/intel/e1000e/80003es2lan.c |   28 +++++-----------------
 1 files changed, 7 insertions(+), 21 deletions(-)

diff --git a/drivers/net/ethernet/intel/e1000e/80003es2lan.c b/drivers/net/ethernet/intel/e1000e/80003es2lan.c
index 82a5d87..9b96961 100644
--- a/drivers/net/ethernet/intel/e1000e/80003es2lan.c
+++ b/drivers/net/ethernet/intel/e1000e/80003es2lan.c
@@ -205,15 +205,20 @@ static s32 e1000_init_mac_params_80003es2lan(struct e1000_adapter *adapter)
 {
 	struct e1000_hw *hw = &adapter->hw;
 	struct e1000_mac_info *mac = &hw->mac;
-	struct e1000_mac_operations *func = &mac->ops;
 
-	/* Set media type */
+	/* Set media type and media-dependent function pointers */
 	switch (adapter->pdev->device) {
 	case E1000_DEV_ID_80003ES2LAN_SERDES_DPT:
 		hw->phy.media_type = e1000_media_type_internal_serdes;
+		mac->ops.check_for_link = e1000e_check_for_serdes_link;
+		mac->ops.setup_physical_interface =
+		    e1000e_setup_fiber_serdes_link;
 		break;
 	default:
 		hw->phy.media_type = e1000_media_type_copper;
+		mac->ops.check_for_link = e1000e_check_for_copper_link;
+		mac->ops.setup_physical_interface =
+		    e1000_setup_copper_link_80003es2lan;
 		break;
 	}
 
@@ -230,25 +235,6 @@ static s32 e1000_init_mac_params_80003es2lan(struct e1000_adapter *adapter)
 	/* Adaptive IFS not supported */
 	mac->adaptive_ifs = false;
 
-	/* check for link */
-	switch (hw->phy.media_type) {
-	case e1000_media_type_copper:
-		func->setup_physical_interface = e1000_setup_copper_link_80003es2lan;
-		func->check_for_link = e1000e_check_for_copper_link;
-		break;
-	case e1000_media_type_fiber:
-		func->setup_physical_interface = e1000e_setup_fiber_serdes_link;
-		func->check_for_link = e1000e_check_for_fiber_link;
-		break;
-	case e1000_media_type_internal_serdes:
-		func->setup_physical_interface = e1000e_setup_fiber_serdes_link;
-		func->check_for_link = e1000e_check_for_serdes_link;
-		break;
-	default:
-		return -E1000_ERR_CONFIG;
-		break;
-	}
-
 	/* set lan id for port to determine which phy lock to use */
 	hw->mac.ops.set_lan_id(hw);
 
-- 
1.7.7.6

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

* [net-next 06/11] e1000e: cleanup e1000_init_mac_params_82571()
  2012-02-07 12:33 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
                   ` (4 preceding siblings ...)
  2012-02-07 12:33 ` [net-next 05/11] e1000e: cleanup e1000_init_mac_params_80003es2lan() Jeff Kirsher
@ 2012-02-07 12:33 ` Jeff Kirsher
  2012-02-07 12:33 ` [net-next 07/11] e1000e: cleanup e1000_set_phys_id Jeff Kirsher
                   ` (5 subsequent siblings)
  11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-02-07 12:33 UTC (permalink / raw)
  To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher

From: Bruce Allan <bruce.w.allan@intel.com>

Combine two switch statements into one, convert a nebulous pointer to one
that is a bit more in keeping with the rest of the driver code and cleanup
some coding style.  No change in functionality, just cosmetic changes.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 drivers/net/ethernet/intel/e1000e/82571.c |   72 ++++++++++++-----------------
 1 files changed, 30 insertions(+), 42 deletions(-)

diff --git a/drivers/net/ethernet/intel/e1000e/82571.c b/drivers/net/ethernet/intel/e1000e/82571.c
index 844907d..4cadcc7 100644
--- a/drivers/net/ethernet/intel/e1000e/82571.c
+++ b/drivers/net/ethernet/intel/e1000e/82571.c
@@ -239,26 +239,39 @@ static s32 e1000_init_mac_params_82571(struct e1000_adapter *adapter)
 {
 	struct e1000_hw *hw = &adapter->hw;
 	struct e1000_mac_info *mac = &hw->mac;
-	struct e1000_mac_operations *func = &mac->ops;
 	u32 swsm = 0;
 	u32 swsm2 = 0;
 	bool force_clear_smbi = false;
 
-	/* Set media type */
+	/* Set media type and media-dependent function pointers */
 	switch (adapter->pdev->device) {
 	case E1000_DEV_ID_82571EB_FIBER:
 	case E1000_DEV_ID_82572EI_FIBER:
 	case E1000_DEV_ID_82571EB_QUAD_FIBER:
 		hw->phy.media_type = e1000_media_type_fiber;
+		mac->ops.setup_physical_interface =
+		    e1000_setup_fiber_serdes_link_82571;
+		mac->ops.check_for_link = e1000e_check_for_fiber_link;
+		mac->ops.get_link_up_info =
+		    e1000e_get_speed_and_duplex_fiber_serdes;
 		break;
 	case E1000_DEV_ID_82571EB_SERDES:
-	case E1000_DEV_ID_82572EI_SERDES:
 	case E1000_DEV_ID_82571EB_SERDES_DUAL:
 	case E1000_DEV_ID_82571EB_SERDES_QUAD:
+	case E1000_DEV_ID_82572EI_SERDES:
 		hw->phy.media_type = e1000_media_type_internal_serdes;
+		mac->ops.setup_physical_interface =
+		    e1000_setup_fiber_serdes_link_82571;
+		mac->ops.check_for_link = e1000_check_for_serdes_link_82571;
+		mac->ops.get_link_up_info =
+		    e1000e_get_speed_and_duplex_fiber_serdes;
 		break;
 	default:
 		hw->phy.media_type = e1000_media_type_copper;
+		mac->ops.setup_physical_interface =
+		    e1000_setup_copper_link_82571;
+		mac->ops.check_for_link = e1000e_check_for_copper_link;
+		mac->ops.get_link_up_info = e1000e_get_speed_and_duplex_copper;
 		break;
 	}
 
@@ -269,38 +282,13 @@ static s32 e1000_init_mac_params_82571(struct e1000_adapter *adapter)
 	/* Adaptive IFS supported */
 	mac->adaptive_ifs = true;
 
-	/* check for link */
-	switch (hw->phy.media_type) {
-	case e1000_media_type_copper:
-		func->setup_physical_interface = e1000_setup_copper_link_82571;
-		func->check_for_link = e1000e_check_for_copper_link;
-		func->get_link_up_info = e1000e_get_speed_and_duplex_copper;
-		break;
-	case e1000_media_type_fiber:
-		func->setup_physical_interface =
-			e1000_setup_fiber_serdes_link_82571;
-		func->check_for_link = e1000e_check_for_fiber_link;
-		func->get_link_up_info =
-			e1000e_get_speed_and_duplex_fiber_serdes;
-		break;
-	case e1000_media_type_internal_serdes:
-		func->setup_physical_interface =
-			e1000_setup_fiber_serdes_link_82571;
-		func->check_for_link = e1000_check_for_serdes_link_82571;
-		func->get_link_up_info =
-			e1000e_get_speed_and_duplex_fiber_serdes;
-		break;
-	default:
-		return -E1000_ERR_CONFIG;
-		break;
-	}
-
+	/* MAC-specific function pointers */
 	switch (hw->mac.type) {
 	case e1000_82573:
-		func->set_lan_id = e1000_set_lan_id_single_port;
-		func->check_mng_mode = e1000e_check_mng_mode_generic;
-		func->led_on = e1000e_led_on_generic;
-		func->blink_led = e1000e_blink_led_generic;
+		mac->ops.set_lan_id = e1000_set_lan_id_single_port;
+		mac->ops.check_mng_mode = e1000e_check_mng_mode_generic;
+		mac->ops.led_on = e1000e_led_on_generic;
+		mac->ops.blink_led = e1000e_blink_led_generic;
 
 		/* FWSM register */
 		mac->has_fwsm = true;
@@ -314,14 +302,14 @@ static s32 e1000_init_mac_params_82571(struct e1000_adapter *adapter)
 		break;
 	case e1000_82574:
 	case e1000_82583:
-		func->set_lan_id = e1000_set_lan_id_single_port;
-		func->check_mng_mode = e1000_check_mng_mode_82574;
-		func->led_on = e1000_led_on_82574;
+		mac->ops.set_lan_id = e1000_set_lan_id_single_port;
+		mac->ops.check_mng_mode = e1000_check_mng_mode_82574;
+		mac->ops.led_on = e1000_led_on_82574;
 		break;
 	default:
-		func->check_mng_mode = e1000e_check_mng_mode_generic;
-		func->led_on = e1000e_led_on_generic;
-		func->blink_led = e1000e_blink_led_generic;
+		mac->ops.check_mng_mode = e1000e_check_mng_mode_generic;
+		mac->ops.led_on = e1000e_led_on_generic;
+		mac->ops.blink_led = e1000e_blink_led_generic;
 
 		/* FWSM register */
 		mac->has_fwsm = true;
@@ -342,11 +330,11 @@ static s32 e1000_init_mac_params_82571(struct e1000_adapter *adapter)
 
 		if (!(swsm2 & E1000_SWSM2_LOCK)) {
 			/* Only do this for the first interface on this card */
-			ew32(SWSM2,
-			    swsm2 | E1000_SWSM2_LOCK);
+			ew32(SWSM2, swsm2 | E1000_SWSM2_LOCK);
 			force_clear_smbi = true;
-		} else
+		} else {
 			force_clear_smbi = false;
+		}
 		break;
 	default:
 		force_clear_smbi = true;
-- 
1.7.7.6

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

* [net-next 07/11] e1000e: cleanup e1000_set_phys_id
  2012-02-07 12:33 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
                   ` (5 preceding siblings ...)
  2012-02-07 12:33 ` [net-next 06/11] e1000e: cleanup e1000_init_mac_params_82571() Jeff Kirsher
@ 2012-02-07 12:33 ` Jeff Kirsher
  2012-02-07 12:33 ` [net-next 08/11] e1000e: cleanup - use braces in both branches of a conditional statement Jeff Kirsher
                   ` (4 subsequent siblings)
  11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-02-07 12:33 UTC (permalink / raw)
  To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher

From: Bruce Allan <bruce.w.allan@intel.com>

Use the existing hw pointer.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 drivers/net/ethernet/intel/e1000e/ethtool.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/intel/e1000e/ethtool.c b/drivers/net/ethernet/intel/e1000e/ethtool.c
index f43af46..fd2ba38 100644
--- a/drivers/net/ethernet/intel/e1000e/ethtool.c
+++ b/drivers/net/ethernet/intel/e1000e/ethtool.c
@@ -1856,11 +1856,11 @@ static int e1000_set_phys_id(struct net_device *netdev,
 		break;
 
 	case ETHTOOL_ID_ON:
-		adapter->hw.mac.ops.led_on(&adapter->hw);
+		hw->mac.ops.led_on(hw);
 		break;
 
 	case ETHTOOL_ID_OFF:
-		adapter->hw.mac.ops.led_off(&adapter->hw);
+		hw->mac.ops.led_off(hw);
 		break;
 	}
 	return 0;
-- 
1.7.7.6

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

* [net-next 08/11] e1000e: cleanup - use braces in both branches of a conditional statement
  2012-02-07 12:33 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
                   ` (6 preceding siblings ...)
  2012-02-07 12:33 ` [net-next 07/11] e1000e: cleanup e1000_set_phys_id Jeff Kirsher
@ 2012-02-07 12:33 ` Jeff Kirsher
  2012-02-07 12:33 ` [net-next 09/11] e1000e: fix checkpatch warning from MINMAX test Jeff Kirsher
                   ` (3 subsequent siblings)
  11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-02-07 12:33 UTC (permalink / raw)
  To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher

From: Bruce Allan <bruce.w.allan@intel.com>

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 drivers/net/ethernet/intel/e1000e/netdev.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index c05137f..02efae0 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -3756,8 +3756,9 @@ static int e1000_test_msi_interrupt(struct e1000_adapter *adapter)
 	if (adapter->flags & FLAG_MSI_TEST_FAILED) {
 		adapter->int_mode = E1000E_INT_MODE_LEGACY;
 		e_info("MSI interrupt test failed, using legacy interrupt.\n");
-	} else
+	} else {
 		e_dbg("MSI interrupt test succeeded!\n");
+	}
 
 	free_irq(adapter->pdev->irq, netdev);
 	pci_disable_msi(adapter->pdev);
-- 
1.7.7.6

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

* [net-next 09/11] e1000e: fix checkpatch warning from MINMAX test
  2012-02-07 12:33 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
                   ` (7 preceding siblings ...)
  2012-02-07 12:33 ` [net-next 08/11] e1000e: cleanup - use braces in both branches of a conditional statement Jeff Kirsher
@ 2012-02-07 12:33 ` Jeff Kirsher
  2012-02-07 12:33 ` [net-next 10/11] e1000e: fix sparse warnings with -D__CHECK_ENDIAN__ Jeff Kirsher
                   ` (2 subsequent siblings)
  11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-02-07 12:33 UTC (permalink / raw)
  To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher

From: Bruce Allan <bruce.w.allan@intel.com>

WARNING: min() should probably be min_t(unsigned int, 4, skb->data_len)

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 drivers/net/ethernet/intel/e1000e/netdev.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index 02efae0..a9f25fc 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -5023,7 +5023,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
 		if (skb->data_len && (hdr_len == len)) {
 			unsigned int pull_size;
 
-			pull_size = min((unsigned int)4, skb->data_len);
+			pull_size = min_t(unsigned int, 4, skb->data_len);
 			if (!__pskb_pull_tail(skb, pull_size)) {
 				e_err("__pskb_pull_tail failed.\n");
 				dev_kfree_skb_any(skb);
-- 
1.7.7.6

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

* [net-next 10/11] e1000e: fix sparse warnings with -D__CHECK_ENDIAN__
  2012-02-07 12:33 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
                   ` (8 preceding siblings ...)
  2012-02-07 12:33 ` [net-next 09/11] e1000e: fix checkpatch warning from MINMAX test Jeff Kirsher
@ 2012-02-07 12:33 ` Jeff Kirsher
  2012-02-07 12:58   ` David Laight
  2012-02-07 12:33 ` [net-next 11/11] e1000e: minor whitespace and indentation cleanup Jeff Kirsher
  2012-02-07 17:27 ` [net-next 00/11][pull request] Intel Wired LAN Driver Updates David Miller
  11 siblings, 1 reply; 22+ messages in thread
From: Jeff Kirsher @ 2012-02-07 12:33 UTC (permalink / raw)
  To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher

From: Bruce Allan <bruce.w.allan@intel.com>

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 drivers/net/ethernet/intel/e1000e/ethtool.c |    2 +-
 drivers/net/ethernet/intel/e1000e/netdev.c  |   15 ++++++++-------
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ethernet/intel/e1000e/ethtool.c b/drivers/net/ethernet/intel/e1000e/ethtool.c
index fd2ba38..f4dc0fa 100644
--- a/drivers/net/ethernet/intel/e1000e/ethtool.c
+++ b/drivers/net/ethernet/intel/e1000e/ethtool.c
@@ -553,7 +553,7 @@ static int e1000_set_eeprom(struct net_device *netdev,
 	memcpy(ptr, bytes, eeprom->len);
 
 	for (i = 0; i < last_word - first_word + 1; i++)
-		eeprom_buff[i] = cpu_to_le16(eeprom_buff[i]);
+		cpu_to_le16s(&eeprom_buff[i]);
 
 	ret_val = e1000_write_nvm(hw, first_word,
 				  last_word - first_word + 1, eeprom_buff);
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index a9f25fc..2ac1164 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -183,18 +183,18 @@ static void e1000e_dump(struct e1000_adapter *adapter)
 	struct e1000_ring *tx_ring = adapter->tx_ring;
 	struct e1000_tx_desc *tx_desc;
 	struct my_u0 {
-		u64 a;
-		u64 b;
+		__le64 a;
+		__le64 b;
 	} *u0;
 	struct e1000_buffer *buffer_info;
 	struct e1000_ring *rx_ring = adapter->rx_ring;
 	union e1000_rx_desc_packet_split *rx_desc_ps;
 	union e1000_rx_desc_extended *rx_desc;
 	struct my_u1 {
-		u64 a;
-		u64 b;
-		u64 c;
-		u64 d;
+		__le64 a;
+		__le64 b;
+		__le64 c;
+		__le64 d;
 	} *u1;
 	u32 staterr;
 	int i = 0;
@@ -5963,7 +5963,8 @@ static void e1000_eeprom_checks(struct e1000_adapter *adapter)
 		return;
 
 	ret_val = e1000_read_nvm(hw, NVM_INIT_CONTROL2_REG, 1, &buf);
-	if (!ret_val && (!(le16_to_cpu(buf) & (1 << 0)))) {
+	le16_to_cpus(&buf);
+	if (!ret_val && (!(buf & (1 << 0)))) {
 		/* Deep Smart Power Down (DSPD) */
 		dev_warn(&adapter->pdev->dev,
 			 "Warning: detected DSPD enabled in EEPROM\n");
-- 
1.7.7.6

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

* [net-next 11/11] e1000e: minor whitespace and indentation cleanup
  2012-02-07 12:33 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
                   ` (9 preceding siblings ...)
  2012-02-07 12:33 ` [net-next 10/11] e1000e: fix sparse warnings with -D__CHECK_ENDIAN__ Jeff Kirsher
@ 2012-02-07 12:33 ` Jeff Kirsher
  2012-02-07 17:27 ` [net-next 00/11][pull request] Intel Wired LAN Driver Updates David Miller
  11 siblings, 0 replies; 22+ messages in thread
From: Jeff Kirsher @ 2012-02-07 12:33 UTC (permalink / raw)
  To: davem; +Cc: Bruce Allan, netdev, gospo, sassmann, Jeff Kirsher

From: Bruce Allan <bruce.w.allan@intel.com>

Cleanup of some whitespace and indentation of a single code block.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
---
 drivers/net/ethernet/intel/e1000e/ich8lan.c |    4 +-
 drivers/net/ethernet/intel/e1000e/netdev.c  |   76 ++++++++++++++------------
 2 files changed, 43 insertions(+), 37 deletions(-)

diff --git a/drivers/net/ethernet/intel/e1000e/ich8lan.c b/drivers/net/ethernet/intel/e1000e/ich8lan.c
index 0e64cc4..5061d4d 100644
--- a/drivers/net/ethernet/intel/e1000e/ich8lan.c
+++ b/drivers/net/ethernet/intel/e1000e/ich8lan.c
@@ -280,8 +280,8 @@ static inline void __ew32flash(struct e1000_hw *hw, unsigned long reg, u32 val)
 
 #define er16flash(reg)		__er16flash(hw, (reg))
 #define er32flash(reg)		__er32flash(hw, (reg))
-#define ew16flash(reg,val)	__ew16flash(hw, (reg), (val))
-#define ew32flash(reg,val)	__ew32flash(hw, (reg), (val))
+#define ew16flash(reg, val)	__ew16flash(hw, (reg), (val))
+#define ew32flash(reg, val)	__ew32flash(hw, (reg), (val))
 
 static void e1000_toggle_lanphypc_value_ich8lan(struct e1000_hw *hw)
 {
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index 2ac1164..293a760 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -1267,43 +1267,49 @@ static bool e1000_clean_rx_irq_ps(struct e1000_ring *rx_ring, int *work_done,
 		skb_put(skb, length);
 
 		{
-		/*
-		 * this looks ugly, but it seems compiler issues make it
-		 * more efficient than reusing j
-		 */
-		int l1 = le16_to_cpu(rx_desc->wb.upper.length[0]);
-
-		/*
-		 * page alloc/put takes too long and effects small packet
-		 * throughput, so unsplit small packets and save the alloc/put
-		 * only valid in softirq (napi) context to call kmap_*
-		 */
-		if (l1 && (l1 <= copybreak) &&
-		    ((length + l1) <= adapter->rx_ps_bsize0)) {
-			u8 *vaddr;
-
-			ps_page = &buffer_info->ps_pages[0];
+			/*
+			 * this looks ugly, but it seems compiler issues make
+			 * it more efficient than reusing j
+			 */
+			int l1 = le16_to_cpu(rx_desc->wb.upper.length[0]);
 
 			/*
-			 * there is no documentation about how to call
-			 * kmap_atomic, so we can't hold the mapping
-			 * very long
+			 * page alloc/put takes too long and effects small
+			 * packet throughput, so unsplit small packets and
+			 * save the alloc/put only valid in softirq (napi)
+			 * context to call kmap_*
 			 */
-			dma_sync_single_for_cpu(&pdev->dev, ps_page->dma,
-						PAGE_SIZE, DMA_FROM_DEVICE);
-			vaddr = kmap_atomic(ps_page->page, KM_SKB_DATA_SOFTIRQ);
-			memcpy(skb_tail_pointer(skb), vaddr, l1);
-			kunmap_atomic(vaddr, KM_SKB_DATA_SOFTIRQ);
-			dma_sync_single_for_device(&pdev->dev, ps_page->dma,
-						   PAGE_SIZE, DMA_FROM_DEVICE);
-
-			/* remove the CRC */
-			if (!(adapter->flags2 & FLAG2_CRC_STRIPPING))
-				l1 -= 4;
-
-			skb_put(skb, l1);
-			goto copydone;
-		} /* if */
+			if (l1 && (l1 <= copybreak) &&
+			    ((length + l1) <= adapter->rx_ps_bsize0)) {
+				u8 *vaddr;
+
+				ps_page = &buffer_info->ps_pages[0];
+
+				/*
+				 * there is no documentation about how to call
+				 * kmap_atomic, so we can't hold the mapping
+				 * very long
+				 */
+				dma_sync_single_for_cpu(&pdev->dev,
+							ps_page->dma,
+							PAGE_SIZE,
+							DMA_FROM_DEVICE);
+				vaddr = kmap_atomic(ps_page->page,
+						    KM_SKB_DATA_SOFTIRQ);
+				memcpy(skb_tail_pointer(skb), vaddr, l1);
+				kunmap_atomic(vaddr, KM_SKB_DATA_SOFTIRQ);
+				dma_sync_single_for_device(&pdev->dev,
+							   ps_page->dma,
+							   PAGE_SIZE,
+							   DMA_FROM_DEVICE);
+
+				/* remove the CRC */
+				if (!(adapter->flags2 & FLAG2_CRC_STRIPPING))
+					l1 -= 4;
+
+				skb_put(skb, l1);
+				goto copydone;
+			} /* if */
 		}
 
 		for (j = 0; j < PS_PAGE_BUFFERS; j++) {
@@ -4969,7 +4975,7 @@ static int e1000_maybe_stop_tx(struct e1000_ring *tx_ring, int size)
 	return __e1000_maybe_stop_tx(tx_ring, size);
 }
 
-#define TXD_USE_COUNT(S, X) (((S) >> (X)) + 1 )
+#define TXD_USE_COUNT(S, X) (((S) >> (X)) + 1)
 static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
 				    struct net_device *netdev)
 {
-- 
1.7.7.6

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

* RE: [net-next 10/11] e1000e: fix sparse warnings with -D__CHECK_ENDIAN__
  2012-02-07 12:33 ` [net-next 10/11] e1000e: fix sparse warnings with -D__CHECK_ENDIAN__ Jeff Kirsher
@ 2012-02-07 12:58   ` David Laight
  2012-02-07 17:16     ` David Miller
  0 siblings, 1 reply; 22+ messages in thread
From: David Laight @ 2012-02-07 12:58 UTC (permalink / raw)
  To: Jeff Kirsher, davem; +Cc: Bruce Allan, netdev, gospo, sassmann

 
>  	for (i = 0; i < last_word - first_word + 1; i++)
> -		eeprom_buff[i] = cpu_to_le16(eeprom_buff[i]);
> +		cpu_to_le16s(&eeprom_buff[i]);

The old version is likely to generate much better code.

	David

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

* Re: [net-next 02/11] e1000: Adding e1000_dump function
  2012-02-07 12:33 ` [net-next 02/11] e1000: Adding e1000_dump function Jeff Kirsher
@ 2012-02-07 15:40   ` Joe Perches
  2012-02-07 18:19     ` [PATCH net-next] e1000: Neaten " Joe Perches
  2012-02-07 17:38   ` [net-next 02/11] e1000: Adding " Michal Kubeček
  1 sibling, 1 reply; 22+ messages in thread
From: Joe Perches @ 2012-02-07 15:40 UTC (permalink / raw)
  To: Jeff Kirsher; +Cc: davem, Tushar Dave, netdev, gospo, sassmann

On Tue, 2012-02-07 at 04:33 -0800, Jeff Kirsher wrote:
> diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c

trivia:

> @@ -3239,6 +3239,228 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
>  	return NETDEV_TX_OK;
>  }
>  
> +#define NUM_REGS 38 /* 1 based count */
> +static void e1000_regdump(struct e1000_adapter *adapter)
> +{
> +	struct e1000_hw *hw = &adapter->hw;
> +	u32 regs[NUM_REGS];
> +	u32 *regs_buff = regs;
> +	int i = 0;
> +
> +	char *reg_name[] = {

static const char * const reg_name[]
(and the layout is poor)

> +	"CTRL",  "STATUS",
> +	"RCTL", "RDLEN", "RDH", "RDT", "RDTR",
> +	"TCTL", "TDBAL", "TDBAH", "TDLEN", "TDH", "TDT",
> +	"TIDV", "TXDCTL", "TADV", "TARC0",
> +	"TDBAL1", "TDBAH1", "TDLEN1", "TDH1", "TDT1",
> +	"TXDCTL1", "TARC1",
> +	"CTRL_EXT", "ERT", "RDBAL", "RDBAH",
> +	"TDFH", "TDFT", "TDFHS", "TDFTS", "TDFPC",
> +	"RDFH", "RDFT", "RDFHS", "RDFTS", "RDFPC"
> +	};
> +	pr_info("Register dump\n");
> +	for (i = 0; i < NUM_REGS; i++) {
> +		printk(KERN_INFO "%-15s  %08x\n",
> +		reg_name[i], regs_buff[i]);
> +	}

		pr_info(%-15s  %08x\n", reg_name[i], regs_buff[i]);

[]
> +static void e1000_dump(struct e1000_adapter *adapter)
[]
> +	printk(KERN_INFO "Tc[desc]     [Ce CoCsIpceCoS] [MssHlRSCm0Plen] [bi->dma       ]"
> +	       " leng  ntw timestmp         bi->skb\n");
> +	printk(KERN_INFO "Td[desc]     [address 63:0  ] [VlaPoRSCm1Dlen] [bi->dma       ]"
> +	       " leng  ntw timestmp         bi->skb\n");

pr_info

> +
> +	if (!netif_msg_tx_done(adapter))
> +		goto rx_ring_summary;
> +
> +	for (i = 0; tx_ring->desc && (i < tx_ring->count); i++) {
> +		struct e1000_tx_desc *tx_desc = E1000_TX_DESC(*tx_ring, i);
> +		struct e1000_buffer *buffer_info = &tx_ring->buffer_info[i];
> +		struct my_u { u64 a; u64 b; };
> +		struct my_u *u = (struct my_u *)tx_desc;
> +		printk(KERN_INFO "T%c[0x%03X]    %016llX %016llX %016llX %04X  %3X "
> +		       "%016llX %p",
> +		       ((le64_to_cpu(u->b) & (1<<20)) ? 'd' : 'c'), i,
> +		       le64_to_cpu(u->a), le64_to_cpu(u->b),
> +		       (u64)buffer_info->dma, buffer_info->length,
> +		       buffer_info->next_to_watch, (u64)buffer_info->time_stamp,
> +		       buffer_info->skb);
> +		if (i == tx_ring->next_to_use &&bet i == tx_ring->next_to_clean)
> +			printk(KERN_CONT" NTC/U\n");
> +		else if (i == tx_ring->next_to_use)
> +			printk(KERN_CONT " NTU\n");
> +		else if (i == tx_ring->next_to_clean)
> +			printk(KERN_CONT " NTC\n");
> +		else
> +			printk(KERN_CONT "\n");
> +


better to use a temporary char * for NTC/NTU/NTC/""
and use a single pr_info()

> +	for (i = 0; rx_ring->desc && (i < rx_ring->count); i++) {
> +		struct e1000_rx_desc *rx_desc = E1000_RX_DESC(*rx_ring, i);
> +		struct e1000_buffer *buffer_info = &rx_ring->buffer_info[i];
> +		struct my_u { u64 a; u64 b; };
> +		struct my_u *u = (struct my_u *)rx_desc;
> +		printk(KERN_INFO "R[0x%03X]     %016llX %016llX %016llX %p",
> +			i, le64_to_cpu(u->a), le64_to_cpu(u->b),
> +			(u64)buffer_info->dma, buffer_info->skb);
> +		if (i == rx_ring->next_to_use)
> +			printk(KERN_CONT " NTU\n");
> +		else if (i == rx_ring->next_to_clean)
> +			printk(KERN_CONT " NTC\n");
> +		else
> +			printk(KERN_CONT "\n");

temporary here too

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

* Re: [net-next 10/11] e1000e: fix sparse warnings with -D__CHECK_ENDIAN__
  2012-02-07 12:58   ` David Laight
@ 2012-02-07 17:16     ` David Miller
  0 siblings, 0 replies; 22+ messages in thread
From: David Miller @ 2012-02-07 17:16 UTC (permalink / raw)
  To: David.Laight; +Cc: jeffrey.t.kirsher, bruce.w.allan, netdev, gospo, sassmann

From: "David Laight" <David.Laight@ACULAB.COM>
Date: Tue, 7 Feb 2012 12:58:35 -0000

>  
>>  	for (i = 0; i < last_word - first_word + 1; i++)
>> -		eeprom_buff[i] = cpu_to_le16(eeprom_buff[i]);
>> +		cpu_to_le16s(&eeprom_buff[i]);
> 
> The old version is likely to generate much better code.

Not on cpus that have swap-endian loads and stores.

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

* Re: [net-next 00/11][pull request] Intel Wired LAN Driver Updates
  2012-02-07 12:33 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
                   ` (10 preceding siblings ...)
  2012-02-07 12:33 ` [net-next 11/11] e1000e: minor whitespace and indentation cleanup Jeff Kirsher
@ 2012-02-07 17:27 ` David Miller
  11 siblings, 0 replies; 22+ messages in thread
From: David Miller @ 2012-02-07 17:27 UTC (permalink / raw)
  To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann

From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Tue,  7 Feb 2012 04:33:47 -0800

> The following series contains updates to e1000, igbvf and e1000e.
> Majority of the updates are to e1000e and do the following:
>  - cleanup 82571 and 80003es2lan code
>  - fix checkpatch and sparse warnings
>  - fix whitespace/indentation
>  - add missing initializers
> 
> The following are changes since commit 59d74026fa4b5df72a268f1e9578af500154ad07:
>   Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next
> and are available in the git repository at:
>   git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master

Pulled, thanks Jeff.

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

* Re: [net-next 02/11] e1000: Adding e1000_dump function
  2012-02-07 12:33 ` [net-next 02/11] e1000: Adding e1000_dump function Jeff Kirsher
  2012-02-07 15:40   ` Joe Perches
@ 2012-02-07 17:38   ` Michal Kubeček
  2012-02-08 18:39     ` Dave, Tushar N
  1 sibling, 1 reply; 22+ messages in thread
From: Michal Kubeček @ 2012-02-07 17:38 UTC (permalink / raw)
  To: netdev; +Cc: Jeff Kirsher, davem, Tushar Dave, gospo, sassmann, jbeulich

On Tuesday 07 of February 2012 04:33EN, Jeff Kirsher wrote:
> +		if (netif_msg_pktdata(adapter) && buffer_info->dma != 0)
> +			print_hex_dump(KERN_INFO, "", DUMP_PREFIX_ADDRESS,
> +					16, 1, phys_to_virt(buffer_info->dma),
> +					buffer_info->length, true);

This might cause problems in Xen environment, we encountered a crash in 
e1000e where phys_to_virt() is used the same way. I'm not familiar with 
the details but this is what Jan Beulich wrote about it:

> And the use of phys_to_virt() here seems wrong - buffer_info->dma,
> afaict, is being obtained via the dma_map_*() APIs, which do NOT
> return a physical address (the fact that what they return is identical
> to the corresponding physical address on native doesn't mean this is
> universally so).
> 
> bus_to_virt() is what should be used here on Xen (though that isn't
> universally correct either afaik, but there simply is no
> dma_to_virt(); it *is* consistent on x86 and ia64 at least, while
> ppc64 is lacking a definition altogether [I would be very surprised
> though if this use of phys_to_virt() was correct on this arch, given
> that e.g. dma_direct_map_page() uses get_dma_offset() to obtain the
> DMA address]).

                                                         Michal Kubeček

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

* [PATCH net-next] e1000: Neaten e1000_dump function
  2012-02-07 15:40   ` Joe Perches
@ 2012-02-07 18:19     ` Joe Perches
  2012-02-07 19:09       ` Dave, Tushar N
  0 siblings, 1 reply; 22+ messages in thread
From: Joe Perches @ 2012-02-07 18:19 UTC (permalink / raw)
  To: Jeff Kirsher; +Cc: davem, Tushar Dave, netdev, gospo, sassmann

Use pr_<level> for printk
Use temporary instead of multiple pr_conts
Coalesce formats.

Save a few bytes of object code too:

$ size drivers/net/ethernet/intel/e1000/e1000_main.o*
   text	   data	    bss	    dec	    hex	filename
  60507	    369	  14120	  74996	  124f4	drivers/net/ethernet/intel/e1000/e1000_main.o.new
  60717	    369	  14176	  75262	  125fe	drivers/net/ethernet/intel/e1000/e1000_main.o.old

Signed-off-by: Joe Perches <joe@perches.com>
---
diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
index 1f86a70..1370057 100644
--- a/drivers/net/ethernet/intel/e1000/e1000_main.c
+++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
@@ -3247,16 +3247,16 @@ static void e1000_regdump(struct e1000_adapter *adapter)
 	u32 *regs_buff = regs;
 	int i = 0;
 
-	char *reg_name[] = {
-	"CTRL",  "STATUS",
-	"RCTL", "RDLEN", "RDH", "RDT", "RDTR",
-	"TCTL", "TDBAL", "TDBAH", "TDLEN", "TDH", "TDT",
-	"TIDV", "TXDCTL", "TADV", "TARC0",
-	"TDBAL1", "TDBAH1", "TDLEN1", "TDH1", "TDT1",
-	"TXDCTL1", "TARC1",
-	"CTRL_EXT", "ERT", "RDBAL", "RDBAH",
-	"TDFH", "TDFT", "TDFHS", "TDFTS", "TDFPC",
-	"RDFH", "RDFT", "RDFHS", "RDFTS", "RDFPC"
+	static const char * const reg_name[] = {
+		"CTRL",  "STATUS",
+		"RCTL", "RDLEN", "RDH", "RDT", "RDTR",
+		"TCTL", "TDBAL", "TDBAH", "TDLEN", "TDH", "TDT",
+		"TIDV", "TXDCTL", "TADV", "TARC0",
+		"TDBAL1", "TDBAH1", "TDLEN1", "TDH1", "TDT1",
+		"TXDCTL1", "TARC1",
+		"CTRL_EXT", "ERT", "RDBAL", "RDBAH",
+		"TDFH", "TDFT", "TDFHS", "TDFTS", "TDFPC",
+		"RDFH", "RDFT", "RDFHS", "RDFTS", "RDFPC"
 	};
 
 	regs_buff[0]  = er32(CTRL);
@@ -3302,10 +3302,8 @@ static void e1000_regdump(struct e1000_adapter *adapter)
 	regs_buff[37] = er32(RDFPC);
 
 	pr_info("Register dump\n");
-	for (i = 0; i < NUM_REGS; i++) {
-		printk(KERN_INFO "%-15s  %08x\n",
-		reg_name[i], regs_buff[i]);
-	}
+	for (i = 0; i < NUM_REGS; i++)
+		pr_info("%-15s  %08x\n", reg_name[i], regs_buff[i]);
 }
 
 /*
@@ -3356,10 +3354,8 @@ static void e1000_dump(struct e1000_adapter *adapter)
 	 *   +----------------------------------------------------------------+
 	 *   63       48 47     40 39  36 35    32 31     24 23  20 19        0
 	 */
-	printk(KERN_INFO "Tc[desc]     [Ce CoCsIpceCoS] [MssHlRSCm0Plen] [bi->dma       ]"
-	       " leng  ntw timestmp         bi->skb\n");
-	printk(KERN_INFO "Td[desc]     [address 63:0  ] [VlaPoRSCm1Dlen] [bi->dma       ]"
-	       " leng  ntw timestmp         bi->skb\n");
+	pr_info("Tc[desc]     [Ce CoCsIpceCoS] [MssHlRSCm0Plen] [bi->dma       ] leng  ntw timestmp         bi->skb\n");
+	pr_info("Td[desc]     [address 63:0  ] [VlaPoRSCm1Dlen] [bi->dma       ] leng  ntw timestmp         bi->skb\n");
 
 	if (!netif_msg_tx_done(adapter))
 		goto rx_ring_summary;
@@ -3369,21 +3365,23 @@ static void e1000_dump(struct e1000_adapter *adapter)
 		struct e1000_buffer *buffer_info = &tx_ring->buffer_info[i];
 		struct my_u { u64 a; u64 b; };
 		struct my_u *u = (struct my_u *)tx_desc;
-		printk(KERN_INFO "T%c[0x%03X]    %016llX %016llX %016llX %04X  %3X "
-		       "%016llX %p",
-		       ((le64_to_cpu(u->b) & (1<<20)) ? 'd' : 'c'), i,
-		       le64_to_cpu(u->a), le64_to_cpu(u->b),
-		       (u64)buffer_info->dma, buffer_info->length,
-		       buffer_info->next_to_watch, (u64)buffer_info->time_stamp,
-		       buffer_info->skb);
+		const char *type;
+
 		if (i == tx_ring->next_to_use && i == tx_ring->next_to_clean)
-			printk(KERN_CONT" NTC/U\n");
+			type = "NTC/U";
 		else if (i == tx_ring->next_to_use)
-			printk(KERN_CONT " NTU\n");
+			type = "NTU";
 		else if (i == tx_ring->next_to_clean)
-			printk(KERN_CONT " NTC\n");
+			type = "NTC";
 		else
-			printk(KERN_CONT "\n");
+			type = "";
+
+		pr_info("T%c[0x%03X]    %016llX %016llX %016llX %04X  %3X %016llX %p %s\n",
+			((le64_to_cpu(u->b) & (1<<20)) ? 'd' : 'c'), i,
+			le64_to_cpu(u->a), le64_to_cpu(u->b),
+			(u64)buffer_info->dma, buffer_info->length,
+			buffer_info->next_to_watch,
+			(u64)buffer_info->time_stamp, buffer_info->skb, type);
 
 
 		if (netif_msg_pktdata(adapter) && buffer_info->dma != 0)
@@ -3407,8 +3405,7 @@ rx_ring_summary:
 	 * +-----------------------------------------------------+
 	 * 63       48 47    40 39      32 31         16 15      0
 	 */
-	printk(KERN_INFO "R[desc]      [address 63:0  ] [vl er S cks ln] "
-		"[bi->dma       ] [bi->skb]\n");
+	pr_info("R[desc]      [address 63:0  ] [vl er S cks ln] [bi->dma       ] [bi->skb]\n");
 
 	if (!netif_msg_rx_status(adapter))
 		goto exit;
@@ -3418,15 +3415,18 @@ rx_ring_summary:
 		struct e1000_buffer *buffer_info = &rx_ring->buffer_info[i];
 		struct my_u { u64 a; u64 b; };
 		struct my_u *u = (struct my_u *)rx_desc;
-		printk(KERN_INFO "R[0x%03X]     %016llX %016llX %016llX %p",
-			i, le64_to_cpu(u->a), le64_to_cpu(u->b),
-			(u64)buffer_info->dma, buffer_info->skb);
+		const char *type;
+
 		if (i == rx_ring->next_to_use)
-			printk(KERN_CONT " NTU\n");
+			type = "NTU";
 		else if (i == rx_ring->next_to_clean)
-			printk(KERN_CONT " NTC\n");
+			type = "NTC";
 		else
-			printk(KERN_CONT "\n");
+			type = "";
+
+		pr_info("R[0x%03X]     %016llX %016llX %016llX %p %s\n",
+			i, le64_to_cpu(u->a), le64_to_cpu(u->b),
+			(u64)buffer_info->dma, buffer_info->skb, type);
 
 		if (netif_msg_pktdata(adapter))
 			print_hex_dump(KERN_INFO, "",
@@ -3438,24 +3438,24 @@ rx_ring_summary:
 
 	/* dump the descriptor caches */
 	/* rx */
-	printk(KERN_INFO "e1000: Rx descriptor cache in 64bit format\n");
+	pr_info("Rx descriptor cache in 64bit format\n");
 	for (i = 0x6000; i <= 0x63FF ; i += 0x10) {
-		printk(KERN_INFO "R%04X: %08X|%08X %08X|%08X\n",
-				i,
-				readl(adapter->hw.hw_addr + i+4),
-				readl(adapter->hw.hw_addr + i),
-				readl(adapter->hw.hw_addr + i+12),
-				readl(adapter->hw.hw_addr + i+8));
+		pr_info("R%04X: %08X|%08X %08X|%08X\n",
+			i,
+			readl(adapter->hw.hw_addr + i+4),
+			readl(adapter->hw.hw_addr + i),
+			readl(adapter->hw.hw_addr + i+12),
+			readl(adapter->hw.hw_addr + i+8));
 	}
 	/* tx */
-	printk(KERN_INFO "e1000: Tx descriptor cache in 64bit format\n");
+	pr_info("Tx descriptor cache in 64bit format\n");
 	for (i = 0x7000; i <= 0x73FF ; i += 0x10) {
-		printk(KERN_INFO "T%04X: %08X|%08X %08X|%08X\n",
-				i,
-				readl(adapter->hw.hw_addr + i+4),
-				readl(adapter->hw.hw_addr + i),
-				readl(adapter->hw.hw_addr + i+12),
-				readl(adapter->hw.hw_addr + i+8));
+		pr_info("T%04X: %08X|%08X %08X|%08X\n",
+			i,
+			readl(adapter->hw.hw_addr + i+4),
+			readl(adapter->hw.hw_addr + i),
+			readl(adapter->hw.hw_addr + i+12),
+			readl(adapter->hw.hw_addr + i+8));
 	}
 exit:
 	return;

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

* RE: [PATCH net-next] e1000: Neaten e1000_dump function
  2012-02-07 18:19     ` [PATCH net-next] e1000: Neaten " Joe Perches
@ 2012-02-07 19:09       ` Dave, Tushar N
  0 siblings, 0 replies; 22+ messages in thread
From: Dave, Tushar N @ 2012-02-07 19:09 UTC (permalink / raw)
  To: Joe Perches, Kirsher, Jeffrey T; +Cc: davem, netdev, gospo, sassmann

Joe,
Thanks for doing the work.
I will send follow-up patch.

-Tushar

>-----Original Message-----
>From: Joe Perches [mailto:joe@perches.com]
>Sent: Tuesday, February 07, 2012 10:20 AM
>To: Kirsher, Jeffrey T
>Cc: davem@davemloft.net; Dave, Tushar N; netdev@vger.kernel.org;
>gospo@redhat.com; sassmann@redhat.com
>Subject: [PATCH net-next] e1000: Neaten e1000_dump function
>
>Use pr_<level> for printk
>Use temporary instead of multiple pr_conts
>Coalesce formats.
>
>Save a few bytes of object code too:
>
>$ size drivers/net/ethernet/intel/e1000/e1000_main.o*
>   text	   data	    bss	    dec	    hex	filename
>  60507	    369	  14120	  74996	  124f4
>	drivers/net/ethernet/intel/e1000/e1000_main.o.new
>  60717	    369	  14176	  75262	  125fe
>	drivers/net/ethernet/intel/e1000/e1000_main.o.old
>
>Signed-off-by: Joe Perches <joe@perches.com>
>---
>diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c
>b/drivers/net/ethernet/intel/e1000/e1000_main.c
>index 1f86a70..1370057 100644
>--- a/drivers/net/ethernet/intel/e1000/e1000_main.c
>+++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
>@@ -3247,16 +3247,16 @@ static void e1000_regdump(struct e1000_adapter
>*adapter)
> 	u32 *regs_buff = regs;
> 	int i = 0;
>
>-	char *reg_name[] = {
>-	"CTRL",  "STATUS",
>-	"RCTL", "RDLEN", "RDH", "RDT", "RDTR",
>-	"TCTL", "TDBAL", "TDBAH", "TDLEN", "TDH", "TDT",
>-	"TIDV", "TXDCTL", "TADV", "TARC0",
>-	"TDBAL1", "TDBAH1", "TDLEN1", "TDH1", "TDT1",
>-	"TXDCTL1", "TARC1",
>-	"CTRL_EXT", "ERT", "RDBAL", "RDBAH",
>-	"TDFH", "TDFT", "TDFHS", "TDFTS", "TDFPC",
>-	"RDFH", "RDFT", "RDFHS", "RDFTS", "RDFPC"
>+	static const char * const reg_name[] = {
>+		"CTRL",  "STATUS",
>+		"RCTL", "RDLEN", "RDH", "RDT", "RDTR",
>+		"TCTL", "TDBAL", "TDBAH", "TDLEN", "TDH", "TDT",
>+		"TIDV", "TXDCTL", "TADV", "TARC0",
>+		"TDBAL1", "TDBAH1", "TDLEN1", "TDH1", "TDT1",
>+		"TXDCTL1", "TARC1",
>+		"CTRL_EXT", "ERT", "RDBAL", "RDBAH",
>+		"TDFH", "TDFT", "TDFHS", "TDFTS", "TDFPC",
>+		"RDFH", "RDFT", "RDFHS", "RDFTS", "RDFPC"
> 	};
>
> 	regs_buff[0]  = er32(CTRL);
>@@ -3302,10 +3302,8 @@ static void e1000_regdump(struct e1000_adapter
>*adapter)
> 	regs_buff[37] = er32(RDFPC);
>
> 	pr_info("Register dump\n");
>-	for (i = 0; i < NUM_REGS; i++) {
>-		printk(KERN_INFO "%-15s  %08x\n",
>-		reg_name[i], regs_buff[i]);
>-	}
>+	for (i = 0; i < NUM_REGS; i++)
>+		pr_info("%-15s  %08x\n", reg_name[i], regs_buff[i]);
> }
>
> /*
>@@ -3356,10 +3354,8 @@ static void e1000_dump(struct e1000_adapter
>*adapter)
> 	 *   +--------------------------------------------------------------
>--+
> 	 *   63       48 47     40 39  36 35    32 31     24 23  20 19
>0
> 	 */
>-	printk(KERN_INFO "Tc[desc]     [Ce CoCsIpceCoS] [MssHlRSCm0Plen]
>[bi->dma       ]"
>-	       " leng  ntw timestmp         bi->skb\n");
>-	printk(KERN_INFO "Td[desc]     [address 63:0  ] [VlaPoRSCm1Dlen]
>[bi->dma       ]"
>-	       " leng  ntw timestmp         bi->skb\n");
>+	pr_info("Tc[desc]     [Ce CoCsIpceCoS] [MssHlRSCm0Plen] [bi->dma
>] leng  ntw timestmp         bi->skb\n");
>+	pr_info("Td[desc]     [address 63:0  ] [VlaPoRSCm1Dlen] [bi->dma
>] leng  ntw timestmp         bi->skb\n");
>
> 	if (!netif_msg_tx_done(adapter))
> 		goto rx_ring_summary;
>@@ -3369,21 +3365,23 @@ static void e1000_dump(struct e1000_adapter
>*adapter)
> 		struct e1000_buffer *buffer_info = &tx_ring->buffer_info[i];
> 		struct my_u { u64 a; u64 b; };
> 		struct my_u *u = (struct my_u *)tx_desc;
>-		printk(KERN_INFO "T%c[0x%03X]    %016llX %016llX %016llX %04X
>%3X "
>-		       "%016llX %p",
>-		       ((le64_to_cpu(u->b) & (1<<20)) ? 'd' : 'c'), i,
>-		       le64_to_cpu(u->a), le64_to_cpu(u->b),
>-		       (u64)buffer_info->dma, buffer_info->length,
>-		       buffer_info->next_to_watch, (u64)buffer_info-
>>time_stamp,
>-		       buffer_info->skb);
>+		const char *type;
>+
> 		if (i == tx_ring->next_to_use && i == tx_ring->next_to_clean)
>-			printk(KERN_CONT" NTC/U\n");
>+			type = "NTC/U";
> 		else if (i == tx_ring->next_to_use)
>-			printk(KERN_CONT " NTU\n");
>+			type = "NTU";
> 		else if (i == tx_ring->next_to_clean)
>-			printk(KERN_CONT " NTC\n");
>+			type = "NTC";
> 		else
>-			printk(KERN_CONT "\n");
>+			type = "";
>+
>+		pr_info("T%c[0x%03X]    %016llX %016llX %016llX %04X  %3X
>%016llX %p %s\n",
>+			((le64_to_cpu(u->b) & (1<<20)) ? 'd' : 'c'), i,
>+			le64_to_cpu(u->a), le64_to_cpu(u->b),
>+			(u64)buffer_info->dma, buffer_info->length,
>+			buffer_info->next_to_watch,
>+			(u64)buffer_info->time_stamp, buffer_info->skb, type);
>
>
> 		if (netif_msg_pktdata(adapter) && buffer_info->dma != 0)
>@@ -3407,8 +3405,7 @@ rx_ring_summary:
> 	 * +-----------------------------------------------------+
> 	 * 63       48 47    40 39      32 31         16 15      0
> 	 */
>-	printk(KERN_INFO "R[desc]      [address 63:0  ] [vl er S cks ln] "
>-		"[bi->dma       ] [bi->skb]\n");
>+	pr_info("R[desc]      [address 63:0  ] [vl er S cks ln] [bi->dma
>] [bi->skb]\n");
>
> 	if (!netif_msg_rx_status(adapter))
> 		goto exit;
>@@ -3418,15 +3415,18 @@ rx_ring_summary:
> 		struct e1000_buffer *buffer_info = &rx_ring->buffer_info[i];
> 		struct my_u { u64 a; u64 b; };
> 		struct my_u *u = (struct my_u *)rx_desc;
>-		printk(KERN_INFO "R[0x%03X]     %016llX %016llX %016llX %p",
>-			i, le64_to_cpu(u->a), le64_to_cpu(u->b),
>-			(u64)buffer_info->dma, buffer_info->skb);
>+		const char *type;
>+
> 		if (i == rx_ring->next_to_use)
>-			printk(KERN_CONT " NTU\n");
>+			type = "NTU";
> 		else if (i == rx_ring->next_to_clean)
>-			printk(KERN_CONT " NTC\n");
>+			type = "NTC";
> 		else
>-			printk(KERN_CONT "\n");
>+			type = "";
>+
>+		pr_info("R[0x%03X]     %016llX %016llX %016llX %p %s\n",
>+			i, le64_to_cpu(u->a), le64_to_cpu(u->b),
>+			(u64)buffer_info->dma, buffer_info->skb, type);
>
> 		if (netif_msg_pktdata(adapter))
> 			print_hex_dump(KERN_INFO, "",
>@@ -3438,24 +3438,24 @@ rx_ring_summary:
>
> 	/* dump the descriptor caches */
> 	/* rx */
>-	printk(KERN_INFO "e1000: Rx descriptor cache in 64bit format\n");
>+	pr_info("Rx descriptor cache in 64bit format\n");
> 	for (i = 0x6000; i <= 0x63FF ; i += 0x10) {
>-		printk(KERN_INFO "R%04X: %08X|%08X %08X|%08X\n",
>-				i,
>-				readl(adapter->hw.hw_addr + i+4),
>-				readl(adapter->hw.hw_addr + i),
>-				readl(adapter->hw.hw_addr + i+12),
>-				readl(adapter->hw.hw_addr + i+8));
>+		pr_info("R%04X: %08X|%08X %08X|%08X\n",
>+			i,
>+			readl(adapter->hw.hw_addr + i+4),
>+			readl(adapter->hw.hw_addr + i),
>+			readl(adapter->hw.hw_addr + i+12),
>+			readl(adapter->hw.hw_addr + i+8));
> 	}
> 	/* tx */
>-	printk(KERN_INFO "e1000: Tx descriptor cache in 64bit format\n");
>+	pr_info("Tx descriptor cache in 64bit format\n");
> 	for (i = 0x7000; i <= 0x73FF ; i += 0x10) {
>-		printk(KERN_INFO "T%04X: %08X|%08X %08X|%08X\n",
>-				i,
>-				readl(adapter->hw.hw_addr + i+4),
>-				readl(adapter->hw.hw_addr + i),
>-				readl(adapter->hw.hw_addr + i+12),
>-				readl(adapter->hw.hw_addr + i+8));
>+		pr_info("T%04X: %08X|%08X %08X|%08X\n",
>+			i,
>+			readl(adapter->hw.hw_addr + i+4),
>+			readl(adapter->hw.hw_addr + i),
>+			readl(adapter->hw.hw_addr + i+12),
>+			readl(adapter->hw.hw_addr + i+8));
> 	}
> exit:
> 	return;
>


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

* RE: [net-next 02/11] e1000: Adding e1000_dump function
  2012-02-07 17:38   ` [net-next 02/11] e1000: Adding " Michal Kubeček
@ 2012-02-08 18:39     ` Dave, Tushar N
  2012-02-09  9:08       ` Jan Beulich
  2012-02-13  8:24       ` Michal Kubeček
  0 siblings, 2 replies; 22+ messages in thread
From: Dave, Tushar N @ 2012-02-08 18:39 UTC (permalink / raw)
  To: Michal Kubecek, netdev
  Cc: Kirsher, Jeffrey T, davem, gospo, sassmann, jbeulich

>-----Original Message-----
>From: Michal Kubeček [mailto:mkubecek@suse.cz]
>Sent: Tuesday, February 07, 2012 9:38 AM
>To: netdev@vger.kernel.org
>Cc: Kirsher, Jeffrey T; davem@davemloft.net; Dave, Tushar N;
>gospo@redhat.com; sassmann@redhat.com; jbeulich@suse.com
>Subject: Re: [net-next 02/11] e1000: Adding e1000_dump function
>
>On Tuesday 07 of February 2012 04:33EN, Jeff Kirsher wrote:
>> +		if (netif_msg_pktdata(adapter) && buffer_info->dma != 0)
>> +			print_hex_dump(KERN_INFO, "", DUMP_PREFIX_ADDRESS,
>> +					16, 1, phys_to_virt(buffer_info->dma),
>> +					buffer_info->length, true);
>
>This might cause problems in Xen environment, we encountered a crash in
>e1000e where phys_to_virt() is used the same way. I'm not familiar with
>the details but this is what Jan Beulich wrote about it:

How did you fix the problem in e1000e then? I don't see bus_to_virt used in any of our Ethernet drivers.
Also when running in Xen which arch are you running on?

-Tushar

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

* RE: [net-next 02/11] e1000: Adding e1000_dump function
  2012-02-08 18:39     ` Dave, Tushar N
@ 2012-02-09  9:08       ` Jan Beulich
  2012-02-13  8:24       ` Michal Kubeček
  1 sibling, 0 replies; 22+ messages in thread
From: Jan Beulich @ 2012-02-09  9:08 UTC (permalink / raw)
  To: Tushar N Dave
  Cc: davem, Jeffrey T Kirsher, gospo, sassmann, Michal Kubecek, netdev

>>> On 08.02.12 at 19:39, "Dave, Tushar N" <tushar.n.dave@intel.com> wrote:
> Also when running in Xen which arch are you running on?

Currently this can only possibly be x86 (32- or 64-bit), ia64 doesn't
build, and no other ports are available upstream so far.

Jan

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

* Re: [net-next 02/11] e1000: Adding e1000_dump function
  2012-02-08 18:39     ` Dave, Tushar N
  2012-02-09  9:08       ` Jan Beulich
@ 2012-02-13  8:24       ` Michal Kubeček
  1 sibling, 0 replies; 22+ messages in thread
From: Michal Kubeček @ 2012-02-13  8:24 UTC (permalink / raw)
  To: Dave, Tushar N
  Cc: netdev, Kirsher, Jeffrey T, davem, gospo, sassmann, jbeulich

On Wednesday 08 of February 2012 18:39EN, Dave, Tushar N wrote:
> How did you fix the problem in e1000e then? I don't see bus_to_virt
> used in any of our Ethernet drivers.

We didn't, yet. I don't understand the memory mapping well enough to 
propose a solution. We have run into this problem when we investigated a 
different issue (repeated Tx hangs without apparent cause) and an 
attempt to dump registers resulted in kernel crash.

                                                        Michal Kubeček

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

end of thread, other threads:[~2012-02-13  8:24 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-02-07 12:33 [net-next 00/11][pull request] Intel Wired LAN Driver Updates Jeff Kirsher
2012-02-07 12:33 ` [net-next 01/11] igbvf: refactor Interrupt Throttle Rate code Jeff Kirsher
2012-02-07 12:33 ` [net-next 02/11] e1000: Adding e1000_dump function Jeff Kirsher
2012-02-07 15:40   ` Joe Perches
2012-02-07 18:19     ` [PATCH net-next] e1000: Neaten " Joe Perches
2012-02-07 19:09       ` Dave, Tushar N
2012-02-07 17:38   ` [net-next 02/11] e1000: Adding " Michal Kubeček
2012-02-08 18:39     ` Dave, Tushar N
2012-02-09  9:08       ` Jan Beulich
2012-02-13  8:24       ` Michal Kubeček
2012-02-07 12:33 ` [net-next 03/11] e1000e: add missing initializers reported when compiling with W=1 Jeff Kirsher
2012-02-07 12:33 ` [net-next 04/11] e1000e: cleanup - check return values consistently Jeff Kirsher
2012-02-07 12:33 ` [net-next 05/11] e1000e: cleanup e1000_init_mac_params_80003es2lan() Jeff Kirsher
2012-02-07 12:33 ` [net-next 06/11] e1000e: cleanup e1000_init_mac_params_82571() Jeff Kirsher
2012-02-07 12:33 ` [net-next 07/11] e1000e: cleanup e1000_set_phys_id Jeff Kirsher
2012-02-07 12:33 ` [net-next 08/11] e1000e: cleanup - use braces in both branches of a conditional statement Jeff Kirsher
2012-02-07 12:33 ` [net-next 09/11] e1000e: fix checkpatch warning from MINMAX test Jeff Kirsher
2012-02-07 12:33 ` [net-next 10/11] e1000e: fix sparse warnings with -D__CHECK_ENDIAN__ Jeff Kirsher
2012-02-07 12:58   ` David Laight
2012-02-07 17:16     ` David Miller
2012-02-07 12:33 ` [net-next 11/11] e1000e: minor whitespace and indentation cleanup Jeff Kirsher
2012-02-07 17:27 ` [net-next 00/11][pull request] Intel Wired LAN Driver Updates 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).