Re: PROBLEM: Network hang: "eth0: Tx timed out (f0080), is buffer full?"

Francois Romieu
2005-01-04T22:13:28Z

Jon Mason <jdmason@gmail.com> :
[...]
> @@ -1005,10 +1018,36 @@ rio_error (struct net_device *dev, int i
> /* PCI Error, a catastronphic error related to the bus interface
> occurs, set GlobalReset and HostReset to reset. */
> if (int_status & HostError) {
> - printk (KERN_ERR "%s: HostError! IntStatus %4.4x.\n",
> - dev->name, int_status);
> + printk (KERN_ERR "%s: HostError! IntStatus %4.4x. %d
> %d %x %x\n",
> + dev->name, int_status, np->cur_tx, np->cur_rx,
> + readl (ioaddr + MACCtrl), readw(ioaddr + IntEnable));
> writew (GlobalReset | HostReset, ioaddr + ASICCtrl + 2);
> +
> + /* Free all the skbuffs in the queue. */
> + for (i = 0; i < RX_RING_SIZE; i++) {
> + np->rx_ring[i].status = 0;
> + np->rx_ring[i].fraginfo = 0;
> + skb = np->rx_skbuff[i];
> + if (skb) {
> + pci_unmap_single (np->pdev, np->rx_ring[i].fraginfo,
> + skb->len, PCI_DMA_FROMDEVICE);
> + dev_kfree_skb (skb);

It is probably a minor issue right now but skb->len seems inaccurate
(there is no guaranty that skb_put() was issued).

--
Ueimor