Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 18 Jul 2007 12:55:20 +0900
From:      Pyun YongHyeon <pyunyh@gmail.com>
To:        "[CPS] AkirA" <rudinskij@dv-com.net>
Cc:        stable@freebsd.org, yongari@freebsd.org
Subject:   Re: nfe trouble
Message-ID:  <20070718035519.GB37935@cdnetworks.co.kr>
In-Reply-To: <487D1F4CFF854EC485B96B8A7AC0B31C@nintendo>
References:  <487D1F4CFF854EC485B96B8A7AC0B31C@nintendo>

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 Tue, Jul 17, 2007 at 09:37:56PM +0300, [CPS] AkirA wrote:

[...]
 > after theat
 > 
 > 
 > nfe0: <NVIDIA nForce MCP55 Networking Adapter> port 0xb000-0xb007 mem 
 > 0xfe02a000-0xfe02afff,0xfe029000-0xfe0290ff,0xfe028000-0xfe02800f irq 23 at 
 > device 8.0 on pci0
 > nfe0: could not allocate DMA'able memory for jumbo pool
 > device_attach: nfe0 attach returned 12
 > nfe1: <NVIDIA nForce MCP55 Networking Adapter> port 0xac00-0xac07 mem 
 > 0xfe027000-0xfe027fff,0xfe026000-0xfe0260ff,0xfe025000-0xfe02500f irq 20 at 
 > device 9.0 on pci0
 > nfe1: could not allocate DMA'able memory for jumbo pool
 > device_attach: nfe1 attach returned 12
 > 
 > 
 > and not start to work network
 > 

Try attached one. I'm unure how well it could be applied to stable
but you can probably patch manually the source in case of failure.

-- 
Regards,
Pyun YongHyeon

--mP3DRpeJDSE+ciuQ
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="nfe.jumbo.patch"

Index: if_nfe.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/nfe/if_nfe.c,v
retrieving revision 1.18
diff -u -r1.18 if_nfe.c
--- if_nfe.c	12 Jun 2007 02:35:01 -0000	1.18
+++ if_nfe.c	18 Jul 2007 03:51:22 -0000
@@ -108,7 +108,7 @@
 static void nfe_init_locked(void *);
 static void nfe_stop(struct ifnet *);
 static int  nfe_alloc_rx_ring(struct nfe_softc *, struct nfe_rx_ring *);
-static int  nfe_alloc_jrx_ring(struct nfe_softc *, struct nfe_jrx_ring *);
+static void nfe_alloc_jrx_ring(struct nfe_softc *, struct nfe_jrx_ring *);
 static int  nfe_init_rx_ring(struct nfe_softc *, struct nfe_rx_ring *);
 static int  nfe_init_jrx_ring(struct nfe_softc *, struct nfe_jrx_ring *);
 static void nfe_free_rx_ring(struct nfe_softc *, struct nfe_rx_ring *);
@@ -151,8 +151,10 @@
 /* Tunables. */
 static int msi_disable = 0;
 static int msix_disable = 0;
+static int jumbo_disable = 0;
 TUNABLE_INT("hw.nfe.msi_disable", &msi_disable);
 TUNABLE_INT("hw.nfe.msix_disable", &msix_disable);
+TUNABLE_INT("hw.nfe.jumbo_disable", &jumbo_disable);
 
 static device_method_t nfe_methods[] = {
 	/* Device interface */
@@ -513,8 +515,7 @@
 	if ((error = nfe_alloc_rx_ring(sc, &sc->rxq)) != 0)
 		goto fail;
 
-	if ((error = nfe_alloc_jrx_ring(sc, &sc->jrxq)) != 0)
-		goto fail;
+	nfe_alloc_jrx_ring(sc, &sc->jrxq);
 
 	SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
 	    SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
@@ -1140,7 +1141,7 @@
 }
 
 
-static int
+static void
 nfe_alloc_jrx_ring(struct nfe_softc *sc, struct nfe_jrx_ring *ring)
 {
 	struct nfe_dmamap_arg ctx;
@@ -1151,7 +1152,12 @@
 	int i, error, descsize;
 
 	if ((sc->nfe_flags & NFE_JUMBO_SUP) == 0)
-		return (0);
+		return;
+	if (jumbo_disable != 0) {
+		device_printf(sc->nfe_dev, "disabling jumbo frame support\n");
+		sc->nfe_jumbo_disable = 1;
+		return;
+	}
 
 	if (sc->nfe_flags & NFE_40BIT_ADDR) {
 		desc = ring->jdesc64;
@@ -1301,11 +1307,17 @@
 		    jpool_entries);
 	}
 
-	return (0);
+	return;
 
 fail:
+	/*
+	 * Running without jumbo frame support is ok for most cases
+	 * so don't fail on creating dma tag/map for jumbo frame.
+	 */
 	nfe_free_jrx_ring(sc, ring);
-	return (error);
+	device_printf(sc->nfe_dev, "disabling jumbo frame support due to "
+	    " resource shortage\n");
+	sc->nfe_jumbo_disable = 1;
 }
 
 
@@ -1746,7 +1758,8 @@
 		if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > NFE_JUMBO_MTU)
 			error = EINVAL;
 		else if (ifp->if_mtu != ifr->ifr_mtu) {
-			if ((sc->nfe_flags & NFE_JUMBO_SUP) == 0 &&
+			if ((((sc->nfe_flags & NFE_JUMBO_SUP) == 0) ||
+			    (sc->nfe_jumbo_disable != 0)) &&
 			    ifr->ifr_mtu > ETHERMTU)
 				error = EINVAL;
 			else {
Index: if_nfevar.h
===================================================================
RCS file: /home/ncvs/src/sys/dev/nfe/if_nfevar.h,v
retrieving revision 1.4
diff -u -r1.4 if_nfevar.h
--- if_nfevar.h	12 Jun 2007 02:16:02 -0000	1.4
+++ if_nfevar.h	18 Jul 2007 03:51:22 -0000
@@ -103,6 +103,7 @@
 #define	NFE_PWR_MGMT		0x0010
 #define	NFE_CORRECT_MACADDR	0x0020
 #define	NFE_TX_FLOW_CTRL	0x0040
+	int			nfe_jumbo_disable;
 	uint32_t		rxtxctl;
 	uint8_t			mii_phyaddr;
 	uint8_t			eaddr[ETHER_ADDR_LEN];

--mP3DRpeJDSE+ciuQ--



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