Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 17 Jan 2009 13:45:45 +0900
From:      Pyun YongHyeon <pyunyh@gmail.com>
To:        Bartosz Stec <admin@kkip.pl>
Cc:        Walter Venable <walt@relnor.com>, stable@freebsd.org, yongari@freebsd.org
Subject:   Re: FreeBSD 7.1 Breaks re and rl Network Interface Drivers
Message-ID:  <20090117044545.GA68290@cdnetworks.co.kr>
In-Reply-To: <496DF428.6050800@kkip.pl>
References:  <8dfae1c10901070639x67945324jeeecfcac647d7976@mail.gmail.com> <496DF428.6050800@kkip.pl>

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

--mP3DRpeJDSE+ciuQ
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Wed, Jan 14, 2009 at 03:18:16PM +0100, Bartosz Stec wrote:
 > Walter Venable pisze:
 > >FreeBSD 7.1 upgrade broke my network access, machine is totally
 > >offline (powered-on and I can play inside it at the terminal, but
 > >absolutely 0 network access):
 > >This happened AFTER make kernel but BEFORE make installworld.  I think
 > >this implies it's a kernel driver issue.
 > >
 > >http://forums.freebsd.org/showthread.php?t=1323 (this is an ongoing
 > >thread on the issue, the rl driver has also been reported broken).
 > >_______________________________________________
 > >freebsd-stable@freebsd.org mailing list
 > >http://lists.freebsd.org/mailman/listinfo/freebsd-stable
 > >To unsubscribe, send any mail to "freebsd-stable-unsubscribe@freebsd.org"
 > >  
 > I can confirm issues with re and 7.1-R
 > 
 > dmesg:
 > re0: <RealTek 8169SC/8110SC Single-chip Gigabit Ethernet> port 
 > 0xbc00-0xbcff mem 0xfbfff000-0xfbfff0ff irq 17 at device 7.0 on pci1
 > re0: Chip rev. 0x18000000
 > re0: MAC rev. 0x00000000
 > 
 > In my case this NIC works, but lags like hell after upgrade! Working on 
 > console gives me pauses every 3-4 second, and second server which 
 > connect to this one with re0 is reporting that communication is lost 
 > every couple of minutes
 > 

Would you try attached patch?

-- 
Regards,
Pyun YongHyeon

--mP3DRpeJDSE+ciuQ
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="re.8169sc.diff"

Index: sys/dev/re/if_re.c
===================================================================
--- sys/dev/re/if_re.c	(revision 187352)
+++ sys/dev/re/if_re.c	(working copy)
@@ -158,6 +158,8 @@
 /* Tunables. */
 static int msi_disable = 1;
 TUNABLE_INT("hw.re.msi_disable", &msi_disable);
+static int prefer_iomap = 0;
+TUNABLE_INT("hw.re.prefer_iomap", &prefer_iomap);
 
 #define RE_CSUM_FEATURES    (CSUM_IP | CSUM_TCP | CSUM_UDP)
 
@@ -1131,26 +1133,36 @@
 	pci_enable_busmaster(dev);
 
 	devid = pci_get_device(dev);
-	/* Prefer memory space register mapping over IO space. */
-	sc->rl_res_id = PCIR_BAR(1);
-	sc->rl_res_type = SYS_RES_MEMORY;
-	/* RTL8168/8101E seems to use different BARs. */
-	if (devid == RT_DEVICEID_8168 || devid == RT_DEVICEID_8101E)
-		sc->rl_res_id = PCIR_BAR(2);
+	/*
+	 * Prefer memory space register mapping over IO space.
+	 * Because RTL8169SC does not seem to work when memory mapping
+	 * is used always activate io mapping. 
+	 */
+	if (devid == RT_DEVICEID_8169SC)
+		prefer_iomap = 1;
+	if (prefer_iomap == 0) {
+		sc->rl_res_id = PCIR_BAR(1);
+		sc->rl_res_type = SYS_RES_MEMORY;
+		/* RTL8168/8101E seems to use different BARs. */
+		if (devid == RT_DEVICEID_8168 || devid == RT_DEVICEID_8101E)
+			sc->rl_res_id = PCIR_BAR(2);
+	} else {
+		sc->rl_res_id = PCIR_BAR(0);
+		sc->rl_res_type = SYS_RES_IOPORT;
+	}
 	sc->rl_res = bus_alloc_resource_any(dev, sc->rl_res_type,
 	    &sc->rl_res_id, RF_ACTIVE);
-
-	if (sc->rl_res == NULL) {
+	if (sc->rl_res == NULL && prefer_iomap == 0) {
 		sc->rl_res_id = PCIR_BAR(0);
 		sc->rl_res_type = SYS_RES_IOPORT;
 		sc->rl_res = bus_alloc_resource_any(dev, sc->rl_res_type,
 		    &sc->rl_res_id, RF_ACTIVE);
-		if (sc->rl_res == NULL) {
-			device_printf(dev, "couldn't map ports/memory\n");
-			error = ENXIO;
-			goto fail;
-		}
 	}
+	if (sc->rl_res == NULL) {
+		device_printf(dev, "couldn't map ports/memory\n");
+		error = ENXIO;
+		goto fail;
+	}
 
 	sc->rl_btag = rman_get_bustag(sc->rl_res);
 	sc->rl_bhandle = rman_get_bushandle(sc->rl_res);

--mP3DRpeJDSE+ciuQ--



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