aha/drivers
Roland Dreier 47fd23fe8e cxgb3: Keep LRO off if disabled when interface is down
I have a system with a Chelsio adapter (driven by cxgb3) whose ports are
part of a Linux bridge.  Recently I updated the kernel and discovered
that things stopped working because cxgb3 was doing LRO on packets that
were passed into the bridge code for forwarding.  (Incidentally, this
problem manifested itself in a strange way that made debugging a bit
interesting -- for some reason, the skb_warn_if_lro() check in bridge
didn't trigger and these LROed packets were forwarded out a forcedeth
interface, and caused the forcedeth transmit path to get stuck)

This is because cxgb3 has no way of keeping state for the LRO flag until
the interface is brought up, so if the bridging code disables LRO while
the interface is down, then cxgb3_up() will just reenable LRO, and on my
Debian system at least, the init scripts add interfaces to a bridge
before bringing the interfaces up.

Fix this by keeping track of each interface's LRO state in cxgb3 so that
when bridge disables LRO, it stays disabled in cxgb3_up() when the
interface is brought up.  I did this by changing the rx_csum_offload
flag into a pair of bit flags; the effect of this on the rx_eth() fast
path is miniscule enough that it should be fine (eg on x86, a cmpb
instruction becomes a testb instruction).

Signed-off-by: Roland Dreier <rolandd@cisco.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2009-01-11 00:19:36 -08:00
..
accessibility
acpi Merge branch 'drivers-platform' into release 2009-01-09 04:56:56 -05:00
amba [ARM] Fix realview build 2009-01-08 16:29:41 +00:00
ata libata: only ports >= 0 need to synchronize 2009-01-10 15:06:52 -08:00
atm generic swap(): iphase: rename swap() to swap_byte_order() 2009-01-08 08:31:14 -08:00
auxdisplay
base Revert "driver core: create a private portion of struct device" 2009-01-09 15:06:12 -08:00
block Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6 2009-01-07 17:23:53 -08:00
bluetooth
cdrom
char Merge branch 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6 2009-01-09 13:56:06 -08:00
clocksource
connector
cpufreq Merge branch 'cpus4096-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-01-10 06:12:18 -08:00
cpuidle
crypto
dca
dio
dma
edac edac: driver for i5400 MCH (update) 2009-01-06 15:59:30 -08:00
eisa
firewire firewire: core: fix sleep in atomic context due to driver core change 2009-01-09 23:22:32 +01:00
firmware Make various things static 2009-01-08 08:31:15 -08:00
gpio Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6 2009-01-06 17:02:07 -08:00
gpu trivial: replace last usages of __FUNCTION__ in kernel 2009-01-07 15:48:54 -08:00
hid Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6 2009-01-07 15:37:24 -08:00
hwmon LIS3LV02D: separate the core from HP ACPI API 2009-01-09 16:54:42 -08:00
i2c Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6 2009-01-07 15:37:24 -08:00
ide Merge branch 'linus' into release 2009-01-09 03:39:43 -05:00
idle
ieee1394 Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 2009-01-08 11:05:59 -08:00
infiniband fix similar typos to successfull 2009-01-08 08:31:15 -08:00
input [ARM] fix pxa930_trkball build errors 2009-01-08 16:29:44 +00:00
isdn drivers/isdn/hardware/mISDN: move a dereference below a NULL test 2009-01-11 00:06:34 -08:00
leds leds: ledtrig-timer - on deactivation hardware blinking should be disabled 2009-01-08 20:58:01 +00:00
lguest
macintosh Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2009-01-07 11:31:52 -08:00
mca
md md: don't retry recovery of raid1 that fails due to error on source drive. 2009-01-09 08:31:11 +11:00
media Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 2009-01-08 11:05:59 -08:00
memstick memstick: annotate endianness of attribute structs 2009-01-09 16:54:41 -08:00
message Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2009-01-08 16:27:31 -08:00
mfd leds: Add WM8350 LED driver 2009-01-08 12:38:58 +00:00
misc Merge branch 'drivers-platform' into release 2009-01-09 04:56:56 -05:00
mmc Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx 2009-01-09 11:52:14 -08:00
mtd Merge git://git.infradead.org/mtd-2.6 2009-01-09 12:37:15 -08:00
net cxgb3: Keep LRO off if disabled when interface is down 2009-01-11 00:19:36 -08:00
nubus
of
oprofile Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rric/oprofile 2009-01-09 12:43:06 -08:00
parisc Merge git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6 2009-01-09 11:53:07 -08:00
parport parport: ieee1284: use del_timer_sync() in parport_wait_event() 2009-01-06 15:59:31 -08:00
pci Merge branch 'cpus4096-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2009-01-10 06:12:18 -08:00
pcmcia
platform hp-wmi: handle rfkill_register() failure 2009-01-09 16:54:41 -08:00
pnp Merge branch 'linus' into release 2009-01-09 03:39:43 -05:00
power
ps3
rapidio
regulator Merge branch 'for-linus' of git://git.o-hand.com/linux-rpurdie-leds 2009-01-09 13:55:37 -08:00
rtc Merge git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6 2009-01-09 11:53:07 -08:00
s390 qeth: fix usage of netdev_ops 2009-01-11 00:05:16 -08:00
sbus
scsi Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2009-01-08 16:27:31 -08:00
serial Merge master.kernel.org:/home/rmk/linux-2.6-arm 2009-01-08 14:25:00 -08:00
sh
sn
spi hwmon: (lm70) Code streamlining and cleanup 2009-01-07 16:37:34 +01:00
ssb
staging Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6 2009-01-07 17:22:04 -08:00
tc
telephony
thermal
uio
usb Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 2009-01-08 11:05:59 -08:00
uwb Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 2009-01-08 11:05:59 -08:00
video Merge branch 'for-linus' of git://git.o-hand.com/linux-rpurdie-backlight 2009-01-09 13:55:13 -08:00
virtio
w1 w1: send status messages after command processing 2009-01-08 08:31:14 -08:00
watchdog
xen xen: add xenfs to allow usermode <-> Xen interaction 2009-01-08 08:30:59 -08:00
zorro
Kconfig
Makefile Merge branch 'drivers-platform' into release 2009-01-09 04:56:56 -05:00