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