Commit 4ee76fad authored by Hirofumi Ogawa's avatar Hirofumi Ogawa Committed by Linus Torvalds

[PATCH] 8139too: more useful debug info for tx_timeout

Hi,

I think this patch is useful for looking whether it's the real driver
bug or other bug.

What do you think of this? If ok, please apply.
--
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>



[PATCH] 8139too: more useful debug info for tx_timeout

	/* disable Tx ASAP, if not already */
	tmp8 = RTL_R8 (ChipCmd);
	if (tmp8 & CmdTxEnb)
		RTL_W8 (ChipCmd, CmdRxEnb);

The above will clear the Tx Descs. So, this prints the debugging info
before rtl8139_tx_timeout() does it. And IntrStatus etc. also prints
anytime for the debug.
parent 196c4ebd
...@@ -1673,11 +1673,17 @@ static void rtl8139_tx_timeout (struct net_device *dev) ...@@ -1673,11 +1673,17 @@ static void rtl8139_tx_timeout (struct net_device *dev)
u8 tmp8; u8 tmp8;
unsigned long flags; unsigned long flags;
DPRINTK ("%s: Transmit timeout, status %2.2x %4.4x " printk (KERN_DEBUG "%s: Transmit timeout, status %2.2x %4.4x %4.4x "
"media %2.2x.\n", dev->name, "media %2.2x.\n", dev->name, RTL_R8 (ChipCmd),
RTL_R8 (ChipCmd), RTL_R16(IntrStatus), RTL_R16(IntrMask), RTL_R8(MediaStatus));
RTL_R16 (IntrStatus), /* Emit info to figure out what went wrong. */
RTL_R8 (MediaStatus)); printk (KERN_DEBUG "%s: Tx queue start entry %ld dirty entry %ld.\n",
dev->name, tp->cur_tx, tp->dirty_tx);
for (i = 0; i < NUM_TX_DESC; i++)
printk (KERN_DEBUG "%s: Tx descriptor %d is %8.8lx.%s\n",
dev->name, i, RTL_R32 (TxStatus0 + (i * 4)),
i == tp->dirty_tx % NUM_TX_DESC ?
" (queue head)" : "");
tp->xstats.tx_timeouts++; tp->xstats.tx_timeouts++;
...@@ -1690,15 +1696,6 @@ static void rtl8139_tx_timeout (struct net_device *dev) ...@@ -1690,15 +1696,6 @@ static void rtl8139_tx_timeout (struct net_device *dev)
/* Disable interrupts by clearing the interrupt mask. */ /* Disable interrupts by clearing the interrupt mask. */
RTL_W16 (IntrMask, 0x0000); RTL_W16 (IntrMask, 0x0000);
/* Emit info to figure out what went wrong. */
printk (KERN_DEBUG "%s: Tx queue start entry %ld dirty entry %ld.\n",
dev->name, tp->cur_tx, tp->dirty_tx);
for (i = 0; i < NUM_TX_DESC; i++)
printk (KERN_DEBUG "%s: Tx descriptor %d is %8.8lx.%s\n",
dev->name, i, RTL_R32 (TxStatus0 + (i * 4)),
i == tp->dirty_tx % NUM_TX_DESC ?
" (queue head)" : "");
/* Stop a shared interrupt from scavenging while we are. */ /* Stop a shared interrupt from scavenging while we are. */
spin_lock_irqsave (&tp->lock, flags); spin_lock_irqsave (&tp->lock, flags);
rtl8139_tx_clear (tp); rtl8139_tx_clear (tp);
...@@ -1710,7 +1707,6 @@ static void rtl8139_tx_timeout (struct net_device *dev) ...@@ -1710,7 +1707,6 @@ static void rtl8139_tx_timeout (struct net_device *dev)
netif_wake_queue (dev); netif_wake_queue (dev);
} }
spin_unlock(&tp->rx_lock); spin_unlock(&tp->rx_lock);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment