Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 70b8f1e1 authored by Malli Chilakala's avatar Malli Chilakala Committed by Jeff Garzik
Browse files

[PATCH] e1000: Dump information on Tx ring



Dump information on Tx ring when 'NETDEV: Watchdog' condition is reached

Signed-off-by: default avatarMallikarjuna R Chilakala <mallikarjuna.chilakala@intel.com>
Signed-off-by: default avatarGanesh Venkatesan <ganesh.venkatesan@intel.com>
Signed-off-by: default avatarJohn Ronciak <john.ronciak@intel.com>
diff -up net-drivers-2.6/drivers/net/e1000/e1000_main.c net-drivers-2.6/drivers/net/e1000.new/e1000_main.c
parent 2701234f
Loading
Loading
Loading
Loading
+30 −3
Original line number Original line Diff line number Diff line
@@ -2443,10 +2443,37 @@ e1000_clean_tx_irq(struct e1000_adapter *adapter)
		 * check with the clearing of time_stamp and movement of i */
		 * check with the clearing of time_stamp and movement of i */
		adapter->detect_tx_hung = FALSE;
		adapter->detect_tx_hung = FALSE;
		if (tx_ring->buffer_info[i].dma &&
		if (tx_ring->buffer_info[i].dma &&
		   time_after(jiffies, tx_ring->buffer_info[i].time_stamp + HZ) &&
		    time_after(jiffies, tx_ring->buffer_info[i].time_stamp + HZ)
		   !(E1000_READ_REG(&adapter->hw, STATUS) & E1000_STATUS_TXOFF))
		    && !(E1000_READ_REG(&adapter->hw, STATUS) &
			E1000_STATUS_TXOFF)) {

			/* detected Tx unit hang */
			i = tx_ring->next_to_clean;
			eop = tx_ring->buffer_info[i].next_to_watch;
			eop_desc = E1000_TX_DESC(*tx_ring, eop);
			DPRINTK(TX_ERR, ERR, "Detected Tx Unit Hang\n"
					"  TDH                  <%x>\n"
					"  TDT                  <%x>\n"
					"  next_to_use          <%x>\n"
					"  next_to_clean        <%x>\n"
					"buffer_info[next_to_clean]\n"
					"  dma                  <%llx>\n"
					"  time_stamp           <%lx>\n"
					"  next_to_watch        <%x>\n"
					"  jiffies              <%lx>\n"
					"  next_to_watch.status <%x>\n",
				E1000_READ_REG(&adapter->hw, TDH),
				E1000_READ_REG(&adapter->hw, TDT),
				tx_ring->next_to_use,
				i,
				tx_ring->buffer_info[i].dma,
				tx_ring->buffer_info[i].time_stamp,
				eop,
				jiffies,
				eop_desc->upper.fields.status);
			netif_stop_queue(netdev);
			netif_stop_queue(netdev);
		}
		}
	}
#ifdef NETIF_F_TSO
#ifdef NETIF_F_TSO


	if( unlikely(!(eop_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) &&
	if( unlikely(!(eop_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) &&