[prev in list] [next in list] [prev in thread] [next in thread] 

List:       netbsd-bugs
Subject:    kern/15083: changing the media or duplex mode on a tl interface causes a panic
From:       dive () endersgame ! net
Date:       2001-12-29 1:52:09
[Download RAW message or body]


> Number:         15083
> Category:       kern
> Synopsis:       changing the media/duplex on a tl interface without downing it \
>                 causes a panic
> Confidential:   no
> Severity:       critical
> Priority:       high
> Responsible:    kern-bug-people
> State:          open
> Class:          sw-bug
> Submitter-Id:   net
> Arrival-Date:   Fri Dec 28 17:53:00 PST 2001
> Closed-Date:
> Last-Modified:
> Originator:     
> Release:        NetBSD 1.5ZA
> Organization:
EGnet
> Environment:
tl0 at pci2 dev 0 function 0
tl0: Compaq Dual Port Netelligent 10/100 TX
tl0: Ethernet address 00:08:c7:a4:a9:40
tl0: interrupting at irq 12
nsphy0 at tl0 phy 1: DP83840 10/100 media interface, rev. 1
nsphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
tlphy0 at tl0 phy 31: ThunderLAN 10BASE-T media interface, rev. 5
tlphy0: 10base5
tl1 at pci2 dev 1 function 0
tl1: Compaq Dual Port Netelligent 10/100 TX
tl1: Ethernet address 00:08:c7:a4:a9:c0
tl1: interrupting at irq 10
nsphy1 at tl1 phy 1: DP83840 10/100 media interface, rev. 1
nsphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
tlphy1 at tl1 phy 31: ThunderLAN 10BASE-T media interface, rev. 5
tlphy1: 10base5
System: NetBSD eros.endersgame.net 1.5ZA NetBSD 1.5ZA (EROS) #244: Fri Dec 28 \
20:24:19 EST 2001 dive@eros.endersgame.net:/disk2/a/cvs/netbsd-current/src/sys/arch/i386/compile/EROS \
                i386
Architecture: i386
Machine: i386
> Description:
	If you have a tl interface up, and attempt to change the media from
	10baseT to 100baseTX (or vice versa), or change to full-duplex from half
	(or vice versa), it causes a kernel panic.
> How-To-Repeat:
	ifconfig tl0 <ip> netmask <netmask> media 10baseT
	ifconfig tl0 up
	ifconfig tl0 media 100baseTX mediaopt full-duplex
	<panic happens here>
> Fix:
--- if_tl.c.orig	Fri Dec 28 20:41:46 2001
+++ if_tl.c	Fri Dec 28 09:33:49 2001
@@ -860,9 +860,9 @@
 	tl_mii_sendbits(sc, reg, 5);
 	tl_mii_sendbits(sc, MII_COMMAND_ACK, 2);
 	tl_mii_sendbits(sc, val, 16);
-
 	netsio_clr(sc, TL_NETSIO_MCLK);
 	netsio_set(sc, TL_NETSIO_MCLK);
+	tl_mii_sync(sc);
 }
 
 void
@@ -1196,6 +1196,10 @@
 	struct tl_softc *sc = ifp->if_softc;
 	struct ifreq *ifr = (struct ifreq *)data;
 	int s, error;
+	if (ifp == NULL) {
+		printf("tf_ioctl: ifp is a null pointer!\n");
+		return(0);
+	}
 	
 	s = splnet();
 	switch(cmd) {
@@ -1406,9 +1410,14 @@
 tl_mediachange(ifp)
 	struct ifnet *ifp;
 {
-
-	if (ifp->if_flags & IFF_UP)
-		tl_init(ifp->if_softc);
+	tl_softc_t *sc;
+	if (ifp == NULL) {
+		printf("tl_mediachange: ifp is a null pointer!\n");
+		return(0);
+	}
+	sc = ifp->if_softc;
+	mii_pollstat(&sc->tl_mii);
+	mii_mediachg(&sc->tl_mii);
 	return (0);
 }
 
> Release-Note:
> Audit-Trail:
> Unformatted:
 		kernel/userland 12/28/2001


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic