Re: [RFC/PATCH] ipg: add jumbo frame support kconfig option

From: Andrew Savchenko
Date: Fri Jun 20 2008 - 04:04:36 EST


Hello,

On Wed, 27 Feb 2008 09:44:44 +0200 (EET), Pekka J Enberg wrote:
> Stephen Hemminger wrote:
> > > Please don't do this as a config option. Config options seem
> > > like a good idea to developers but are difficult for
> > > distributions. Either support jumbo frames by default or
> > > not at all.
>
> On Tue, 26 Feb 2008, Jeff Garzik wrote:
> > Agreed, but to be more specific... always compile in jumbo
> > frame support. You don't have to enable it at runtime by
> > default, though.
>
> Ok, so a sysfs attribute would be sufficient, I suppose? I don't
> have the hardware though, so I don't even know if the jumbo
> frame code actually works at this point hence the RFC. So I'll
> wait for someone to test this before sending a new patch. Thanks
> for the review!

I own such card:
02:02.0 Ethernet controller: Sundance Technology Inc / IC Plus Corp
IP1000 Family Gigabit Ethernet (rev 41)
and I use patch similar to yours in order to enable Jumbo Frames.
See attachment for details, patch is done for linux-2.6.25.6.

It works fine for me. However, I enabled 10K jumbo boxes instead of
default 4K value, activated using your patch. Reason is simple: I
need at least 9000-byte jumbo boxes in my network.

However, I have one request for you: please, make in possible to
choose max MTU via kernel config option. In different environments
different people may need different max MTU sizes (2K...10K).
Recommended value is 4K (as described in the original driver from
manufacturer, which was remake into kernel's one), but, for
example, I'm interested in larger MTU values. OTOH larger MTU
values require more memory and so on. For me, as for end user of
Linux kernel, a possibility to select desired max MTU is very
attractive and is definitely in no doubt more convenient than
patching the kernel myself each time.

So, feel free to add jumbo boxes on ipg support to the mainstream
and, please, make in possible to select max MTU; 4K as default
will be fine.

Sincerely yours,
Andrew
--- drivers/net/ipg.c.orig 2008-04-17 06:49:44.000000000 +0400
+++ drivers/net/ipg.c 2008-06-18 04:46:06.000000000 +0400
@@ -42,7 +42,8 @@
#define ipg_r16(reg) ioread16(ioaddr + (reg))
#define ipg_r8(reg) ioread8(ioaddr + (reg))

-#define JUMBO_FRAME_4k_ONLY
+#define JUMBO_FRAME
+#define JUMBO_FRAME_SIZE_10K
enum {
netdev_io_size = 128
};
@@ -1267,7 +1268,7 @@
return;

if (jumbo->found_start) {
- int framelen, endframelen;
+ int framelen, endframeLen;

framelen = le64_to_cpu(rxfd->rfs) & IPG_RFS_RXFRAMELEN;

@@ -1352,16 +1353,16 @@

switch (ipg_nic_rx_check_frame_type(dev)) {
case FRAME_WITH_START_WITH_END:
- ipg_nic_rx_with_start_and_end(dev, tp, rxfd, entry);
+ ipg_nic_rx_with_start_and_end(dev, sp, rxfd, entry);
break;
case FRAME_WITH_START:
- ipg_nic_rx_with_start(dev, tp, rxfd, entry);
+ ipg_nic_rx_with_start(dev, sp, rxfd, entry);
break;
case FRAME_WITH_END:
- ipg_nic_rx_with_end(dev, tp, rxfd, entry);
+ ipg_nic_rx_with_end(dev, sp, rxfd, entry);
break;
case FRAME_NO_START_NO_END:
- ipg_nic_rx_no_start_no_end(dev, tp, rxfd, entry);
+ ipg_nic_rx_no_start_no_end(dev, sp, rxfd, entry);
break;
}
}

Attachment: pgp00000.pgp
Description: PGP signature