Skip site navigation (1)Skip section navigation (2)
Date:      Sat,  8 Jan 2000 14:01:09 +0100 (CET)
From:      Arjan.deVet@adv.iae.nl (Arjan de Vet)
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   kern/15986: xl ethernet interface hanging
Message-ID:  <20000108130109.A321E22CD@adv.iae.nl>

next in thread | raw e-mail | index | archive | help

>Number:         15986
>Category:       kern
>Synopsis:       xl ethernet interface hanging
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Jan  8 05:10:00 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Arjan de Vet
>Release:        FreeBSD 4.0-CURRENT
>Organization:
>Environment:

FreeBSD 4.0-CURRENT

>Description:

I noticed that my xl0 ethernet interface didn't work anymore (or with
enormous delays) and I traced it back to revision 1.69 in if_xl.c:

Index: if_xl.c
===================================================================
RCS file: /home/freebsd/CVS/src/sys/pci/if_xl.c,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -u -5 -w -r1.68 -r1.69
--- if_xl.c	1999/10/14 21:49:17	1.68
+++ if_xl.c	1999/10/25 20:52:32	1.69
@@ -2389,13 +2389,13 @@
 	/*
 	 * Cancel pending I/O and free all RX/TX buffers.
 	 */
 	xl_stop(sc);
 
-	xl_reset(sc);
+	CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_TX_RESET);
 	xl_wait(sc);
-	DELAY(1000);
+	DELAY(10000);
 
 	if (sc->xl_miibus != NULL)
 		mii = device_get_softc(sc->xl_miibus);
 
 	/* Init our MAC address */

dmesg output:

xl0: <3Com 3c900B-TPO Etherlink XL> irq 12 at device 11.0 on pci0
xl0: Ethernet address: 00:50:04:ea:f9:c0
xl0: media options word: 8
xl0: guessing 10BaseT transceiver
xl0: found 10baseT
xl0: selecting 10baseT transceiver, half duplex
bpf: xl0 attached

>How-To-Repeat:


>Fix:
	
Because the comment talks about RX/TX buffers I tried this fix:

Index: if_xl.c
===================================================================
RCS file: /home/freebsd/CVS/src/sys/pci/if_xl.c,v
retrieving revision 1.71
diff -u -r1.71 if_xl.c
--- if_xl.c	2000/01/03 15:28:47	1.71
+++ if_xl.c	2000/01/08 12:30:48
@@ -2426,6 +2426,8 @@
 	 */
 	xl_stop(sc);
 
+	CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_RX_RESET);
+	xl_wait(sc);
 	CSR_WRITE_2(sc, XL_COMMAND, XL_CMD_TX_RESET);
 	xl_wait(sc);
 	DELAY(10000);

and then my xl0 interface worked again. Is this a correct solution?


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


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000108130109.A321E22CD>