Forcedeth and jumbo frames

Associate
Joined
2 Jun 2005
Posts
260
I have kernel 2.6.26 compiled from source. My network card is an onboard Nforce NIC using the Forcedeth 0.61 driver. It is running at gigabit speed but I would like to enable jumbo frames support.

I have tried 'ifconfig eth0 mtu 7000', my other PC only supports up to this, and it gives error 'SIOCSIFMTU: Invalid argument'. Running 'ip route get 192.168.1.100' tells me the MTU is 1500.

I can't find any clear information either way to tell me if this should work or not. Has anyone else managed to get jumbo frames working with this driver?
 
The normal size for jumbo frames is 9000 bytes, ifconfig eth0 mtu 9000 should work if it does indeed support jumbo frames. I'm suprised the other PC's NIC stops at 7000, never seen that before.
 
It seems whatever value I try and set I get that error. I don't know if the Forcedeth driver in kernel 2.6.26 has been patched for jumbo frame support and I can't find the patch anywhere so I can download it and see if it is in the forcedeth.c in 2.6.26.
 
Support looks like it is there in 2.6.26 at first glances.. I don't have one of these myself so can't really test anything.

Code:
#define DEV_HAS_LARGEDESC          0x00004  /* device supports jumbo frames and needs packet format 2 */

/* maximum mtu size */
#define NV_PKTLIMIT_1	ETH_DATA_LEN	/* hard limit not known */
#define NV_PKTLIMIT_2	9100	/* Actual limit according to NVidia: 9202 */


	} else if (id->driver_data & DEV_HAS_LARGEDESC) {
		/* packet format 2: supports jumbo frames */
		np->desc_ver = DESC_VER_2;
		np->txrxctl_bits = NVREG_TXRXCTL_DESC_2;

*keeps looking*
 
Last edited:
Yeah I found that in mine. Maybe my card doesn't support it? Here are the details:

Code:
00:14.0 Bridge: nVidia Corporation MCP51 Ethernet Controller (rev a1)
        Subsystem: Foxconn International, Inc. Device 0d00
        Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 0 (250ns min, 5000ns max)
        Interrupt: pin A routed to IRQ 23
        Region 0: Memory at fe02b000 (32-bit, non-prefetchable) [size=4K]
        Region 1: I/O ports at c800 [size=8]
        Capabilities: [44] Power Management version 2
                Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold+)
                Status: D0 PME-Enable+ DSel=0 DScale=0 PME-
        Kernel driver in use: forcedeth
 
Hmm MCP51:

Code:
	{	/* MCP51 Ethernet Controller */
		PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_13),
		.driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_HIGH_DMA|DEV_HAS_POWER_CNTRL|DEV_HAS_STATISTICS_V1,
	},

You will notice there is no DEV_HAS_LARGEDESC so it may well be that your card does not support it. Even if the code is patched to allow it.
 
Last edited:
OK well I can live with that. I could always buy a separate card. Currently getting about 43MB/s so it's not the end of the world.

Thanks for your help.
 
OK well I can live with that. I could always buy a separate card. Currently getting about 43MB/s so it's not the end of the world.

Thanks for your help.

Well.. if your not opposed to messing with things and know the risks :p. Here's a patch to test.. your not gonna screw things up apart from cause a lot of packet fragmentation if it does not work. Might save you some cash. Looking at it this should be all you need to change. Firstly backup your forcedeth.c so you can restore to the old version.

Code:
--- forcedeth.c	2008-08-24 17:14:36.000000000 +0100
+++ forcedeth.c	2008-08-24 17:17:09.000000000 +0100
@@ -5910,11 +5910,11 @@
 	},
 	{	/* MCP51 Ethernet Controller */
 		PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_12),
-		.driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_HIGH_DMA|DEV_HAS_POWER_CNTRL|DEV_HAS_STATISTICS_V1,
+		.driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_LARGEDESC|DEV_HAS_HIGH_DMA|DEV_HAS_POWER_CNTRL|DEV_HAS_STATISTICS_V1,
 	},
 	{	/* MCP51 Ethernet Controller */
 		PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_13),
-		.driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_HIGH_DMA|DEV_HAS_POWER_CNTRL|DEV_HAS_STATISTICS_V1,
+		.driver_data = DEV_NEED_TIMERIRQ|DEV_NEED_LINKTIMER|DEV_HAS_LARGEDESC|DEV_HAS_HIGH_DMA|DEV_HAS_POWER_CNTRL|DEV_HAS_STATISTICS_V1,
 	},
 	{	/* MCP55 Ethernet Controller */
 		PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NVENET_14),

Save it as mtupatch somewhere, change to forcedeth driver directory.
Code:
patch -p0 < /location/of/mtupatch

Recompile, rebuild whatever and test it out.

*Disclaimer if this fries your network card - not my fault, shouldn't though. Obviously don't test on production systems :p *
 
Last edited:
Got round to trying the patch. It let me set the MTU size to anything up to 9000 bytes but when transferring a large file it would kill the network connection within about thirty seconds. After a reboot I looked at the syslog and found this:

Code:
Aug 30 12:39:13 kaz kernel: NETDEV WATCHDOG: eth0: transmit timed out
Aug 30 12:39:13 kaz kernel: eth0: Got tx_timeout. irq: 00000000
Aug 30 12:39:13 kaz kernel: eth0: Ring at 7dc74000
Aug 30 12:39:13 kaz kernel: eth0: Dumping tx registers
[massive data dump]
Aug 30 12:39:13 kaz kernel: eth0: tx_timeout: dead entries!

The transfer, while it lasted, was about 1-2MB/s slower anyway.

Was worth trying but at least I now know for sure the MCP51 does not support jumbo frames.

Thanks.
 
Back
Top Bottom