kern/129352: xl0 watchdog timeout

Ping Mai pingmai at yahoo.com
Mon Dec 1 14:30:01 PST 2008


>Number:         129352
>Category:       kern
>Synopsis:       xl0 watchdog timeout
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Dec 01 22:30:00 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator:     Ping Mai
>Release:        RELENG_6
>Organization:
Steps Consulting
>Environment:
FreeBSD agra.pinelake.stepnet.com 6.4-PRERELEASE FreeBSD 6.4-PRERELEASE #4: Fri Nov 28 14:10:54 PST 2008     root at agra.pinelake.stepnet.com:/usr/src/sys/i386/compile/AGRA  i386

>Description:
Ever since upgrading from 5-STABLE to 6-STABLE, xl0 get watchdog timeouts and the NIC resets:
Sep 12 10:20:52 agra kernel: xl0: watchdog timeout
Sep 12 10:20:52 agra kernel: xl0: link state changed to DOWN
Sep 12 10:20:54 agra kernel: xl0: link state changed to UP
This happens 2-3 times a day.





>How-To-Repeat:
Dell Inspiron 8200 with builtin NIC
xl0: <3Com 3c905C-TX Fast Etherlink XL> port 0xec80-0xecff mem 0xf8fffc00-0xf8fffc7f irq 11 at device 0.0 on pci2

Running 6-STABLE
>Fix:
xl_txeof() and xl_txeof_90xB() restart the timer if some packets had been sent.
See patch file.


Patch attached with submission follows:

Index: /usr/src/sys/pci/if_xl.c
===================================================================
RCS file: /local/fbsdcvs/src/sys/pci/Attic/if_xl.c,v
retrieving revision 1.190.2.12
diff -c -r1.190.2.12 if_xl.c
*** /usr/src/sys/pci/if_xl.c	23 Apr 2008 21:38:29 -0000	1.190.2.12
--- /usr/src/sys/pci/if_xl.c	28 Nov 2008 22:10:36 -0000
***************
*** 2079,2084 ****
--- 2079,2085 ----
  {
  	struct xl_chain		*cur_tx;
  	struct ifnet		*ifp = sc->xl_ifp;
+ 	u_long			opkts = ifp->if_opackets;
  
  	XL_LOCK_ASSERT(sc);
  
***************
*** 2120,2125 ****
--- 2121,2128 ----
  				sc->xl_cdata.xl_tx_head->xl_phys);
  			CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_DOWN_UNSTALL);
  		}
+ 		if (opkts != ifp->if_opackets)
+ 			sc->xl_wdog_timer = 5;
  	}
  }
  
***************
*** 2129,2134 ****
--- 2132,2138 ----
  	struct xl_chain		*cur_tx = NULL;
  	struct ifnet		*ifp = sc->xl_ifp;
  	int			idx;
+ 	u_long			opkts = ifp->if_opackets;
  
  	XL_LOCK_ASSERT(sc);
  
***************
*** 2158,2163 ****
--- 2162,2169 ----
  
  	if (sc->xl_cdata.xl_tx_cnt == 0)
  		sc->xl_wdog_timer = 0;
+ 	else if (opkts != ifp->if_opackets)
+ 			sc->xl_wdog_timer = 5;
  	sc->xl_cdata.xl_tx_cons = idx;
  
  	if (cur_tx != NULL)


>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list