android_kernel_xiaomi_sm8350/drivers/net
Ravinandan Arakali 7d3d0439f5 [PATCH] S2io: Large Receive Offload (LRO) feature(v2) for Neterion (s2io) 10GbE Xframe PCI-X and PCI-E NICs
Hi,
Below is a patch for the Large Receive Offload feature.
Please review and let us know your comments.

LRO algorithm was described in an OLS 2005 presentation, located at
ftp.s2io.com
user: linuxdocs
password: HALdocs

The same ftp site has Programming Manual for Xframe-I ASIC.
LRO feature is supported on Neterion Xframe-I, Xframe-II and
Xframe-Express 10GbE NICs.

Brief description:
The Large Receive Offload(LRO) feature is a stateless offload
that is complementary to TSO feature but on the receive path.
The idea is to combine and collapse(upto 64K maximum) in the
driver, in-sequence TCP packets belonging to the same session.
It is mainly designed to improve 1500 mtu receive performance,
since Jumbo frame performance is already close to 10GbE line
rate. Some performance numbers are attached below.

Implementation details:
1. Handle packet chains from multiple sessions(current default
MAX_LRO_SESSSIONS=32).
2. Examine each packet for eligiblity to aggregate. A packet is
considered eligible if it meets all the below criteria.
  a. It is a TCP/IP packet and L2 type is not LLC or SNAP.
  b. The packet has no checksum errors(L3 and L4).
  c. There are no IP options. The only TCP option supported is timestamps.
  d. Search and locate the LRO object corresponding to this
     socket and ensure packet is in TCP sequence.
  e. It's not a special packet(SYN, FIN, RST, URG, PSH etc. flags are not set).
  f. TCP payload is non-zero(It's not a pure ACK).
  g. It's not an IP-fragmented packet.
3. If a packet is found eligible, the LRO object is updated with
   information such as next sequence number expected, current length
   of aggregated packet and so on. If not eligible or max packets
   reached, update IP and TCP headers of first packet in the chain
   and pass it up to stack.
4. The frag_list in skb structure is used to chain packets into one
   large packet.

Kernel changes required: None

Performance results:
Main focus of the initial testing was on 1500 mtu receiver, since this
is a bottleneck not covered by the existing stateless offloads.

There are couple disclaimers about the performance results below:
1. Your mileage will vary!!!! We initially concentrated on couple pci-x
2.0 platforms that are powerful enough to push 10 GbE NIC and do not
have bottlenecks other than cpu%;  testing on other platforms is still
in progress. On some lower end systems we are seeing lower gains.

2. Current LRO implementation is still (for the most part) software based,
and therefore performance potential of the feature is far from being realized.
Full hw implementation of LRO is expected in the next version of Xframe ASIC.

Performance delta(with MTU=1500) going from LRO disabled to enabled:
IBM 2-way Xeon (x366) : 3.5 to 7.1 Gbps
2-way Opteron : 4.5 to 6.1 Gbps

Signed-off-by: Ravinandan Arakali <ravinandan.arakali@neterion.com>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
2006-01-27 10:34:38 -05:00
..
appletalk
arcnet [PATCH] Remove unnecessary check_region references in comments 2005-09-13 08:22:29 -07:00
arm [ARM] Update am79c961 to use struct platform_driver 2006-01-09 13:59:36 +00:00
bonding [PATCH] bonding: fix ->get_settings error checking 2006-01-26 22:08:56 -05:00
chelsio [PATCH] chelsio: transmit routine return values 2005-12-24 09:35:17 -05:00
cris [PATCH] cris v10 eth: use ethtool_ops 2005-11-09 01:10:09 -05:00
e1000 [PATCH] e1000: fix compile warning 2006-01-18 16:17:58 -05:00
fec_8xx [PATCH] fec_8xx: make CONFIG_FEC_8XX depend on CONFIG_8xx 2005-11-18 13:51:34 -05:00
fs_enet [PATCH] fs_enet build fix 2005-11-10 11:25:02 +11:00
hamradio [PATCH] TTY layer buffering revamp 2006-01-10 08:01:59 -08:00
ibm_emac [PATCH] PPC44x EMAC driver: disable TX status deferral in half-duplex mode 2006-01-09 10:34:25 -05:00
irda [IRDA] DONGLE_OLD: remove dependency on non-existing symbol 2006-01-10 13:11:44 -08:00
ixgb [PATCH] drivers/net/ixgb/: make some code static 2005-11-05 21:00:01 -05:00
ixp2000 [PATCH] ixp2000: change netif_schedule_test to __netif_schedule_prep 2005-12-03 20:29:03 -05:00
pcmcia spelling: s/trough/through/ 2006-01-10 00:13:33 +01:00
phy [PATCH] phy: Added a macro to represent the string format used to match a phy device 2006-01-12 16:31:52 -05:00
sk98lin spelling: s/usefull/useful/ 2006-01-10 00:08:17 +01:00
skfp [PATCH] sparse cleanups: NULL pointers, C99 struct init. 2005-10-30 17:37:29 -08:00
tokenring [DRIVER MODEL] Convert platform drivers to use struct platform_driver 2005-11-09 22:32:44 +00:00
tulip [PATCH] replace MODULE_PARM in tulip/uli526x.c 2006-01-12 16:32:35 -05:00
wan Fix "stuct", "strut", "struc" typos 2006-01-15 02:12:54 +01:00
wireless airo: Off-by-one channel fix 2006-01-17 08:01:01 -05:00
3c59x.c [PATCH] 3c59x: don't enable scatter/gather w/o checksum support 2005-11-07 07:53:25 -08:00
3c501.c
3c501.h
3c503.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
3c503.h
3c505.c
3c505.h
3c507.c
3c509.c [PATCH] move pm_register/etc. to CONFIG_PM_LEGACY, pm_legacy.h 2005-11-13 18:14:10 -08:00
3c515.c
3c523.c
3c523.h
3c527.c
3c527.h [PATCH] Eliminate __attribute__ ((packed)) warnings for gcc-4.1 2006-01-08 20:14:07 -08:00
7990.c
7990.h
8139cp.c Merge /spare/repo/linux-2.6/ 2005-09-21 22:34:08 -04:00
8139too.c [PATCH] turn "const static" into "static const" 2006-01-10 08:01:55 -08:00
8390.c [PATCH] 8390 Tx fix for non i386 machines 2005-09-23 05:18:45 -04:00
8390.h
82596.c
a2065.c
a2065.h
ac3200.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
acenic_firmware.h
acenic.c [PATCH] acenic: fix checking of read_eeprom_byte() return values 2006-01-26 22:09:40 -05:00
acenic.h
amd8111e.c [git] change permissions on drivers/net/amd8111e.[ch] to 0644, 2005-10-28 16:43:40 -04:00
amd8111e.h [git] change permissions on drivers/net/amd8111e.[ch] to 0644, 2005-10-28 16:43:40 -04:00
apne.c
ariadne.c
ariadne.h
at1700.c
atari_bionet.c
atari_pamsnet.c
atarilance.c
atp.c
atp.h
au1000_eth.c [PATCH] au1000_eth: Include <linux/config.h> 2005-11-18 13:29:41 -05:00
au1000_eth.h
b44.c [PATCH] b44: fix laptop carrier detect 2006-01-26 22:10:39 -05:00
b44.h [PATCH] b44: replace B44_FLAG_INIT_COMPLETE with netif_running() 2005-11-09 01:02:41 -05:00
bmac.c Merge ../linux-2.6 by hand 2005-10-31 13:37:12 +11:00
bmac.h
bnx2_fw.h [PATCH] bnx2: update firmware for 5708 2005-11-05 21:00:02 -05:00
bnx2.c [BNX2]: simplify parameter checks in bnx2_{get,set}_eeprom 2005-11-10 12:58:24 -08:00
bnx2.h [PATCH] bnx2: refine bnx2_poll 2005-11-05 21:00:03 -05:00
bsd_comp.c
cassini.c [CASSINI]: dont touch page_count 2006-01-18 14:05:16 -08:00
cassini.h [NET]: Add Sun Cassini driver. 2005-09-27 15:24:13 -07:00
cs89x0.c [PATCH] cs89x0: credit Dmitry Pervushin 2006-01-16 23:15:32 -08:00
cs89x0.h [PATCH] cs89x0: cleanly implement ixdp2x01 and pnx0501 support 2006-01-08 20:12:45 -08:00
de600.c
de600.h
de620.c
de620.h
declance.c [PATCH] declance: Use physical addresses at the interface level. 2005-10-18 18:03:48 -04:00
defxx.c
defxx.h
depca.c [DRIVER MODEL] Convert platform drivers to use struct platform_driver 2005-11-09 22:32:44 +00:00
depca.h
dgrs_asstruct.h
dgrs_bcomm.h
dgrs_es4h.h
dgrs_ether.h
dgrs_firmware.c
dgrs_i82596.h
dgrs_plx9060.h
dgrs.c [PATCH] net: Fix compiler-error on dgrs.c when !CONFIG_PCI 2005-11-22 09:13:41 -08:00
dgrs.h
dl2k.c
dl2k.h
dm9000.c Merge master.kernel.org:/home/rmk/linux-2.6-drvmodel 2005-11-11 09:24:26 -08:00
dm9000.h
dummy.c
e100.c [PATCH] e100: e100 whitespace fixes 2006-01-17 19:15:16 -05:00
e2100.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
eepro100.c
eepro.c [PATCH] remove some more check_region stuff 2005-10-30 17:37:18 -08:00
eexpress.c
eexpress.h
epic100.c [PATCH] epic100: fix counting of work_done in epic_poll 2005-10-18 22:26:01 -04:00
eql.c
es3210.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
eth16i.c
ewrk3.c
ewrk3.h
fealnx.c
fec.c [PATCH] m68knommu: FEC ethernet support for the ColdFire 5208 2005-11-07 08:00:47 -08:00
fec.h [PATCH] m68knommu: FEC ethernet header support for the ColdFire 5208 2005-11-07 08:00:47 -08:00
forcedeth.c [PATCH] forcedeth: TSO fix for large buffers 2006-01-09 10:54:48 -05:00
gianfar_ethtool.c [PATCH] Gianfar update and sysfs support 2005-11-18 13:31:26 -05:00
gianfar_mii.c [PATCH] gianfar mii: Use proper resource for MII memory region 2006-01-12 16:31:51 -05:00
gianfar_mii.h [PATCH] Gianfar update and sysfs support 2005-11-18 13:31:26 -05:00
gianfar_sysfs.c drivers/net/gianfar_sysfs.c: update email address of Kumar Gala 2006-01-11 02:00:10 +01:00
gianfar.c [PATCH] gianfar: Use new PHY_ID_FMT macro 2006-01-12 16:31:52 -05:00
gianfar.h [PATCH] drivers/net/gianfar.h: "extern inline" -> "static inline" 2006-01-09 10:54:47 -05:00
gt64240eth.h
gt96100eth.c [PATCH] gt96100eth.c: Don't concatenate __FUNCTION__ with strings. 2005-11-11 08:32:47 -05:00
gt96100eth.h
hamachi.c
hp100.c spelling: s/retreive/retrieve/ 2006-01-10 00:10:13 +01:00
hp100.h
hp-plus.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
hp.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
hplance.c [PATCH] m68k: NULL noise removal 2006-01-12 09:09:04 -08:00
hplance.h
hydra.c
hydra.h
ibmlana.c
ibmlana.h
ibmveth.c [PATCH] disable DEBUG in ibmveth 2005-11-11 05:47:04 -05:00
ibmveth.h [PATCH] ibmveth lockless TX 2005-10-28 16:07:30 -04:00
ifb.c [NET]: Add IFB (Intermediate Functional Block) network device. 2006-01-09 14:16:23 -08:00
ioc3-eth.c [PATCH] IOC3: Replace obsolete PCI API 2005-11-18 13:29:41 -05:00
isa-skeleton.c
iseries_veth.c [PATCH] powerpc: remove bitfields from HvLpEvent 2006-01-12 20:09:29 +11:00
jazzsonic.c [PATCH] jazzsonic: Fix platform device code 2005-12-01 02:26:46 -05:00
Kconfig [PATCH] uml: arch Kconfig menu cleanups 2006-01-18 19:20:21 -08:00
lance.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
lasi_82596.c [PARISC] Add NETPOLL support to lasi_82596 2005-10-21 22:55:15 -04:00
LICENSE.SRC
lne390.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
loopback.c
lp486e.c
mac89x0.c
mac8390.c [PATCH] m68k: lvalues abuse in mac8390 2006-01-12 09:09:01 -08:00
mace.c Merge ../linux-2.6 by hand 2005-10-31 13:37:12 +11:00
mace.h
macmace.c
macsonic.c [DRIVER MODEL] Convert platform drivers to use struct platform_driver 2005-11-09 22:32:44 +00:00
Makefile [NET]: Add IFB (Intermediate Functional Block) network device. 2006-01-09 14:16:23 -08:00
meth.c
meth.h
mii.c [PATCH] mii: Add test for GigE support 2005-09-14 08:46:21 -04:00
mipsnet.c Create platform_device.h to contain all the platform device details. 2005-10-29 19:07:23 +01:00
mipsnet.h [PATCH] mipsnet: Fix Copyright notice. 2005-12-01 02:26:45 -05:00
mv643xx_eth.c [PATCH] mv643xx_eth: Remove needless mask of extended intr register 2006-01-17 07:23:39 -05:00
mv643xx_eth.h [PATCH] changing CONFIG_LOCALVERSION rebuilds too much, for no good reason 2005-11-09 07:55:57 -08:00
mvme147.c
myri_code.h
myri_sbus.c [PATCH] gfp_t: drivers/net 2005-10-28 08:16:51 -07:00
myri_sbus.h [PATCH] gfp_t: drivers/net 2005-10-28 08:16:51 -07:00
natsemi.c
ne2.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
ne2k-pci.c [netdrvr] ne2k-pci based card does not support bus-mastering. 2005-10-28 16:55:55 -04:00
ne3210.c
ne-h8300.c
ne.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
netconsole.c
ni52.c
ni52.h
ni65.c drivers/net: Remove pointless checks for NULL prior to calling kfree() 2005-10-28 16:53:13 -04:00
ni65.h
ni5010.c
ni5010.h
ns83820.c [INET_SOCK]: Move struct inet_sock & helper functions to net/inet_sock.h 2006-01-03 13:11:21 -08:00
oaknet.c
pci-skeleton.c [PATCH] turn "const static" into "static const" 2006-01-10 08:01:55 -08:00
pcnet32.c [PATCH] pcnet32: use MAC address from prom also on powerpc 2005-12-12 15:30:38 -05:00
plip.c [PATCH] parport: include fixes 2006-01-06 08:33:58 -08:00
ppp_async.c [PATCH] TTY layer buffering revamp 2006-01-10 08:01:59 -08:00
ppp_deflate.c
ppp_generic.c [NET]: Validate socket filters against BPF_MAXINSNS in one spot. 2005-12-27 13:57:59 -08:00
ppp_mppe.c [PPP]: add PPP MPPE encryption module 2005-11-08 09:40:47 -08:00
ppp_mppe.h [PPP]: add PPP MPPE encryption module 2005-11-08 09:40:47 -08:00
ppp_synctty.c [PATCH] TTY layer buffering revamp 2006-01-10 08:01:59 -08:00
pppoe.c [PPPOX]: Fix assignment into const proto_ops. 2006-01-03 13:11:23 -08:00
pppox.c [PPPOX]: Fix assignment into const proto_ops. 2006-01-03 13:11:23 -08:00
r8169.c [PATCH] turn "const static" into "static const" 2006-01-10 08:01:55 -08:00
rionet.c [PATCH] Add rapidio net driver 2005-09-14 09:18:21 -04:00
rrunner.c drivers/net: Remove pointless checks for NULL prior to calling kfree() 2005-10-28 16:53:13 -04:00
rrunner.h
s2io-regs.h [PATCH] S2io: Offline diagnostics fixes 2005-10-18 16:58:27 -04:00
s2io.c [PATCH] S2io: Large Receive Offload (LRO) feature(v2) for Neterion (s2io) 10GbE Xframe PCI-X and PCI-E NICs 2006-01-27 10:34:38 -05:00
s2io.h [PATCH] S2io: Large Receive Offload (LRO) feature(v2) for Neterion (s2io) 10GbE Xframe PCI-X and PCI-E NICs 2006-01-27 10:34:38 -05:00
saa9730.c [PATCH] SAA9730: Driver overhaul 2005-11-11 08:31:35 -05:00
saa9730.h [PATCH] SAA9730: Add missing header bits. 2005-11-18 13:29:41 -05:00
sb1000.c [PATCH] Unlinline a bunch of other functions 2006-01-14 18:27:06 -08:00
sb1250-mac.c [PATCH] sb1250-mac: PHY probing fixes. 2005-10-20 16:06:11 -04:00
seeq8005.c
seeq8005.h
sgiseeq.c [PATCH] sgiseeq: Configure PIO and DMA timing requests. 2005-10-18 18:03:47 -04:00
sgiseeq.h
shaper.c
sis190.c [PATCH] turn "const static" into "static const" 2006-01-10 08:01:55 -08:00
sis900.c [PATCH] Add Wake on LAN support to sis900 (2) 2005-10-28 16:48:19 -04:00
sis900.h [PATCH] Add Wake on LAN support to sis900 (2) 2005-10-28 16:48:19 -04:00
sk_mca.c [PATCH] changing CONFIG_LOCALVERSION rebuilds too much, for no good reason 2005-11-09 07:55:57 -08:00
sk_mca.h [PATCH] changing CONFIG_LOCALVERSION rebuilds too much, for no good reason 2005-11-09 07:55:57 -08:00
skge.c [PATCH] skge: fix dma mask setup. 2006-01-17 19:52:56 -05:00
skge.h [PATCH] skge: get rid of Yukon2 defines 2005-12-24 09:36:06 -05:00
sky2.c [PATCH] sky2: 0.13 version 2006-01-17 19:27:31 -05:00
sky2.h [PATCH] sky2: tx/rx ring data structure split 2005-12-12 15:27:20 -05:00
slhc.c
slip.c [PATCH] TTY layer buffering revamp 2006-01-10 08:01:59 -08:00
slip.h
smc91x.c [PATCH] IRQ type flags 2006-01-08 20:13:46 -08:00
smc91x.h [PATCH] IRQ type flags 2006-01-08 20:13:46 -08:00
smc9194.c
smc9194.h
smc-mca.c
smc-ultra32.c
smc-ultra.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
sonic.c
sonic.h
Space.c
spider_net_ethtool.c [PATCH] spidernet: performance optimizations 2006-01-17 07:25:01 -05:00
spider_net.c [PATCH] spidernet: fix missing include 2006-01-17 07:25:01 -05:00
spider_net.h [PATCH] spidernet: performance optimizations 2006-01-17 07:25:01 -05:00
starfire_firmware.h
starfire_firmware.pl
starfire.c [PATCH] changing CONFIG_LOCALVERSION rebuilds too much, for no good reason 2005-11-09 07:55:57 -08:00
stnic.c
sun3_82586.c
sun3_82586.h
sun3lance.c [PATCH] m68k: NULL noise removal 2006-01-12 09:09:04 -08:00
sunbmac.c [PATCH] gfp_t: drivers/net 2005-10-28 08:16:51 -07:00
sunbmac.h [PATCH] gfp_t: drivers/net 2005-10-28 08:16:51 -07:00
sundance.c [PATCH] sundance: fix DFE-580TX Tx Underrun 2005-10-28 16:40:33 -04:00
sungem_phy.c
sungem_phy.h
sungem.c [SUNGEM]: Fix link error with CONFIG_HOTPLUG disabled. 2005-12-22 23:09:44 -08:00
sungem.h [PATCH] gfp flags annotations - part 1 2005-10-08 15:00:57 -07:00
sunhme.c
sunhme.h
sunlance.c
sunqe.c
sunqe.h
tc35815.c
tg3.c [TG3]: Refine nvram locking 2006-01-17 02:40:55 -08:00
tg3.h [TG3]: Refine nvram locking 2006-01-17 02:40:55 -08:00
tlan.c s/retreiv/retriev/g 2006-01-03 13:27:11 +01:00
tlan.h
tun.c
typhoon-firmware.h
typhoon.c [PATCH] drivers/net: fix-up schedule_timeout() usage 2005-09-14 08:33:24 -04:00
typhoon.h
via-rhine.c [PATCH] via-rhine: change mdelay to msleep and remove from ISR path 2005-10-18 22:26:01 -04:00
via-velocity.c [PATCH] via-velocity: use NETIF_F_IP_CSUM (hardware only support IPv4) 2006-01-12 16:39:45 -05:00
via-velocity.h
wd.c [PATCH] fix a few "warning: 'cleanup_card' defined but not used" 2006-01-09 10:54:48 -05:00
yellowfin.c
znet.c
zorro8390.c