kern/73038: if_sk.c seems to need IFF_NEEDSGIANT on 5.3-BETA/RC1

Arjan de Vet devet at devet.org
Sat Oct 23 05:20:15 PDT 2004


>Number:         73038
>Category:       kern
>Synopsis:       if_sk.c seems to need IFF_NEEDSGIANT on 5.3-BETA/RC1
>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 Oct 23 12:20:14 GMT 2004
>Closed-Date:
>Last-Modified:
>Originator:     Arjan de Vet
>Release:        FreeBSD 5.3-RC1 i386
>Organization:
>Environment:
System: FreeBSD adv.devet.org 5.3-RC1 FreeBSD 5.3-RC1 #7: Sat Oct 23 13:49:58 CEST 2004 root at adv.devet.org:/usr/obj/usr/src/sys/ADV i386


>Description:

After upgrading from 5.2.1-RELEASE to 5.3-BETA/RC, my sk0 network
interface on an ASUS P4P800 motherboard mangles network connections
(broken ssh connections, broken web pages).

skc0: <3Com 3C940 Gigabit Ethernet> port 0xd800-0xd8ff mem 0xfeafc000-0xfeafffff irq 22 at device 5.0 on pci2
skc0: 3Com Gigabit LOM (3C940)
sk0: <Marvell Semiconductor, Inc. Yukon> on skc0
sk0: Ethernet address: 00:0c:6e:ea:f1:ba
sk0: if_start running deferred for Giant
miibus0: <MII bus> on sk0
e1000phy0: <Marvell 88E1000 Gigabit PHY> on miibus0
e1000phy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseTX-FDX, auto

First workaround is to put

    debug.mpsafenet="0"

in /boot/loader.conf.

Another workaround seems to be adding the IFF_NEEDSGIANT flag to the
if_sk.c driver. See patch below.

>How-To-Repeat:

SSH into another machine and give a command that produces lots of output
('ls -alR /') and watch the ssh-connection break with some weird error
message.

>Fix:

Index: if_sk.c
===================================================================
RCS file: /home/freebsd/CVS/src/sys/pci/if_sk.c,v
retrieving revision 1.83.2.2
diff -u -r1.83.2.2 if_sk.c
--- if_sk.c	25 Aug 2004 21:19:06 -0000	1.83.2.2
+++ if_sk.c	23 Oct 2004 11:47:50 -0000
@@ -1375,7 +1375,7 @@
 	ifp->if_softc = sc_if;
 	if_initname(ifp, device_get_name(dev), device_get_unit(dev));
 	ifp->if_mtu = ETHERMTU;
-	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
+	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST | IFF_NEEDSGIANT;
 	ifp->if_ioctl = sk_ioctl;
 	ifp->if_start = sk_start;
 	ifp->if_watchdog = sk_watchdog;


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


More information about the freebsd-bugs mailing list