diff options
Diffstat (limited to 'patches')
-rw-r--r-- | patches/linux-2.6.16.32/blktap-aio-16_03_06.patch (renamed from patches/linux-2.6.16.13/blktap-aio-16_03_06.patch) | 27 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/device_bind.patch (renamed from patches/linux-2.6.16.13/device_bind.patch) | 6 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/fix-hz-suspend.patch (renamed from patches/linux-2.6.16.13/fix-hz-suspend.patch) | 6 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/fix-ide-cd-pio-mode.patch (renamed from patches/linux-2.6.16.13/fix-ide-cd-pio-mode.patch) | 8 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/i386-mach-io-check-nmi.patch (renamed from patches/linux-2.6.16.13/i386-mach-io-check-nmi.patch) | 12 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/ipv6-no-autoconf.patch (renamed from patches/linux-2.6.16.13/ipv6-no-autoconf.patch) | 14 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/kasprintf.patch | 59 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/net-csum.patch (renamed from patches/linux-2.6.16.13/net-csum.patch) | 18 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/net-gso-0-base.patch (renamed from patches/linux-2.6.16.13/net-gso-0-base.patch) | 895 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/net-gso-1-check-dodgy.patch (renamed from patches/linux-2.6.16.13/net-gso-1-check-dodgy.patch) | 6 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/net-gso-2-checksum-fix.patch (renamed from patches/linux-2.6.16.13/net-gso-2-checksum-fix.patch) | 134 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/net-gso-3-fix-errorcheck.patch (renamed from patches/linux-2.6.16.13/net-gso-3-fix-errorcheck.patch) | 6 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/net-gso-4-kill-warnon.patch (renamed from patches/linux-2.6.16.13/net-gso-4-kill-warnon.patch) | 8 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/net-gso-5-rcv-mss.patch | 13 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/pci-mmconfig-fix-from-2.6.17.patch | 292 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/pmd-shared.patch (renamed from patches/linux-2.6.16.13/pmd-shared.patch) | 24 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/rcu_needs_cpu.patch (renamed from patches/linux-2.6.16.13/rcu_needs_cpu.patch) | 26 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/rename-TSS_sysenter_esp0-SYSENTER_stack_esp0.patch (renamed from patches/linux-2.6.16.13/rename-TSS_sysenter_esp0-SYSENTER_stack_esp0.patch) | 6 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/series (renamed from patches/linux-2.6.16.13/series) | 4 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/smp-alts.patch (renamed from patches/linux-2.6.16.13/smp-alts.patch) | 72 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/tpm_plugin_2.6.17.patch (renamed from patches/linux-2.6.16.13/tpm_plugin_2.6.17.patch) | 37 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/vsnprintf.patch | 211 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/x86-elfnote-as-preprocessor-macro.patch (renamed from patches/linux-2.6.16.13/x86-elfnote-as-preprocessor-macro.patch) | 7 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/x86-increase-interrupt-vector-range.patch (renamed from patches/linux-2.6.16.13/x86-increase-interrupt-vector-range.patch) | 38 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/x86-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch (renamed from patches/linux-2.6.16.13/x86-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch) | 59 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/x86_64-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch (renamed from patches/linux-2.6.16.13/x86_64-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch) | 19 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/xen-hotplug.patch (renamed from patches/linux-2.6.16.13/xen-hotplug.patch) | 5 | ||||
-rw-r--r-- | patches/linux-2.6.16.32/xenoprof-generic.patch (renamed from patches/linux-2.6.16.13/xenoprof-generic.patch) | 135 |
28 files changed, 1363 insertions, 784 deletions
diff --git a/patches/linux-2.6.16.13/blktap-aio-16_03_06.patch b/patches/linux-2.6.16.32/blktap-aio-16_03_06.patch index 5f4fd6f7a9..bf3e8d63f0 100644 --- a/patches/linux-2.6.16.13/blktap-aio-16_03_06.patch +++ b/patches/linux-2.6.16.32/blktap-aio-16_03_06.patch @@ -1,6 +1,6 @@ -diff -pruN ../pristine-linux-2.6.16-rc5/fs/aio.c ./fs/aio.c ---- ../pristine-linux-2.6.16-rc5/fs/aio.c 2006-03-14 14:10:10.827401387 +0000 -+++ ./fs/aio.c 2006-03-16 09:57:53.898316582 +0000 +diff -pruN ../orig-linux-2.6.16.29/fs/aio.c ./fs/aio.c +--- ../orig-linux-2.6.16.29/fs/aio.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./fs/aio.c 2006-09-19 13:58:49.000000000 +0100 @@ -34,6 +34,11 @@ #include <asm/uaccess.h> #include <asm/mmu_context.h> @@ -184,10 +184,9 @@ diff -pruN ../pristine-linux-2.6.16-rc5/fs/aio.c ./fs/aio.c get_ioctx(ioctx); /* io_destroy() expects us to hold a ref */ io_destroy(ioctx); - -diff -pruN ../pristine-linux-2.6.16-rc5/fs/eventpoll.c ./fs/eventpoll.c ---- ../pristine-linux-2.6.16-rc5/fs/eventpoll.c 2006-01-03 03:21:10.000000000 +0000 -+++ ./fs/eventpoll.c 2006-03-16 10:04:35.469956167 +0000 +diff -pruN ../orig-linux-2.6.16.29/fs/eventpoll.c ./fs/eventpoll.c +--- ../orig-linux-2.6.16.29/fs/eventpoll.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./fs/eventpoll.c 2006-09-19 13:58:49.000000000 +0100 @@ -235,8 +235,6 @@ struct ep_pqueue { static void ep_poll_safewake_init(struct poll_safewake *psw); @@ -262,10 +261,9 @@ diff -pruN ../pristine-linux-2.6.16-rc5/fs/eventpoll.c ./fs/eventpoll.c /* * Mark the inode dirty from the very beginning, - -diff -pruN ../pristine-linux-2.6.16-rc5/include/linux/aio.h ./include/linux/aio.h ---- ../pristine-linux-2.6.16-rc5/include/linux/aio.h 2006-03-14 14:10:21.597916731 +0000 -+++ ./include/linux/aio.h 2006-03-16 10:05:39.848833028 +0000 +diff -pruN ../orig-linux-2.6.16.29/include/linux/aio.h ./include/linux/aio.h +--- ../orig-linux-2.6.16.29/include/linux/aio.h 2006-09-12 19:02:10.000000000 +0100 ++++ ./include/linux/aio.h 2006-09-19 13:58:49.000000000 +0100 @@ -191,6 +191,11 @@ struct kioctx { struct aio_ring_info ring_info; @@ -278,10 +276,9 @@ diff -pruN ../pristine-linux-2.6.16-rc5/include/linux/aio.h ./include/linux/aio. }; /* prototypes */ - -diff -pruN ../pristine-linux-2.6.16-rc5/include/linux/eventpoll.h ./include/linux/eventpoll.h ---- ../pristine-linux-2.6.16-rc5/include/linux/eventpoll.h 2006-01-03 03:21:10.000000000 +0000 -+++ ./include/linux/eventpoll.h 2006-03-16 10:08:51.577809317 +0000 +diff -pruN ../orig-linux-2.6.16.29/include/linux/eventpoll.h ./include/linux/eventpoll.h +--- ../orig-linux-2.6.16.29/include/linux/eventpoll.h 2006-09-12 19:02:10.000000000 +0100 ++++ ./include/linux/eventpoll.h 2006-09-19 13:58:49.000000000 +0100 @@ -86,6 +86,12 @@ static inline void eventpoll_release(str } diff --git a/patches/linux-2.6.16.13/device_bind.patch b/patches/linux-2.6.16.32/device_bind.patch index 331234c89f..8cef71ecc1 100644 --- a/patches/linux-2.6.16.13/device_bind.patch +++ b/patches/linux-2.6.16.32/device_bind.patch @@ -1,6 +1,6 @@ -diff -pruN ../pristine-linux-2.6.16.13/drivers/base/bus.c ./drivers/base/bus.c ---- ../pristine-linux-2.6.16.13/drivers/base/bus.c 2006-05-02 22:38:44.000000000 +0100 -+++ ./drivers/base/bus.c 2006-05-04 17:41:30.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/drivers/base/bus.c ./drivers/base/bus.c +--- ../orig-linux-2.6.16.29/drivers/base/bus.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./drivers/base/bus.c 2006-09-19 13:58:54.000000000 +0100 @@ -188,6 +188,11 @@ static ssize_t driver_bind(struct device up(&dev->sem); if (dev->parent) diff --git a/patches/linux-2.6.16.13/fix-hz-suspend.patch b/patches/linux-2.6.16.32/fix-hz-suspend.patch index bcb79553e7..2a964ccb8c 100644 --- a/patches/linux-2.6.16.13/fix-hz-suspend.patch +++ b/patches/linux-2.6.16.32/fix-hz-suspend.patch @@ -1,6 +1,6 @@ -diff -pruN ../pristine-linux-2.6.16.13/kernel/timer.c ./kernel/timer.c ---- ../pristine-linux-2.6.16.13/kernel/timer.c 2006-05-02 22:38:44.000000000 +0100 -+++ ./kernel/timer.c 2006-06-29 14:34:12.788957720 +0100 +diff -pruN ../orig-linux-2.6.16.29/kernel/timer.c ./kernel/timer.c +--- ../orig-linux-2.6.16.29/kernel/timer.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./kernel/timer.c 2006-09-19 13:58:58.000000000 +0100 @@ -555,6 +555,22 @@ found: } spin_unlock(&base->t_base.lock); diff --git a/patches/linux-2.6.16.13/fix-ide-cd-pio-mode.patch b/patches/linux-2.6.16.32/fix-ide-cd-pio-mode.patch index 0892117255..91e6cb5279 100644 --- a/patches/linux-2.6.16.13/fix-ide-cd-pio-mode.patch +++ b/patches/linux-2.6.16.32/fix-ide-cd-pio-mode.patch @@ -1,7 +1,7 @@ -diff -ru ../pristine-linux-2.6.16.13/drivers/ide/ide-lib.c ./drivers/ide/ide-lib.c ---- ../pristine-linux-2.6.16.13/drivers/ide/ide-lib.c 2006-05-02 22:38:44.000000000 +0100 -+++ ./drivers/ide/ide-lib.c 2006-05-24 18:37:05.000000000 +0100 -@@ -410,10 +410,10 @@ +diff -pruN ../orig-linux-2.6.16.29/drivers/ide/ide-lib.c ./drivers/ide/ide-lib.c +--- ../orig-linux-2.6.16.29/drivers/ide/ide-lib.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./drivers/ide/ide-lib.c 2006-09-19 13:59:03.000000000 +0100 +@@ -410,10 +410,10 @@ void ide_toggle_bounce(ide_drive_t *driv { u64 addr = BLK_BOUNCE_HIGH; /* dma64_addr_t */ diff --git a/patches/linux-2.6.16.13/i386-mach-io-check-nmi.patch b/patches/linux-2.6.16.32/i386-mach-io-check-nmi.patch index 424e5483ad..bfcba3908a 100644 --- a/patches/linux-2.6.16.13/i386-mach-io-check-nmi.patch +++ b/patches/linux-2.6.16.32/i386-mach-io-check-nmi.patch @@ -1,6 +1,6 @@ -diff -pruN ../pristine-linux-2.6.16.13/arch/i386/kernel/traps.c ./arch/i386/kernel/traps.c ---- ../pristine-linux-2.6.16.13/arch/i386/kernel/traps.c 2006-05-02 22:38:44.000000000 +0100 -+++ ./arch/i386/kernel/traps.c 2006-05-04 17:41:34.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/arch/i386/kernel/traps.c ./arch/i386/kernel/traps.c +--- ../orig-linux-2.6.16.29/arch/i386/kernel/traps.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./arch/i386/kernel/traps.c 2006-09-19 13:59:06.000000000 +0100 @@ -567,18 +567,11 @@ static void mem_parity_error(unsigned ch static void io_check_error(unsigned char reason, struct pt_regs * regs) @@ -21,9 +21,9 @@ diff -pruN ../pristine-linux-2.6.16.13/arch/i386/kernel/traps.c ./arch/i386/kern } static void unknown_nmi_error(unsigned char reason, struct pt_regs * regs) -diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/mach-default/mach_traps.h ./include/asm-i386/mach-default/mach_traps.h ---- ../pristine-linux-2.6.16.13/include/asm-i386/mach-default/mach_traps.h 2006-05-02 22:38:44.000000000 +0100 -+++ ./include/asm-i386/mach-default/mach_traps.h 2006-05-04 17:41:34.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/asm-i386/mach-default/mach_traps.h ./include/asm-i386/mach-default/mach_traps.h +--- ../orig-linux-2.6.16.29/include/asm-i386/mach-default/mach_traps.h 2006-09-12 19:02:10.000000000 +0100 ++++ ./include/asm-i386/mach-default/mach_traps.h 2006-09-19 13:59:06.000000000 +0100 @@ -15,6 +15,18 @@ static inline void clear_mem_error(unsig outb(reason, 0x61); } diff --git a/patches/linux-2.6.16.13/ipv6-no-autoconf.patch b/patches/linux-2.6.16.32/ipv6-no-autoconf.patch index 7d2fd4d531..e0d1b8c681 100644 --- a/patches/linux-2.6.16.13/ipv6-no-autoconf.patch +++ b/patches/linux-2.6.16.32/ipv6-no-autoconf.patch @@ -1,11 +1,7 @@ - net/ipv6/addrconf.c | 2 ++ - 1 files changed, 2 insertions(+) - -Index: build/net/ipv6/addrconf.c -=================================================================== ---- build.orig/net/ipv6/addrconf.c -+++ build/net/ipv6/addrconf.c -@@ -2462,6 +2462,7 @@ static void addrconf_dad_start(struct in +diff -pruN ../orig-linux-2.6.16.29/net/ipv6/addrconf.c ./net/ipv6/addrconf.c +--- ../orig-linux-2.6.16.29/net/ipv6/addrconf.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./net/ipv6/addrconf.c 2006-09-19 13:59:11.000000000 +0100 +@@ -2471,6 +2471,7 @@ static void addrconf_dad_start(struct in spin_lock_bh(&ifp->lock); if (dev->flags&(IFF_NOARP|IFF_LOOPBACK) || @@ -13,7 +9,7 @@ Index: build/net/ipv6/addrconf.c !(ifp->flags&IFA_F_TENTATIVE)) { ifp->flags &= ~IFA_F_TENTATIVE; spin_unlock_bh(&ifp->lock); -@@ -2546,6 +2547,7 @@ static void addrconf_dad_completed(struc +@@ -2555,6 +2556,7 @@ static void addrconf_dad_completed(struc if (ifp->idev->cnf.forwarding == 0 && ifp->idev->cnf.rtr_solicits > 0 && (dev->flags&IFF_LOOPBACK) == 0 && diff --git a/patches/linux-2.6.16.32/kasprintf.patch b/patches/linux-2.6.16.32/kasprintf.patch new file mode 100644 index 0000000000..03e8c07ccf --- /dev/null +++ b/patches/linux-2.6.16.32/kasprintf.patch @@ -0,0 +1,59 @@ +commit e905914f96e11862b130dd229f73045dad9a34e8 +Author: Jeremy Fitzhardinge <jeremy@xensource.com> +Date: Sun Jun 25 05:49:17 2006 -0700 + + [PATCH] Implement kasprintf + + Implement kasprintf, a kernel version of asprintf. This allocates the + memory required for the formatted string, including the trailing '\0'. + Returns NULL on allocation failure. + + Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com> + Signed-off-by: Chris Wright <chrisw@sous-sol.org> + Signed-off-by: Andrew Morton <akpm@osdl.org> + Signed-off-by: Linus Torvalds <torvalds@osdl.org> + +diff --git a/include/linux/kernel.h b/include/linux/kernel.h +index 8c21aaa..3c5e4c2 100644 +--- a/include/linux/kernel.h ++++ b/include/linux/kernel.h +@@ -117,6 +117,8 @@ extern int scnprintf(char * buf, size_t + __attribute__ ((format (printf, 3, 4))); + extern int vscnprintf(char *buf, size_t size, const char *fmt, va_list args) + __attribute__ ((format (printf, 3, 0))); ++extern char *kasprintf(gfp_t gfp, const char *fmt, ...) ++ __attribute__ ((format (printf, 2, 3))); + + extern int sscanf(const char *, const char *, ...) + __attribute__ ((format (scanf, 2, 3))); +diff --git a/lib/vsprintf.c b/lib/vsprintf.c +index f595947..797428a 100644 +--- a/lib/vsprintf.c ++++ b/lib/vsprintf.c +@@ -849,3 +849,26 @@ int sscanf(const char * buf, const char + } + + EXPORT_SYMBOL(sscanf); ++ ++ ++/* Simplified asprintf. */ ++char *kasprintf(gfp_t gfp, const char *fmt, ...) ++{ ++ va_list ap; ++ unsigned int len; ++ char *p; ++ ++ va_start(ap, fmt); ++ len = vsnprintf(NULL, 0, fmt, ap); ++ va_end(ap); ++ ++ p = kmalloc(len+1, gfp); ++ if (!p) ++ return NULL; ++ va_start(ap, fmt); ++ vsnprintf(p, len+1, fmt, ap); ++ va_end(ap); ++ return p; ++} ++ ++EXPORT_SYMBOL(kasprintf); diff --git a/patches/linux-2.6.16.13/net-csum.patch b/patches/linux-2.6.16.32/net-csum.patch index c99e0506b2..d5fb233077 100644 --- a/patches/linux-2.6.16.13/net-csum.patch +++ b/patches/linux-2.6.16.32/net-csum.patch @@ -1,6 +1,6 @@ -diff -pruN ../pristine-linux-2.6.16.13/net/ipv4/netfilter/ip_nat_proto_tcp.c ./net/ipv4/netfilter/ip_nat_proto_tcp.c ---- ../pristine-linux-2.6.16.13/net/ipv4/netfilter/ip_nat_proto_tcp.c 2006-05-02 22:38:44.000000000 +0100 -+++ ./net/ipv4/netfilter/ip_nat_proto_tcp.c 2006-05-16 13:28:19.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/net/ipv4/netfilter/ip_nat_proto_tcp.c ./net/ipv4/netfilter/ip_nat_proto_tcp.c +--- ../orig-linux-2.6.16.29/net/ipv4/netfilter/ip_nat_proto_tcp.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./net/ipv4/netfilter/ip_nat_proto_tcp.c 2006-09-19 13:59:15.000000000 +0100 @@ -129,7 +129,12 @@ tcp_manip_pkt(struct sk_buff **pskb, if (hdrsize < sizeof(*hdr)) return 1; @@ -15,9 +15,9 @@ diff -pruN ../pristine-linux-2.6.16.13/net/ipv4/netfilter/ip_nat_proto_tcp.c ./n ip_nat_cheat_check(oldport ^ 0xFFFF, newport, hdr->check)); -diff -pruN ../pristine-linux-2.6.16.13/net/ipv4/netfilter/ip_nat_proto_udp.c ./net/ipv4/netfilter/ip_nat_proto_udp.c ---- ../pristine-linux-2.6.16.13/net/ipv4/netfilter/ip_nat_proto_udp.c 2006-05-02 22:38:44.000000000 +0100 -+++ ./net/ipv4/netfilter/ip_nat_proto_udp.c 2006-05-16 13:30:14.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/net/ipv4/netfilter/ip_nat_proto_udp.c ./net/ipv4/netfilter/ip_nat_proto_udp.c +--- ../orig-linux-2.6.16.29/net/ipv4/netfilter/ip_nat_proto_udp.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./net/ipv4/netfilter/ip_nat_proto_udp.c 2006-09-19 13:59:15.000000000 +0100 @@ -113,11 +113,17 @@ udp_manip_pkt(struct sk_buff **pskb, newport = tuple->dst.u.udp.port; portptr = &hdr->dest; @@ -38,9 +38,9 @@ diff -pruN ../pristine-linux-2.6.16.13/net/ipv4/netfilter/ip_nat_proto_udp.c ./n *portptr = newport; return 1; } -diff -pruN ../pristine-linux-2.6.16.13/net/ipv4/xfrm4_output.c ./net/ipv4/xfrm4_output.c ---- ../pristine-linux-2.6.16.13/net/ipv4/xfrm4_output.c 2006-05-02 22:38:44.000000000 +0100 -+++ ./net/ipv4/xfrm4_output.c 2006-05-04 17:41:37.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/net/ipv4/xfrm4_output.c ./net/ipv4/xfrm4_output.c +--- ../orig-linux-2.6.16.29/net/ipv4/xfrm4_output.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./net/ipv4/xfrm4_output.c 2006-09-19 13:59:15.000000000 +0100 @@ -17,6 +17,8 @@ #include <net/xfrm.h> #include <net/icmp.h> diff --git a/patches/linux-2.6.16.13/net-gso-0-base.patch b/patches/linux-2.6.16.32/net-gso-0-base.patch index 4c69d1e4a6..ce414f3326 100644 --- a/patches/linux-2.6.16.13/net-gso-0-base.patch +++ b/patches/linux-2.6.16.32/net-gso-0-base.patch @@ -1,8 +1,8 @@ -diff --git a/Documentation/networking/netdevices.txt b/Documentation/networking/netdevices.txt -index 3c0a5ba..847cedb 100644 ---- a/Documentation/networking/netdevices.txt -+++ b/Documentation/networking/netdevices.txt -@@ -42,9 +42,9 @@ dev->get_stats: +Index: tmp-xxx/Documentation/networking/netdevices.txt +=================================================================== +--- tmp-xxx.orig/Documentation/networking/netdevices.txt 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/Documentation/networking/netdevices.txt 2006-11-27 10:52:42.000000000 +0000 +@@ -42,9 +42,9 @@ Context: nominally process, but don't sleep inside an rwlock dev->hard_start_xmit: @@ -14,7 +14,7 @@ index 3c0a5ba..847cedb 100644 has to lock by itself when needed. It is recommended to use a try lock for this and return -1 when the spin lock fails. The locking there should also properly protect against -@@ -62,12 +62,12 @@ dev->hard_start_xmit: +@@ -62,12 +62,12 @@ Only valid when NETIF_F_LLTX is set. dev->tx_timeout: @@ -29,11 +29,11 @@ index 3c0a5ba..847cedb 100644 Context: BHs disabled dev->poll: -diff --git a/drivers/block/aoe/aoenet.c b/drivers/block/aoe/aoenet.c -index 4be9769..2e7cac7 100644 ---- a/drivers/block/aoe/aoenet.c -+++ b/drivers/block/aoe/aoenet.c -@@ -95,9 +95,8 @@ mac_addr(char addr[6]) +Index: tmp-xxx/drivers/block/aoe/aoenet.c +=================================================================== +--- tmp-xxx.orig/drivers/block/aoe/aoenet.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/block/aoe/aoenet.c 2006-11-27 10:52:42.000000000 +0000 +@@ -95,9 +95,8 @@ static struct sk_buff * skb_check(struct sk_buff *skb) { @@ -44,11 +44,11 @@ index 4be9769..2e7cac7 100644 dev_kfree_skb(skb); return NULL; } -diff --git a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c -index a2408d7..c90e620 100644 ---- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c -+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c -@@ -821,7 +821,8 @@ void ipoib_mcast_restart_task(void *dev_ +Index: tmp-xxx/drivers/infiniband/ulp/ipoib/ipoib_multicast.c +=================================================================== +--- tmp-xxx.orig/drivers/infiniband/ulp/ipoib/ipoib_multicast.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/infiniband/ulp/ipoib/ipoib_multicast.c 2006-11-27 10:52:42.000000000 +0000 +@@ -821,7 +821,8 @@ ipoib_mcast_stop_thread(dev, 0); @@ -58,7 +58,7 @@ index a2408d7..c90e620 100644 spin_lock(&priv->lock); /* -@@ -896,7 +897,8 @@ void ipoib_mcast_restart_task(void *dev_ +@@ -896,7 +897,8 @@ } spin_unlock(&priv->lock); @@ -68,11 +68,11 @@ index a2408d7..c90e620 100644 /* We have to cancel outside of the spinlock */ list_for_each_entry_safe(mcast, tmcast, &remove_list, list) { -diff --git a/drivers/media/dvb/dvb-core/dvb_net.c b/drivers/media/dvb/dvb-core/dvb_net.c -index 6711eb6..8d2351f 100644 ---- a/drivers/media/dvb/dvb-core/dvb_net.c -+++ b/drivers/media/dvb/dvb-core/dvb_net.c -@@ -1052,7 +1052,7 @@ static void wq_set_multicast_list (void +Index: tmp-xxx/drivers/media/dvb/dvb-core/dvb_net.c +=================================================================== +--- tmp-xxx.orig/drivers/media/dvb/dvb-core/dvb_net.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/media/dvb/dvb-core/dvb_net.c 2006-11-27 10:52:42.000000000 +0000 +@@ -1053,7 +1053,7 @@ dvb_net_feed_stop(dev); priv->rx_mode = RX_MODE_UNI; @@ -81,7 +81,7 @@ index 6711eb6..8d2351f 100644 if (dev->flags & IFF_PROMISC) { dprintk("%s: promiscuous mode\n", dev->name); -@@ -1077,7 +1077,7 @@ static void wq_set_multicast_list (void +@@ -1078,7 +1078,7 @@ } } @@ -90,11 +90,11 @@ index 6711eb6..8d2351f 100644 dvb_net_feed_start(dev); } -diff --git a/drivers/net/8139cp.c b/drivers/net/8139cp.c -index dd41049..6615583 100644 ---- a/drivers/net/8139cp.c -+++ b/drivers/net/8139cp.c -@@ -794,7 +794,7 @@ #endif +Index: tmp-xxx/drivers/net/8139cp.c +=================================================================== +--- tmp-xxx.orig/drivers/net/8139cp.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/8139cp.c 2006-11-27 10:52:42.000000000 +0000 +@@ -794,7 +794,7 @@ entry = cp->tx_head; eor = (entry == (CP_TX_RING_SIZE - 1)) ? RingEnd : 0; if (dev->features & NETIF_F_TSO) @@ -103,11 +103,11 @@ index dd41049..6615583 100644 if (skb_shinfo(skb)->nr_frags == 0) { struct cp_desc *txd = &cp->tx_ring[entry]; -diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c -index a24200d..b5e39a1 100644 ---- a/drivers/net/bnx2.c -+++ b/drivers/net/bnx2.c -@@ -1593,7 +1593,7 @@ bnx2_tx_int(struct bnx2 *bp) +Index: tmp-xxx/drivers/net/bnx2.c +=================================================================== +--- tmp-xxx.orig/drivers/net/bnx2.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/bnx2.c 2006-11-27 10:52:42.000000000 +0000 +@@ -1593,7 +1593,7 @@ skb = tx_buf->skb; #ifdef BCM_TSO /* partial BD completions possible with TSO packets */ @@ -116,7 +116,7 @@ index a24200d..b5e39a1 100644 u16 last_idx, last_ring_idx; last_idx = sw_cons + -@@ -1948,7 +1948,7 @@ bnx2_poll(struct net_device *dev, int *b +@@ -1948,7 +1948,7 @@ return 1; } @@ -125,7 +125,7 @@ index a24200d..b5e39a1 100644 * from set_multicast. */ static void -@@ -4403,7 +4403,7 @@ bnx2_vlan_rx_kill_vid(struct net_device +@@ -4403,7 +4403,7 @@ } #endif @@ -134,7 +134,7 @@ index a24200d..b5e39a1 100644 * hard_start_xmit is pseudo-lockless - a lock is only required when * the tx queue is full. This way, we get the benefit of lockless * operations most of the time without the complexities to handle -@@ -4441,7 +4441,7 @@ bnx2_start_xmit(struct sk_buff *skb, str +@@ -4441,7 +4441,7 @@ (TX_BD_FLAGS_VLAN_TAG | (vlan_tx_tag_get(skb) << 16)); } #ifdef BCM_TSO @@ -143,11 +143,11 @@ index a24200d..b5e39a1 100644 (skb->len > (bp->dev->mtu + ETH_HLEN))) { u32 tcp_opt_len, ip_tcp_len; -diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c -index bcf9f17..e970921 100644 ---- a/drivers/net/bonding/bond_main.c -+++ b/drivers/net/bonding/bond_main.c -@@ -1145,8 +1145,7 @@ int bond_sethwaddr(struct net_device *bo +Index: tmp-xxx/drivers/net/bonding/bond_main.c +=================================================================== +--- tmp-xxx.orig/drivers/net/bonding/bond_main.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/bonding/bond_main.c 2006-11-27 10:52:42.000000000 +0000 +@@ -1145,8 +1145,7 @@ } #define BOND_INTERSECT_FEATURES \ @@ -157,7 +157,7 @@ index bcf9f17..e970921 100644 /* * Compute the common dev->feature set available to all slaves. Some -@@ -1164,9 +1163,7 @@ static int bond_compute_features(struct +@@ -1164,9 +1163,7 @@ features &= (slave->dev->features & BOND_INTERSECT_FEATURES); if ((features & NETIF_F_SG) && @@ -168,7 +168,7 @@ index bcf9f17..e970921 100644 features &= ~NETIF_F_SG; /* -@@ -4147,7 +4144,7 @@ static int bond_init(struct net_device * +@@ -4147,7 +4144,7 @@ */ bond_dev->features |= NETIF_F_VLAN_CHALLENGED; @@ -177,11 +177,11 @@ index bcf9f17..e970921 100644 * transmitting */ bond_dev->features |= NETIF_F_LLTX; -diff --git a/drivers/net/chelsio/sge.c b/drivers/net/chelsio/sge.c -index 30ff8ea..7b7d360 100644 ---- a/drivers/net/chelsio/sge.c -+++ b/drivers/net/chelsio/sge.c -@@ -1419,7 +1419,7 @@ int t1_start_xmit(struct sk_buff *skb, s +Index: tmp-xxx/drivers/net/chelsio/sge.c +=================================================================== +--- tmp-xxx.orig/drivers/net/chelsio/sge.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/chelsio/sge.c 2006-11-27 10:52:42.000000000 +0000 +@@ -1419,7 +1419,7 @@ struct cpl_tx_pkt *cpl; #ifdef NETIF_F_TSO @@ -190,7 +190,7 @@ index 30ff8ea..7b7d360 100644 int eth_type; struct cpl_tx_pkt_lso *hdr; -@@ -1434,7 +1434,7 @@ #ifdef NETIF_F_TSO +@@ -1434,7 +1434,7 @@ hdr->ip_hdr_words = skb->nh.iph->ihl; hdr->tcp_hdr_words = skb->h.th->doff; hdr->eth_type_mss = htons(MK_ETH_TYPE_MSS(eth_type, @@ -199,11 +199,11 @@ index 30ff8ea..7b7d360 100644 hdr->len = htonl(skb->len - sizeof(*hdr)); cpl = (struct cpl_tx_pkt *)hdr; sge->stats.tx_lso_pkts++; -diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c -index fa29402..681d284 100644 ---- a/drivers/net/e1000/e1000_main.c -+++ b/drivers/net/e1000/e1000_main.c -@@ -2526,7 +2526,7 @@ #ifdef NETIF_F_TSO +Index: tmp-xxx/drivers/net/e1000/e1000_main.c +=================================================================== +--- tmp-xxx.orig/drivers/net/e1000/e1000_main.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/e1000/e1000_main.c 2006-11-27 10:52:42.000000000 +0000 +@@ -2526,7 +2526,7 @@ uint8_t ipcss, ipcso, tucss, tucso, hdr_len; int err; @@ -212,7 +212,7 @@ index fa29402..681d284 100644 if (skb_header_cloned(skb)) { err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); if (err) -@@ -2534,7 +2534,7 @@ #ifdef NETIF_F_TSO +@@ -2534,7 +2534,7 @@ } hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2)); @@ -221,7 +221,7 @@ index fa29402..681d284 100644 if (skb->protocol == ntohs(ETH_P_IP)) { skb->nh.iph->tot_len = 0; skb->nh.iph->check = 0; -@@ -2651,7 +2651,7 @@ #ifdef NETIF_F_TSO +@@ -2651,7 +2651,7 @@ * tso gets written back prematurely before the data is fully * DMAd to the controller */ if (!skb->data_len && tx_ring->last_tx_tso && @@ -230,7 +230,7 @@ index fa29402..681d284 100644 tx_ring->last_tx_tso = 0; size -= 4; } -@@ -2893,7 +2893,7 @@ #endif +@@ -2893,7 +2893,7 @@ } #ifdef NETIF_F_TSO @@ -239,7 +239,7 @@ index fa29402..681d284 100644 /* The controller does a simple calculation to * make sure there is enough room in the FIFO before * initiating the DMA for each buffer. The calc is: -@@ -2935,7 +2935,7 @@ #endif +@@ -2935,7 +2935,7 @@ #ifdef NETIF_F_TSO /* Controller Erratum workaround */ if (!skb->data_len && tx_ring->last_tx_tso && @@ -248,11 +248,11 @@ index fa29402..681d284 100644 count++; #endif -diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c -index 3682ec6..c35f16e 100644 ---- a/drivers/net/forcedeth.c -+++ b/drivers/net/forcedeth.c -@@ -482,9 +482,9 @@ #define LPA_1000HALF 0x0400 +Index: tmp-xxx/drivers/net/forcedeth.c +=================================================================== +--- tmp-xxx.orig/drivers/net/forcedeth.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/forcedeth.c 2006-11-27 10:52:42.000000000 +0000 +@@ -482,9 +482,9 @@ * critical parts: * - rx is (pseudo-) lockless: it relies on the single-threading provided * by the arch code for interrupts. @@ -264,7 +264,7 @@ index 3682ec6..c35f16e 100644 */ /* in dev: base, irq */ -@@ -1016,7 +1016,7 @@ static void drain_ring(struct net_device +@@ -1016,7 +1016,7 @@ /* * nv_start_xmit: dev->hard_start_xmit function @@ -273,7 +273,7 @@ index 3682ec6..c35f16e 100644 */ static int nv_start_xmit(struct sk_buff *skb, struct net_device *dev) { -@@ -1105,8 +1105,8 @@ static int nv_start_xmit(struct sk_buff +@@ -1105,8 +1105,8 @@ np->tx_skbuff[nr] = skb; #ifdef NETIF_F_TSO @@ -284,7 +284,7 @@ index 3682ec6..c35f16e 100644 else #endif tx_flags_extra = (skb->ip_summed == CHECKSUM_HW ? (NV_TX2_CHECKSUM_L3|NV_TX2_CHECKSUM_L4) : 0); -@@ -1203,7 +1203,7 @@ static void nv_tx_done(struct net_device +@@ -1203,7 +1203,7 @@ /* * nv_tx_timeout: dev->tx_timeout function @@ -293,7 +293,7 @@ index 3682ec6..c35f16e 100644 */ static void nv_tx_timeout(struct net_device *dev) { -@@ -1524,7 +1524,7 @@ static int nv_change_mtu(struct net_devi +@@ -1524,7 +1524,7 @@ * Changing the MTU is a rare event, it shouldn't matter. */ disable_irq(dev->irq); @@ -302,7 +302,7 @@ index 3682ec6..c35f16e 100644 spin_lock(&np->lock); /* stop engines */ nv_stop_rx(dev); -@@ -1559,7 +1559,7 @@ static int nv_change_mtu(struct net_devi +@@ -1559,7 +1559,7 @@ nv_start_rx(dev); nv_start_tx(dev); spin_unlock(&np->lock); @@ -311,7 +311,7 @@ index 3682ec6..c35f16e 100644 enable_irq(dev->irq); } return 0; -@@ -1594,7 +1594,7 @@ static int nv_set_mac_address(struct net +@@ -1594,7 +1594,7 @@ memcpy(dev->dev_addr, macaddr->sa_data, ETH_ALEN); if (netif_running(dev)) { @@ -320,7 +320,7 @@ index 3682ec6..c35f16e 100644 spin_lock_irq(&np->lock); /* stop rx engine */ -@@ -1606,7 +1606,7 @@ static int nv_set_mac_address(struct net +@@ -1606,7 +1606,7 @@ /* restart rx engine */ nv_start_rx(dev); spin_unlock_irq(&np->lock); @@ -329,7 +329,7 @@ index 3682ec6..c35f16e 100644 } else { nv_copy_mac_to_hw(dev); } -@@ -1615,7 +1615,7 @@ static int nv_set_mac_address(struct net +@@ -1615,7 +1615,7 @@ /* * nv_set_multicast: dev->set_multicast function @@ -338,11 +338,11 @@ index 3682ec6..c35f16e 100644 */ static void nv_set_multicast(struct net_device *dev) { -diff --git a/drivers/net/hamradio/6pack.c b/drivers/net/hamradio/6pack.c -index 102c1f0..d12605f 100644 ---- a/drivers/net/hamradio/6pack.c -+++ b/drivers/net/hamradio/6pack.c -@@ -308,9 +308,9 @@ static int sp_set_mac_address(struct net +Index: tmp-xxx/drivers/net/hamradio/6pack.c +=================================================================== +--- tmp-xxx.orig/drivers/net/hamradio/6pack.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/hamradio/6pack.c 2006-11-27 10:52:42.000000000 +0000 +@@ -308,9 +308,9 @@ { struct sockaddr_ax25 *sa = addr; @@ -354,7 +354,7 @@ index 102c1f0..d12605f 100644 return 0; } -@@ -767,9 +767,9 @@ static int sixpack_ioctl(struct tty_stru +@@ -767,9 +767,9 @@ break; } @@ -366,11 +366,11 @@ index 102c1f0..d12605f 100644 err = 0; break; -diff --git a/drivers/net/hamradio/mkiss.c b/drivers/net/hamradio/mkiss.c -index dc5e9d5..5c66f5a 100644 ---- a/drivers/net/hamradio/mkiss.c -+++ b/drivers/net/hamradio/mkiss.c -@@ -357,9 +357,9 @@ static int ax_set_mac_address(struct net +Index: tmp-xxx/drivers/net/hamradio/mkiss.c +=================================================================== +--- tmp-xxx.orig/drivers/net/hamradio/mkiss.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/hamradio/mkiss.c 2006-11-27 10:52:42.000000000 +0000 +@@ -357,9 +357,9 @@ { struct sockaddr_ax25 *sa = addr; @@ -382,7 +382,7 @@ index dc5e9d5..5c66f5a 100644 return 0; } -@@ -886,9 +886,9 @@ static int mkiss_ioctl(struct tty_struct +@@ -886,9 +886,9 @@ break; } @@ -394,11 +394,11 @@ index dc5e9d5..5c66f5a 100644 err = 0; break; -diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c -index 31fb2d7..2e222ef 100644 ---- a/drivers/net/ifb.c -+++ b/drivers/net/ifb.c -@@ -76,13 +76,13 @@ static void ri_tasklet(unsigned long dev +Index: tmp-xxx/drivers/net/ifb.c +=================================================================== +--- tmp-xxx.orig/drivers/net/ifb.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/ifb.c 2006-11-27 10:52:42.000000000 +0000 +@@ -76,13 +76,13 @@ dp->st_task_enter++; if ((skb = skb_peek(&dp->tq)) == NULL) { dp->st_txq_refl_try++; @@ -414,7 +414,7 @@ index 31fb2d7..2e222ef 100644 } else { /* reschedule */ dp->st_rxq_notenter++; -@@ -110,7 +110,7 @@ static void ri_tasklet(unsigned long dev +@@ -110,7 +110,7 @@ } } @@ -423,7 +423,7 @@ index 31fb2d7..2e222ef 100644 dp->st_rxq_check++; if ((skb = skb_peek(&dp->rq)) == NULL) { dp->tasklet_pending = 0; -@@ -118,10 +118,10 @@ static void ri_tasklet(unsigned long dev +@@ -118,10 +118,10 @@ netif_wake_queue(_dev); } else { dp->st_rxq_rsch++; @@ -436,11 +436,11 @@ index 31fb2d7..2e222ef 100644 } else { resched: dp->tasklet_pending = 1; -diff --git a/drivers/net/irda/vlsi_ir.c b/drivers/net/irda/vlsi_ir.c -index a9f49f0..339d4a7 100644 ---- a/drivers/net/irda/vlsi_ir.c -+++ b/drivers/net/irda/vlsi_ir.c -@@ -959,7 +959,7 @@ static int vlsi_hard_start_xmit(struct s +Index: tmp-xxx/drivers/net/irda/vlsi_ir.c +=================================================================== +--- tmp-xxx.orig/drivers/net/irda/vlsi_ir.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/irda/vlsi_ir.c 2006-11-27 10:52:42.000000000 +0000 +@@ -959,7 +959,7 @@ || (now.tv_sec==ready.tv_sec && now.tv_usec>=ready.tv_usec)) break; udelay(100); @@ -449,11 +449,11 @@ index a9f49f0..339d4a7 100644 } } -diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c -index f9f77e4..bdab369 100644 ---- a/drivers/net/ixgb/ixgb_main.c -+++ b/drivers/net/ixgb/ixgb_main.c -@@ -1163,7 +1163,7 @@ #ifdef NETIF_F_TSO +Index: tmp-xxx/drivers/net/ixgb/ixgb_main.c +=================================================================== +--- tmp-xxx.orig/drivers/net/ixgb/ixgb_main.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/ixgb/ixgb_main.c 2006-11-27 10:52:42.000000000 +0000 +@@ -1163,7 +1163,7 @@ uint16_t ipcse, tucse, mss; int err; @@ -462,7 +462,7 @@ index f9f77e4..bdab369 100644 if (skb_header_cloned(skb)) { err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); if (err) -@@ -1171,7 +1171,7 @@ #ifdef NETIF_F_TSO +@@ -1171,7 +1171,7 @@ } hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2)); @@ -471,11 +471,11 @@ index f9f77e4..bdab369 100644 skb->nh.iph->tot_len = 0; skb->nh.iph->check = 0; skb->h.th->check = ~csum_tcpudp_magic(skb->nh.iph->saddr, -diff --git a/drivers/net/loopback.c b/drivers/net/loopback.c -index 690a1aa..9bcaa80 100644 ---- a/drivers/net/loopback.c -+++ b/drivers/net/loopback.c -@@ -74,7 +74,7 @@ static void emulate_large_send_offload(s +Index: tmp-xxx/drivers/net/loopback.c +=================================================================== +--- tmp-xxx.orig/drivers/net/loopback.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/loopback.c 2006-11-27 10:52:42.000000000 +0000 +@@ -74,7 +74,7 @@ struct iphdr *iph = skb->nh.iph; struct tcphdr *th = (struct tcphdr*)(skb->nh.raw + (iph->ihl * 4)); unsigned int doffset = (iph->ihl + th->doff) * 4; @@ -484,7 +484,7 @@ index 690a1aa..9bcaa80 100644 unsigned int offset = 0; u32 seq = ntohl(th->seq); u16 id = ntohs(iph->id); -@@ -139,7 +139,7 @@ #ifndef LOOPBACK_MUST_CHECKSUM +@@ -139,7 +139,7 @@ #endif #ifdef LOOPBACK_TSO @@ -493,11 +493,11 @@ index 690a1aa..9bcaa80 100644 BUG_ON(skb->protocol != htons(ETH_P_IP)); BUG_ON(skb->nh.iph->protocol != IPPROTO_TCP); -diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c -index c0998ef..0fac9d5 100644 ---- a/drivers/net/mv643xx_eth.c -+++ b/drivers/net/mv643xx_eth.c -@@ -1107,7 +1107,7 @@ static int mv643xx_eth_start_xmit(struct +Index: tmp-xxx/drivers/net/mv643xx_eth.c +=================================================================== +--- tmp-xxx.orig/drivers/net/mv643xx_eth.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/mv643xx_eth.c 2006-11-27 10:52:42.000000000 +0000 +@@ -1107,7 +1107,7 @@ #ifdef MV643XX_CHECKSUM_OFFLOAD_TX if (has_tiny_unaligned_frags(skb)) { @@ -506,11 +506,11 @@ index c0998ef..0fac9d5 100644 stats->tx_dropped++; printk(KERN_DEBUG "%s: failed to linearize tiny " "unaligned fragment\n", dev->name); -diff --git a/drivers/net/natsemi.c b/drivers/net/natsemi.c -index 9d6d254..c9ed624 100644 ---- a/drivers/net/natsemi.c -+++ b/drivers/net/natsemi.c -@@ -323,12 +323,12 @@ performance critical codepaths: +Index: tmp-xxx/drivers/net/natsemi.c +=================================================================== +--- tmp-xxx.orig/drivers/net/natsemi.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/natsemi.c 2006-11-27 10:52:42.000000000 +0000 +@@ -323,12 +323,12 @@ The rx process only runs in the interrupt handler. Access from outside the interrupt handler is only permitted after disable_irq(). @@ -525,11 +525,11 @@ index 9d6d254..c9ed624 100644 spin_lock_irq(&np->lock); IV. Notes -diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c -index 8cc0d0b..e53b313 100644 ---- a/drivers/net/r8169.c -+++ b/drivers/net/r8169.c -@@ -2171,7 +2171,7 @@ static int rtl8169_xmit_frags(struct rtl +Index: tmp-xxx/drivers/net/r8169.c +=================================================================== +--- tmp-xxx.orig/drivers/net/r8169.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/r8169.c 2006-11-27 10:52:42.000000000 +0000 +@@ -2171,7 +2171,7 @@ static inline u32 rtl8169_tso_csum(struct sk_buff *skb, struct net_device *dev) { if (dev->features & NETIF_F_TSO) { @@ -538,11 +538,11 @@ index 8cc0d0b..e53b313 100644 if (mss) return LargeSend | ((mss & MSSMask) << MSSShift); -diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c -index b7f00d6..439f45f 100644 ---- a/drivers/net/s2io.c -+++ b/drivers/net/s2io.c -@@ -3522,8 +3522,8 @@ #endif +Index: tmp-xxx/drivers/net/s2io.c +=================================================================== +--- tmp-xxx.orig/drivers/net/s2io.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/s2io.c 2006-11-27 10:52:42.000000000 +0000 +@@ -3522,8 +3522,8 @@ txdp->Control_1 = 0; txdp->Control_2 = 0; #ifdef NETIF_F_TSO @@ -553,7 +553,7 @@ index b7f00d6..439f45f 100644 txdp->Control_1 |= TXD_TCP_LSO_EN; txdp->Control_1 |= TXD_TCP_LSO_MSS(mss); } -@@ -3543,10 +3543,10 @@ #endif +@@ -3543,10 +3543,10 @@ } frg_len = skb->len - skb->data_len; @@ -566,7 +566,7 @@ index b7f00d6..439f45f 100644 ufo_size &= ~7; txdp->Control_1 |= TXD_UFO_EN; txdp->Control_1 |= TXD_UFO_MSS(ufo_size); -@@ -3572,7 +3572,7 @@ #endif +@@ -3572,7 +3572,7 @@ txdp->Host_Control = (unsigned long) skb; txdp->Control_1 |= TXD_BUFFER0_SIZE(frg_len); @@ -575,7 +575,7 @@ index b7f00d6..439f45f 100644 txdp->Control_1 |= TXD_UFO_EN; frg_cnt = skb_shinfo(skb)->nr_frags; -@@ -3587,12 +3587,12 @@ #endif +@@ -3587,12 +3587,12 @@ (sp->pdev, frag->page, frag->page_offset, frag->size, PCI_DMA_TODEVICE); txdp->Control_1 = TXD_BUFFER0_SIZE(frag->size); @@ -590,7 +590,7 @@ index b7f00d6..439f45f 100644 frg_cnt++; /* as Txd0 was used for inband header */ tx_fifo = mac_control->tx_FIFO_start[queue]; -@@ -3606,7 +3606,7 @@ #ifdef NETIF_F_TSO +@@ -3606,7 +3606,7 @@ if (mss) val64 |= TX_FIFO_SPECIAL_FUNC; #endif @@ -599,11 +599,11 @@ index b7f00d6..439f45f 100644 val64 |= TX_FIFO_SPECIAL_FUNC; writeq(val64, &tx_fifo->List_Control); -diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c -index 0618cd5..2a55eb3 100644 ---- a/drivers/net/sky2.c -+++ b/drivers/net/sky2.c -@@ -1125,7 +1125,7 @@ static unsigned tx_le_req(const struct s +Index: tmp-xxx/drivers/net/sky2.c +=================================================================== +--- tmp-xxx.orig/drivers/net/sky2.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/sky2.c 2006-11-27 10:52:42.000000000 +0000 +@@ -1141,7 +1141,7 @@ count = sizeof(dma_addr_t) / sizeof(u32); count += skb_shinfo(skb)->nr_frags * count; @@ -612,7 +612,7 @@ index 0618cd5..2a55eb3 100644 ++count; if (skb->ip_summed == CHECKSUM_HW) -@@ -1197,7 +1197,7 @@ static int sky2_xmit_frame(struct sk_buf +@@ -1213,7 +1213,7 @@ } /* Check for TCP Segmentation Offload */ @@ -621,11 +621,11 @@ index 0618cd5..2a55eb3 100644 if (mss != 0) { /* just drop the packet if non-linear expansion fails */ if (skb_header_cloned(skb) && -diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c -index caf4102..fc9164a 100644 ---- a/drivers/net/tg3.c -+++ b/drivers/net/tg3.c -@@ -3664,7 +3664,7 @@ static int tg3_start_xmit(struct sk_buff +Index: tmp-xxx/drivers/net/tg3.c +=================================================================== +--- tmp-xxx.orig/drivers/net/tg3.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/tg3.c 2006-11-27 10:52:42.000000000 +0000 +@@ -3664,7 +3664,7 @@ #if TG3_TSO_SUPPORT != 0 mss = 0; if (skb->len > (tp->dev->mtu + ETH_HLEN) && @@ -634,11 +634,11 @@ index caf4102..fc9164a 100644 int tcp_opt_len, ip_tcp_len; if (skb_header_cloned(skb) && -diff --git a/drivers/net/tulip/winbond-840.c b/drivers/net/tulip/winbond-840.c -index 5b1af39..11de5af 100644 ---- a/drivers/net/tulip/winbond-840.c -+++ b/drivers/net/tulip/winbond-840.c -@@ -1605,11 +1605,11 @@ #ifdef CONFIG_PM +Index: tmp-xxx/drivers/net/tulip/winbond-840.c +=================================================================== +--- tmp-xxx.orig/drivers/net/tulip/winbond-840.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/tulip/winbond-840.c 2006-11-27 10:52:42.000000000 +0000 +@@ -1605,11 +1605,11 @@ * - get_stats: * spin_lock_irq(np->lock), doesn't touch hw if not present * - hard_start_xmit: @@ -653,7 +653,7 @@ index 5b1af39..11de5af 100644 * - interrupt handler * doesn't touch hw if not present, synchronize_irq waits for * running instances of the interrupt handler. -@@ -1635,11 +1635,10 @@ static int w840_suspend (struct pci_dev +@@ -1635,11 +1635,10 @@ netif_device_detach(dev); update_csr6(dev, 0); iowrite32(0, ioaddr + IntrEnable); @@ -666,11 +666,11 @@ index 5b1af39..11de5af 100644 np->stats.rx_missed_errors += ioread32(ioaddr + RxMissed) & 0xffff; -diff --git a/drivers/net/typhoon.c b/drivers/net/typhoon.c -index 4c76cb7..30c48c9 100644 ---- a/drivers/net/typhoon.c -+++ b/drivers/net/typhoon.c -@@ -340,7 +340,7 @@ #define typhoon_synchronize_irq(x) synch +Index: tmp-xxx/drivers/net/typhoon.c +=================================================================== +--- tmp-xxx.orig/drivers/net/typhoon.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/typhoon.c 2006-11-27 10:52:42.000000000 +0000 +@@ -340,7 +340,7 @@ #endif #if defined(NETIF_F_TSO) @@ -679,11 +679,11 @@ index 4c76cb7..30c48c9 100644 #define TSO_NUM_DESCRIPTORS 2 #define TSO_OFFLOAD_ON TYPHOON_OFFLOAD_TCP_SEGMENT #else -diff --git a/drivers/net/via-velocity.c b/drivers/net/via-velocity.c -index ed1f837..2eb6b5f 100644 ---- a/drivers/net/via-velocity.c -+++ b/drivers/net/via-velocity.c -@@ -1899,6 +1899,13 @@ static int velocity_xmit(struct sk_buff +Index: tmp-xxx/drivers/net/via-velocity.c +=================================================================== +--- tmp-xxx.orig/drivers/net/via-velocity.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/via-velocity.c 2006-11-27 10:52:42.000000000 +0000 +@@ -1905,6 +1905,13 @@ int pktlen = skb->len; @@ -697,7 +697,7 @@ index ed1f837..2eb6b5f 100644 spin_lock_irqsave(&vptr->lock, flags); index = vptr->td_curr[qnum]; -@@ -1914,8 +1921,6 @@ static int velocity_xmit(struct sk_buff +@@ -1920,8 +1927,6 @@ */ if (pktlen < ETH_ZLEN) { /* Cannot occur until ZC support */ @@ -706,7 +706,7 @@ index ed1f837..2eb6b5f 100644 pktlen = ETH_ZLEN; memcpy(tdinfo->buf, skb->data, skb->len); memset(tdinfo->buf + skb->len, 0, ETH_ZLEN - skb->len); -@@ -1933,7 +1938,6 @@ #ifdef VELOCITY_ZERO_COPY_SUPPORT +@@ -1939,7 +1944,6 @@ int nfrags = skb_shinfo(skb)->nr_frags; tdinfo->skb = skb; if (nfrags > 6) { @@ -714,11 +714,11 @@ index ed1f837..2eb6b5f 100644 memcpy(tdinfo->buf, skb->data, skb->len); tdinfo->skb_dma[0] = tdinfo->buf_dma; td_ptr->tdesc0.pktsize = -diff --git a/drivers/net/wireless/orinoco.c b/drivers/net/wireless/orinoco.c -index 6fd0bf7..75237c1 100644 ---- a/drivers/net/wireless/orinoco.c -+++ b/drivers/net/wireless/orinoco.c -@@ -1835,7 +1835,9 @@ static int __orinoco_program_rids(struct +Index: tmp-xxx/drivers/net/wireless/orinoco.c +=================================================================== +--- tmp-xxx.orig/drivers/net/wireless/orinoco.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/net/wireless/orinoco.c 2006-11-27 10:52:42.000000000 +0000 +@@ -1835,7 +1835,9 @@ /* Set promiscuity / multicast*/ priv->promiscuous = 0; priv->mc_count = 0; @@ -729,11 +729,11 @@ index 6fd0bf7..75237c1 100644 return 0; } -diff --git a/drivers/s390/net/qeth_eddp.c b/drivers/s390/net/qeth_eddp.c -index 82cb4af..57cec40 100644 ---- a/drivers/s390/net/qeth_eddp.c -+++ b/drivers/s390/net/qeth_eddp.c -@@ -421,7 +421,7 @@ #endif /* CONFIG_QETH_VLAN */ +Index: tmp-xxx/drivers/s390/net/qeth_eddp.c +=================================================================== +--- tmp-xxx.orig/drivers/s390/net/qeth_eddp.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/s390/net/qeth_eddp.c 2006-11-27 10:52:42.000000000 +0000 +@@ -421,7 +421,7 @@ } tcph = eddp->skb->h.th; while (eddp->skb_offset < eddp->skb->len) { @@ -742,7 +742,7 @@ index 82cb4af..57cec40 100644 (int)(eddp->skb->len - eddp->skb_offset)); /* prepare qdio hdr */ if (eddp->qh.hdr.l2.id == QETH_HEADER_TYPE_LAYER2){ -@@ -516,20 +516,20 @@ qeth_eddp_calc_num_pages(struct qeth_edd +@@ -516,20 +516,20 @@ QETH_DBF_TEXT(trace, 5, "eddpcanp"); /* can we put multiple skbs in one page? */ @@ -768,11 +768,11 @@ index 82cb4af..57cec40 100644 } static inline struct qeth_eddp_context * -diff --git a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c -index dba7f7f..d9cc997 100644 ---- a/drivers/s390/net/qeth_main.c -+++ b/drivers/s390/net/qeth_main.c -@@ -4454,7 +4454,7 @@ qeth_send_packet(struct qeth_card *card, +Index: tmp-xxx/drivers/s390/net/qeth_main.c +=================================================================== +--- tmp-xxx.orig/drivers/s390/net/qeth_main.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/s390/net/qeth_main.c 2006-11-27 10:52:42.000000000 +0000 +@@ -4454,7 +4454,7 @@ queue = card->qdio.out_qs [qeth_get_priority_queue(card, skb, ipv, cast_type)]; @@ -781,7 +781,7 @@ index dba7f7f..d9cc997 100644 large_send = card->options.large_send; /*are we able to do TSO ? If so ,prepare and send it from here */ -@@ -4501,7 +4501,7 @@ qeth_send_packet(struct qeth_card *card, +@@ -4501,7 +4501,7 @@ card->stats.tx_packets++; card->stats.tx_bytes += skb->len; #ifdef CONFIG_QETH_PERF_STATS @@ -790,11 +790,11 @@ index dba7f7f..d9cc997 100644 !(large_send == QETH_LARGE_SEND_NO)) { card->perf_stats.large_send_bytes += skb->len; card->perf_stats.large_send_cnt++; -diff --git a/drivers/s390/net/qeth_tso.h b/drivers/s390/net/qeth_tso.h -index 1286dde..89cbf34 100644 ---- a/drivers/s390/net/qeth_tso.h -+++ b/drivers/s390/net/qeth_tso.h -@@ -51,7 +51,7 @@ qeth_tso_fill_header(struct qeth_card *c +Index: tmp-xxx/drivers/s390/net/qeth_tso.h +=================================================================== +--- tmp-xxx.orig/drivers/s390/net/qeth_tso.h 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/drivers/s390/net/qeth_tso.h 2006-11-27 10:52:42.000000000 +0000 +@@ -51,7 +51,7 @@ hdr->ext.hdr_version = 1; hdr->ext.hdr_len = 28; /*insert non-fix values */ @@ -803,11 +803,11 @@ index 1286dde..89cbf34 100644 hdr->ext.dg_hdr_len = (__u16)(iph->ihl*4 + tcph->doff*4); hdr->ext.payload_len = (__u16)(skb->len - hdr->ext.dg_hdr_len - sizeof(struct qeth_hdr_tso)); -diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h -index 93535f0..9269df7 100644 ---- a/include/linux/ethtool.h -+++ b/include/linux/ethtool.h -@@ -408,6 +408,8 @@ #define ETHTOOL_STSO 0x0000001f /* Set +Index: tmp-xxx/include/linux/ethtool.h +=================================================================== +--- tmp-xxx.orig/include/linux/ethtool.h 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/include/linux/ethtool.h 2006-11-27 10:52:42.000000000 +0000 +@@ -408,6 +408,8 @@ #define ETHTOOL_GPERMADDR 0x00000020 /* Get permanent hardware address */ #define ETHTOOL_GUFO 0x00000021 /* Get UFO enable (ethtool_value) */ #define ETHTOOL_SUFO 0x00000022 /* Set UFO enable (ethtool_value) */ @@ -816,11 +816,11 @@ index 93535f0..9269df7 100644 /* compatibility with older code */ #define SPARC_ETH_GSET ETHTOOL_GSET -diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h -index 7fda03d..47b0965 100644 ---- a/include/linux/netdevice.h -+++ b/include/linux/netdevice.h -@@ -230,7 +230,8 @@ enum netdev_state_t +Index: tmp-xxx/include/linux/netdevice.h +=================================================================== +--- tmp-xxx.orig/include/linux/netdevice.h 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/include/linux/netdevice.h 2006-11-27 10:52:42.000000000 +0000 +@@ -230,7 +230,8 @@ __LINK_STATE_SCHED, __LINK_STATE_NOCARRIER, __LINK_STATE_RX_SCHED, @@ -830,7 +830,7 @@ index 7fda03d..47b0965 100644 }; -@@ -306,9 +307,17 @@ #define NETIF_F_HW_VLAN_TX 128 /* Transm +@@ -306,9 +307,17 @@ #define NETIF_F_HW_VLAN_RX 256 /* Receive VLAN hw acceleration */ #define NETIF_F_HW_VLAN_FILTER 512 /* Receive filtering on VLAN */ #define NETIF_F_VLAN_CHALLENGED 1024 /* Device cannot handle VLAN packets */ @@ -850,7 +850,7 @@ index 7fda03d..47b0965 100644 struct net_device *next_sched; -@@ -394,6 +403,9 @@ #define NETIF_F_UFO 8192 +@@ -394,6 +403,9 @@ struct list_head qdisc_list; unsigned long tx_queue_len; /* Max frames per queue allowed */ @@ -860,7 +860,7 @@ index 7fda03d..47b0965 100644 /* ingress path synchronizer */ spinlock_t ingress_lock; struct Qdisc *qdisc_ingress; -@@ -402,7 +414,7 @@ #define NETIF_F_UFO 8192 +@@ -402,7 +414,7 @@ * One part is mostly used on xmit path (device) */ /* hard_start_xmit synchronizer */ @@ -869,7 +869,7 @@ index 7fda03d..47b0965 100644 /* cpu id of processor entered to hard_start_xmit or -1, if nobody entered there. */ -@@ -527,6 +539,8 @@ struct packet_type { +@@ -527,6 +539,8 @@ struct net_device *, struct packet_type *, struct net_device *); @@ -878,7 +878,7 @@ index 7fda03d..47b0965 100644 void *af_packet_priv; struct list_head list; }; -@@ -693,7 +707,8 @@ extern int dev_change_name(struct net_d +@@ -693,7 +707,8 @@ extern int dev_set_mtu(struct net_device *, int); extern int dev_set_mac_address(struct net_device *, struct sockaddr *); @@ -888,7 +888,7 @@ index 7fda03d..47b0965 100644 extern void dev_init(void); -@@ -900,11 +915,43 @@ static inline void __netif_rx_complete(s +@@ -900,11 +915,43 @@ clear_bit(__LINK_STATE_RX_SCHED, &dev->state); } @@ -934,7 +934,7 @@ index 7fda03d..47b0965 100644 } /* These functions live elsewhere (drivers/net/net_init.c, but related) */ -@@ -932,6 +979,7 @@ extern int netdev_max_backlog; +@@ -932,6 +979,7 @@ extern int weight_p; extern int netdev_set_master(struct net_device *dev, struct net_device *master); extern int skb_checksum_help(struct sk_buff *skb, int inward); @@ -942,7 +942,7 @@ index 7fda03d..47b0965 100644 #ifdef CONFIG_BUG extern void netdev_rx_csum_fault(struct net_device *dev); #else -@@ -951,6 +999,18 @@ #endif +@@ -951,6 +999,18 @@ extern void linkwatch_run_queue(void); @@ -961,11 +961,11 @@ index 7fda03d..47b0965 100644 #endif /* __KERNEL__ */ #endif /* _LINUX_DEV_H */ -diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h -index ad7cc22..b19d45d 100644 ---- a/include/linux/skbuff.h -+++ b/include/linux/skbuff.h -@@ -134,9 +134,10 @@ struct skb_frag_struct { +Index: tmp-xxx/include/linux/skbuff.h +=================================================================== +--- tmp-xxx.orig/include/linux/skbuff.h 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/include/linux/skbuff.h 2006-11-27 10:52:42.000000000 +0000 +@@ -134,9 +134,10 @@ struct skb_shared_info { atomic_t dataref; unsigned short nr_frags; @@ -979,7 +979,7 @@ index ad7cc22..b19d45d 100644 unsigned int ip6_frag_id; struct sk_buff *frag_list; skb_frag_t frags[MAX_SKB_FRAGS]; -@@ -168,6 +169,14 @@ enum { +@@ -168,6 +169,14 @@ SKB_FCLONE_CLONE, }; @@ -994,7 +994,7 @@ index ad7cc22..b19d45d 100644 /** * struct sk_buff - socket buffer * @next: Next buffer in list -@@ -1148,18 +1157,34 @@ static inline int skb_can_coalesce(struc +@@ -1148,18 +1157,34 @@ return 0; } @@ -1033,7 +1033,7 @@ index ad7cc22..b19d45d 100644 } /** -@@ -1254,6 +1279,7 @@ extern void skb_split(struct sk_b +@@ -1254,6 +1279,7 @@ struct sk_buff *skb1, const u32 len); extern void skb_release_data(struct sk_buff *skb); @@ -1041,11 +1041,11 @@ index ad7cc22..b19d45d 100644 static inline void *skb_header_pointer(const struct sk_buff *skb, int offset, int len, void *buffer) -diff --git a/include/net/pkt_sched.h b/include/net/pkt_sched.h -index b94d1ad..75b5b93 100644 ---- a/include/net/pkt_sched.h -+++ b/include/net/pkt_sched.h -@@ -218,12 +218,13 @@ extern struct qdisc_rate_table *qdisc_ge +Index: tmp-xxx/include/net/pkt_sched.h +=================================================================== +--- tmp-xxx.orig/include/net/pkt_sched.h 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/include/net/pkt_sched.h 2006-11-27 10:52:42.000000000 +0000 +@@ -218,12 +218,13 @@ struct rtattr *tab); extern void qdisc_put_rtab(struct qdisc_rate_table *tab); @@ -1062,11 +1062,11 @@ index b94d1ad..75b5b93 100644 } extern int tc_classify(struct sk_buff *skb, struct tcf_proto *tp, -diff --git a/include/net/protocol.h b/include/net/protocol.h -index 6dc5970..0d2dcdb 100644 ---- a/include/net/protocol.h -+++ b/include/net/protocol.h -@@ -37,6 +37,8 @@ #define MAX_INET_PROTOS 256 /* Must be +Index: tmp-xxx/include/net/protocol.h +=================================================================== +--- tmp-xxx.orig/include/net/protocol.h 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/include/net/protocol.h 2006-11-27 10:52:42.000000000 +0000 +@@ -37,6 +37,8 @@ struct net_protocol { int (*handler)(struct sk_buff *skb); void (*err_handler)(struct sk_buff *skb, u32 info); @@ -1075,11 +1075,11 @@ index 6dc5970..0d2dcdb 100644 int no_policy; }; -diff --git a/include/net/sock.h b/include/net/sock.h -index f63d0d5..a8e8d21 100644 ---- a/include/net/sock.h -+++ b/include/net/sock.h -@@ -1064,9 +1064,13 @@ static inline void sk_setup_caps(struct +Index: tmp-xxx/include/net/sock.h +=================================================================== +--- tmp-xxx.orig/include/net/sock.h 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/include/net/sock.h 2006-11-27 10:52:42.000000000 +0000 +@@ -1064,9 +1064,13 @@ { __sk_dst_set(sk, dst); sk->sk_route_caps = dst->dev->features; @@ -1093,11 +1093,11 @@ index f63d0d5..a8e8d21 100644 } } -diff --git a/include/net/tcp.h b/include/net/tcp.h -index 77f21c6..70e1d5f 100644 ---- a/include/net/tcp.h -+++ b/include/net/tcp.h -@@ -552,13 +552,13 @@ #include <net/tcp_ecn.h> +Index: tmp-xxx/include/net/tcp.h +=================================================================== +--- tmp-xxx.orig/include/net/tcp.h 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/include/net/tcp.h 2006-11-27 10:52:42.000000000 +0000 +@@ -552,13 +552,13 @@ */ static inline int tcp_skb_pcount(const struct sk_buff *skb) { @@ -1113,7 +1113,7 @@ index 77f21c6..70e1d5f 100644 } static inline void tcp_dec_pcount_approx(__u32 *count, -@@ -1063,6 +1063,8 @@ extern struct request_sock_ops tcp_reque +@@ -1063,6 +1063,8 @@ extern int tcp_v4_destroy_sock(struct sock *sk); @@ -1122,11 +1122,11 @@ index 77f21c6..70e1d5f 100644 #ifdef CONFIG_PROC_FS extern int tcp4_proc_init(void); extern void tcp4_proc_exit(void); -diff --git a/net/atm/clip.c b/net/atm/clip.c -index 1842a4e..6dc21a7 100644 ---- a/net/atm/clip.c -+++ b/net/atm/clip.c -@@ -101,7 +101,7 @@ static void unlink_clip_vcc(struct clip_ +Index: tmp-xxx/net/atm/clip.c +=================================================================== +--- tmp-xxx.orig/net/atm/clip.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/atm/clip.c 2006-11-27 10:52:42.000000000 +0000 +@@ -101,7 +101,7 @@ printk(KERN_CRIT "!clip_vcc->entry (clip_vcc %p)\n",clip_vcc); return; } @@ -1135,7 +1135,7 @@ index 1842a4e..6dc21a7 100644 entry->neigh->used = jiffies; for (walk = &entry->vccs; *walk; walk = &(*walk)->next) if (*walk == clip_vcc) { -@@ -125,7 +125,7 @@ static void unlink_clip_vcc(struct clip_ +@@ -125,7 +125,7 @@ printk(KERN_CRIT "ATMARP: unlink_clip_vcc failed (entry %p, vcc " "0x%p)\n",entry,clip_vcc); out: @@ -1144,11 +1144,11 @@ index 1842a4e..6dc21a7 100644 } /* The neighbour entry n->lock is held. */ -diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c -index 0b33a7b..180e79b 100644 ---- a/net/bridge/br_device.c -+++ b/net/bridge/br_device.c -@@ -146,9 +146,9 @@ static int br_set_tx_csum(struct net_dev +Index: tmp-xxx/net/bridge/br_device.c +=================================================================== +--- tmp-xxx.orig/net/bridge/br_device.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/bridge/br_device.c 2006-11-27 10:52:42.000000000 +0000 +@@ -146,9 +146,9 @@ struct net_bridge *br = netdev_priv(dev); if (data) @@ -1160,7 +1160,7 @@ index 0b33a7b..180e79b 100644 br_features_recompute(br); return 0; -@@ -185,6 +185,6 @@ void br_dev_setup(struct net_device *dev +@@ -185,6 +185,6 @@ dev->set_mac_address = br_set_mac_address; dev->priv_flags = IFF_EBRIDGE; @@ -1169,11 +1169,11 @@ index 0b33a7b..180e79b 100644 + dev->features = NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA | + NETIF_F_TSO | NETIF_F_NO_CSUM | NETIF_F_GSO_ROBUST; } -diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c -index 2d24fb4..00b1128 100644 ---- a/net/bridge/br_forward.c -+++ b/net/bridge/br_forward.c -@@ -32,7 +32,7 @@ static inline int should_deliver(const s +Index: tmp-xxx/net/bridge/br_forward.c +=================================================================== +--- tmp-xxx.orig/net/bridge/br_forward.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/bridge/br_forward.c 2006-11-27 10:52:42.000000000 +0000 +@@ -32,7 +32,7 @@ int br_dev_queue_push_xmit(struct sk_buff *skb) { /* drop mtu oversized packets except tso */ @@ -1182,11 +1182,11 @@ index 2d24fb4..00b1128 100644 kfree_skb(skb); else { #ifdef CONFIG_BRIDGE_NETFILTER -diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c -index f36b35e..0617146 100644 ---- a/net/bridge/br_if.c -+++ b/net/bridge/br_if.c -@@ -385,17 +385,28 @@ void br_features_recompute(struct net_br +Index: tmp-xxx/net/bridge/br_if.c +=================================================================== +--- tmp-xxx.orig/net/bridge/br_if.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/bridge/br_if.c 2006-11-27 10:52:42.000000000 +0000 +@@ -385,17 +385,28 @@ struct net_bridge_port *p; unsigned long features, checksum; @@ -1221,11 +1221,11 @@ index f36b35e..0617146 100644 } /* called with RTNL */ -diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c -index 9e27373..588207f 100644 ---- a/net/bridge/br_netfilter.c -+++ b/net/bridge/br_netfilter.c -@@ -743,7 +743,7 @@ static int br_nf_dev_queue_xmit(struct s +Index: tmp-xxx/net/bridge/br_netfilter.c +=================================================================== +--- tmp-xxx.orig/net/bridge/br_netfilter.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/bridge/br_netfilter.c 2006-11-27 10:52:42.000000000 +0000 +@@ -743,7 +743,7 @@ { if (skb->protocol == htons(ETH_P_IP) && skb->len > skb->dev->mtu && @@ -1234,11 +1234,11 @@ index 9e27373..588207f 100644 return ip_fragment(skb, br_dev_queue_push_xmit); else return br_dev_queue_push_xmit(skb); -diff --git a/net/core/dev.c b/net/core/dev.c -index 12a214c..32e1056 100644 ---- a/net/core/dev.c -+++ b/net/core/dev.c -@@ -115,6 +115,7 @@ #include <linux/wireless.h> /* Note : w +Index: tmp-xxx/net/core/dev.c +=================================================================== +--- tmp-xxx.orig/net/core/dev.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/core/dev.c 2006-11-27 10:57:31.000000000 +0000 +@@ -115,6 +115,7 @@ #include <net/iw_handler.h> #endif /* CONFIG_NET_RADIO */ #include <asm/current.h> @@ -1246,7 +1246,7 @@ index 12a214c..32e1056 100644 /* * The list of packet types we will receive (as opposed to discard) -@@ -1032,7 +1033,7 @@ static inline void net_timestamp(struct +@@ -1032,7 +1033,7 @@ * taps currently in use. */ @@ -1255,7 +1255,7 @@ index 12a214c..32e1056 100644 { struct packet_type *ptype; -@@ -1106,6 +1107,45 @@ out: +@@ -1106,6 +1107,45 @@ return ret; } @@ -1301,13 +1301,20 @@ index 12a214c..32e1056 100644 /* Take action when hardware reception checksum errors are detected. */ #ifdef CONFIG_BUG void netdev_rx_csum_fault(struct net_device *dev) -@@ -1142,75 +1182,108 @@ #else +@@ -1142,76 +1182,107 @@ #define illegal_highdma(dev, skb) (0) #endif -/* Keep head the same: replace data */ -int __skb_linearize(struct sk_buff *skb, gfp_t gfp_mask) --{ ++struct dev_gso_cb { ++ void (*destructor)(struct sk_buff *skb); ++}; ++ ++#define DEV_GSO_CB(skb) ((struct dev_gso_cb *)(skb)->cb) ++ ++static void dev_gso_skb_destructor(struct sk_buff *skb) + { - unsigned int size; - u8 *data; - long offset; @@ -1336,6 +1343,7 @@ index 12a214c..32e1056 100644 - atomic_set(&ninfo->dataref, 1); - ninfo->tso_size = skb_shinfo(skb)->tso_size; - ninfo->tso_segs = skb_shinfo(skb)->tso_segs; +- ninfo->ufo_size = skb_shinfo(skb)->ufo_size; - ninfo->nr_frags = 0; - ninfo->frag_list = NULL; - @@ -1354,25 +1362,15 @@ index 12a214c..32e1056 100644 - skb->mac.raw += offset; - skb->tail += offset; - skb->data += offset; -- ++ struct dev_gso_cb *cb; + - /* We are no longer a clone, even if we were. */ - skb->cloned = 0; -- -- skb->tail += skb->data_len; -- skb->data_len = 0; -+struct dev_gso_cb { -+ void (*destructor)(struct sk_buff *skb); -+}; -+ -+#define DEV_GSO_CB(skb) ((struct dev_gso_cb *)(skb)->cb) -+ -+static void dev_gso_skb_destructor(struct sk_buff *skb) -+{ -+ struct dev_gso_cb *cb; -+ + do { + struct sk_buff *nskb = skb->next; -+ + +- skb->tail += skb->data_len; +- skb->data_len = 0; + skb->next = nskb->next; + nskb->next = NULL; + kfree_skb(nskb); @@ -1402,14 +1400,13 @@ index 12a214c..32e1056 100644 + /* Verifying header integrity only. */ + if (!segs) + return 0; -+ ++ + if (unlikely(IS_ERR(segs))) + return PTR_ERR(segs); + + skb->next = segs; + DEV_GSO_CB(skb)->destructor = skb->destructor; + skb->destructor = dev_gso_skb_destructor; -+ + return 0; +} + @@ -1469,7 +1466,7 @@ index 12a214c..32e1056 100644 } \ } -@@ -1246,9 +1319,13 @@ int dev_queue_xmit(struct sk_buff *skb) +@@ -1247,9 +1318,13 @@ struct Qdisc *q; int rc = -ENOMEM; @@ -1484,7 +1481,7 @@ index 12a214c..32e1056 100644 goto out_kfree_skb; /* Fragmented skb is linearized if device does not support SG, -@@ -1257,25 +1334,26 @@ int dev_queue_xmit(struct sk_buff *skb) +@@ -1258,25 +1333,26 @@ */ if (skb_shinfo(skb)->nr_frags && (!(dev->features & NETIF_F_SG) || illegal_highdma(dev, skb)) && @@ -1514,7 +1511,7 @@ index 12a214c..32e1056 100644 /* Updates of qdisc are serialized by queue_lock. * The struct Qdisc which is pointed to by qdisc is now a -@@ -1309,8 +1387,8 @@ #endif +@@ -1310,8 +1386,8 @@ /* The device has no queue. Common case for software devices: loopback, all the sorts of tunnels... @@ -1525,7 +1522,7 @@ index 12a214c..32e1056 100644 counters.) However, it is possible, that they rely on protection made by us here. -@@ -1326,11 +1404,8 @@ #endif +@@ -1327,11 +1403,8 @@ HARD_TX_LOCK(dev, cpu); if (!netif_queue_stopped(dev)) { @@ -1538,7 +1535,7 @@ index 12a214c..32e1056 100644 HARD_TX_UNLOCK(dev); goto out; } -@@ -1349,13 +1424,13 @@ #endif +@@ -1350,13 +1423,13 @@ } rc = -ENETDOWN; @@ -1554,7 +1551,7 @@ index 12a214c..32e1056 100644 return rc; } -@@ -2670,7 +2745,7 @@ int register_netdevice(struct net_device +@@ -2671,7 +2744,7 @@ BUG_ON(dev->reg_state != NETREG_UNINITIALIZED); spin_lock_init(&dev->queue_lock); @@ -1563,7 +1560,7 @@ index 12a214c..32e1056 100644 dev->xmit_lock_owner = -1; #ifdef CONFIG_NET_CLS_ACT spin_lock_init(&dev->ingress_lock); -@@ -2714,9 +2789,7 @@ #endif +@@ -2715,9 +2788,7 @@ /* Fix illegal SG+CSUM combinations. */ if ((dev->features & NETIF_F_SG) && @@ -1574,7 +1571,7 @@ index 12a214c..32e1056 100644 printk("%s: Dropping NETIF_F_SG since no checksum feature.\n", dev->name); dev->features &= ~NETIF_F_SG; -@@ -3268,7 +3341,6 @@ subsys_initcall(net_dev_init); +@@ -3269,7 +3340,6 @@ EXPORT_SYMBOL(__dev_get_by_index); EXPORT_SYMBOL(__dev_get_by_name); EXPORT_SYMBOL(__dev_remove_pack); @@ -1582,11 +1579,11 @@ index 12a214c..32e1056 100644 EXPORT_SYMBOL(dev_valid_name); EXPORT_SYMBOL(dev_add_pack); EXPORT_SYMBOL(dev_alloc_name); -diff --git a/net/core/dev_mcast.c b/net/core/dev_mcast.c -index 05d6085..c57d887 100644 ---- a/net/core/dev_mcast.c -+++ b/net/core/dev_mcast.c -@@ -62,7 +62,7 @@ #include <net/arp.h> +Index: tmp-xxx/net/core/dev_mcast.c +=================================================================== +--- tmp-xxx.orig/net/core/dev_mcast.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/core/dev_mcast.c 2006-11-27 10:52:42.000000000 +0000 +@@ -62,7 +62,7 @@ * Device mc lists are changed by bh at least if IPv6 is enabled, * so that it must be bh protected. * @@ -1595,7 +1592,7 @@ index 05d6085..c57d887 100644 */ /* -@@ -93,9 +93,9 @@ static void __dev_mc_upload(struct net_d +@@ -93,9 +93,9 @@ void dev_mc_upload(struct net_device *dev) { @@ -1607,7 +1604,7 @@ index 05d6085..c57d887 100644 } /* -@@ -107,7 +107,7 @@ int dev_mc_delete(struct net_device *dev +@@ -107,7 +107,7 @@ int err = 0; struct dev_mc_list *dmi, **dmip; @@ -1616,7 +1613,7 @@ index 05d6085..c57d887 100644 for (dmip = &dev->mc_list; (dmi = *dmip) != NULL; dmip = &dmi->next) { /* -@@ -139,13 +139,13 @@ int dev_mc_delete(struct net_device *dev +@@ -139,13 +139,13 @@ */ __dev_mc_upload(dev); @@ -1632,7 +1629,7 @@ index 05d6085..c57d887 100644 return err; } -@@ -160,7 +160,7 @@ int dev_mc_add(struct net_device *dev, v +@@ -160,7 +160,7 @@ dmi1 = kmalloc(sizeof(*dmi), GFP_ATOMIC); @@ -1641,7 +1638,7 @@ index 05d6085..c57d887 100644 for (dmi = dev->mc_list; dmi != NULL; dmi = dmi->next) { if (memcmp(dmi->dmi_addr, addr, dmi->dmi_addrlen) == 0 && dmi->dmi_addrlen == alen) { -@@ -176,7 +176,7 @@ int dev_mc_add(struct net_device *dev, v +@@ -176,7 +176,7 @@ } if ((dmi = dmi1) == NULL) { @@ -1650,7 +1647,7 @@ index 05d6085..c57d887 100644 return -ENOMEM; } memcpy(dmi->dmi_addr, addr, alen); -@@ -189,11 +189,11 @@ int dev_mc_add(struct net_device *dev, v +@@ -189,11 +189,11 @@ __dev_mc_upload(dev); @@ -1664,7 +1661,7 @@ index 05d6085..c57d887 100644 kfree(dmi1); return err; } -@@ -204,7 +204,7 @@ done: +@@ -204,7 +204,7 @@ void dev_mc_discard(struct net_device *dev) { @@ -1673,7 +1670,7 @@ index 05d6085..c57d887 100644 while (dev->mc_list != NULL) { struct dev_mc_list *tmp = dev->mc_list; -@@ -215,7 +215,7 @@ void dev_mc_discard(struct net_device *d +@@ -215,7 +215,7 @@ } dev->mc_count = 0; @@ -1682,7 +1679,7 @@ index 05d6085..c57d887 100644 } #ifdef CONFIG_PROC_FS -@@ -250,7 +250,7 @@ static int dev_mc_seq_show(struct seq_fi +@@ -250,7 +250,7 @@ struct dev_mc_list *m; struct net_device *dev = v; @@ -1691,7 +1688,7 @@ index 05d6085..c57d887 100644 for (m = dev->mc_list; m; m = m->next) { int i; -@@ -262,7 +262,7 @@ static int dev_mc_seq_show(struct seq_fi +@@ -262,7 +262,7 @@ seq_putc(seq, '\n'); } @@ -1700,11 +1697,11 @@ index 05d6085..c57d887 100644 return 0; } -diff --git a/net/core/ethtool.c b/net/core/ethtool.c -index e6f7610..27ce168 100644 ---- a/net/core/ethtool.c -+++ b/net/core/ethtool.c -@@ -30,7 +30,7 @@ u32 ethtool_op_get_link(struct net_devic +Index: tmp-xxx/net/core/ethtool.c +=================================================================== +--- tmp-xxx.orig/net/core/ethtool.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/core/ethtool.c 2006-11-27 10:52:42.000000000 +0000 +@@ -30,7 +30,7 @@ u32 ethtool_op_get_tx_csum(struct net_device *dev) { @@ -1713,7 +1710,7 @@ index e6f7610..27ce168 100644 } int ethtool_op_set_tx_csum(struct net_device *dev, u32 data) -@@ -551,9 +551,7 @@ static int ethtool_set_sg(struct net_dev +@@ -551,9 +551,7 @@ return -EFAULT; if (edata.data && @@ -1724,24 +1721,16 @@ index e6f7610..27ce168 100644 return -EINVAL; return __ethtool_set_sg(dev, edata.data); -@@ -591,7 +589,7 @@ static int ethtool_set_tso(struct net_de +@@ -561,7 +559,7 @@ - static int ethtool_get_ufo(struct net_device *dev, char __user *useraddr) + static int ethtool_get_tso(struct net_device *dev, char __user *useraddr) { - struct ethtool_value edata = { ETHTOOL_GTSO }; + struct ethtool_value edata = { ETHTOOL_GUFO }; - if (!dev->ethtool_ops->get_ufo) + if (!dev->ethtool_ops->get_tso) return -EOPNOTSUPP; -@@ -600,6 +598,7 @@ static int ethtool_get_ufo(struct net_de - return -EFAULT; - return 0; - } -+ - static int ethtool_set_ufo(struct net_device *dev, char __user *useraddr) - { - struct ethtool_value edata; -@@ -615,6 +614,29 @@ static int ethtool_set_ufo(struct net_de +@@ -616,6 +614,29 @@ return dev->ethtool_ops->set_ufo(dev, edata.data); } @@ -1771,7 +1760,7 @@ index e6f7610..27ce168 100644 static int ethtool_self_test(struct net_device *dev, char __user *useraddr) { struct ethtool_test test; -@@ -906,6 +928,12 @@ int dev_ethtool(struct ifreq *ifr) +@@ -907,6 +928,12 @@ case ETHTOOL_SUFO: rc = ethtool_set_ufo(dev, useraddr); break; @@ -1784,11 +1773,11 @@ index e6f7610..27ce168 100644 default: rc = -EOPNOTSUPP; } -diff --git a/net/core/netpoll.c b/net/core/netpoll.c -index ea51f8d..ec28d3b 100644 ---- a/net/core/netpoll.c -+++ b/net/core/netpoll.c -@@ -273,24 +273,21 @@ static void netpoll_send_skb(struct netp +Index: tmp-xxx/net/core/netpoll.c +=================================================================== +--- tmp-xxx.orig/net/core/netpoll.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/core/netpoll.c 2006-11-27 10:52:42.000000000 +0000 +@@ -273,24 +273,21 @@ do { npinfo->tries--; @@ -1816,11 +1805,11 @@ index ea51f8d..ec28d3b 100644 /* success */ if(!status) { -diff --git a/net/core/pktgen.c b/net/core/pktgen.c -index da16f8f..2380347 100644 ---- a/net/core/pktgen.c -+++ b/net/core/pktgen.c -@@ -2582,7 +2582,7 @@ static __inline__ void pktgen_xmit(struc +Index: tmp-xxx/net/core/pktgen.c +=================================================================== +--- tmp-xxx.orig/net/core/pktgen.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/core/pktgen.c 2006-11-27 10:52:42.000000000 +0000 +@@ -2586,7 +2586,7 @@ } } @@ -1829,7 +1818,7 @@ index da16f8f..2380347 100644 if (!netif_queue_stopped(odev)) { atomic_inc(&(pkt_dev->skb->users)); -@@ -2627,7 +2627,7 @@ retry_now: +@@ -2631,7 +2631,7 @@ pkt_dev->next_tx_ns = 0; } @@ -1838,11 +1827,11 @@ index da16f8f..2380347 100644 /* If pkt_dev->count is zero, then run forever */ if ((pkt_dev->count != 0) && (pkt_dev->sofar >= pkt_dev->count)) { -diff --git a/net/core/skbuff.c b/net/core/skbuff.c -index 2144952..46f56af 100644 ---- a/net/core/skbuff.c -+++ b/net/core/skbuff.c -@@ -164,9 +164,9 @@ struct sk_buff *__alloc_skb(unsigned int +Index: tmp-xxx/net/core/skbuff.c +=================================================================== +--- tmp-xxx.orig/net/core/skbuff.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/core/skbuff.c 2006-11-27 10:58:31.000000000 +0000 +@@ -164,9 +164,9 @@ shinfo = skb_shinfo(skb); atomic_set(&shinfo->dataref, 1); shinfo->nr_frags = 0; @@ -1855,31 +1844,33 @@ index 2144952..46f56af 100644 shinfo->ip6_frag_id = 0; shinfo->frag_list = NULL; -@@ -230,8 +230,9 @@ struct sk_buff *alloc_skb_from_cache(kme +@@ -230,9 +230,9 @@ atomic_set(&(skb_shinfo(skb)->dataref), 1); skb_shinfo(skb)->nr_frags = 0; - skb_shinfo(skb)->tso_size = 0; - skb_shinfo(skb)->tso_segs = 0; +- skb_shinfo(skb)->ufo_size = 0; + skb_shinfo(skb)->gso_size = 0; + skb_shinfo(skb)->gso_segs = 0; + skb_shinfo(skb)->gso_type = 0; skb_shinfo(skb)->frag_list = NULL; out: return skb; -@@ -501,8 +502,9 @@ #endif +@@ -507,9 +507,9 @@ new->tc_index = old->tc_index; #endif atomic_set(&new->users, 1); - skb_shinfo(new)->tso_size = skb_shinfo(old)->tso_size; - skb_shinfo(new)->tso_segs = skb_shinfo(old)->tso_segs; +- skb_shinfo(new)->ufo_size = skb_shinfo(old)->ufo_size; + skb_shinfo(new)->gso_size = skb_shinfo(old)->gso_size; + skb_shinfo(new)->gso_segs = skb_shinfo(old)->gso_segs; + skb_shinfo(new)->gso_type = skb_shinfo(old)->gso_type; } /** -@@ -1777,6 +1779,133 @@ int skb_append_datato_frags(struct sock +@@ -1822,6 +1822,133 @@ return 0; } @@ -2013,11 +2004,11 @@ index 2144952..46f56af 100644 void __init skb_init(void) { skbuff_head_cache = kmem_cache_create("skbuff_head_cache", -diff --git a/net/decnet/dn_nsp_in.c b/net/decnet/dn_nsp_in.c -index 44bda85..2e3323a 100644 ---- a/net/decnet/dn_nsp_in.c -+++ b/net/decnet/dn_nsp_in.c -@@ -801,8 +801,7 @@ got_it: +Index: tmp-xxx/net/decnet/dn_nsp_in.c +=================================================================== +--- tmp-xxx.orig/net/decnet/dn_nsp_in.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/decnet/dn_nsp_in.c 2006-11-27 10:52:42.000000000 +0000 +@@ -801,8 +801,7 @@ * We linearize everything except data segments here. */ if (cb->nsp_flags & ~0x60) { @@ -2027,11 +2018,11 @@ index 44bda85..2e3323a 100644 goto free_out; } -diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c -index 3407f19..a0a25e0 100644 ---- a/net/decnet/dn_route.c -+++ b/net/decnet/dn_route.c -@@ -629,8 +629,7 @@ int dn_route_rcv(struct sk_buff *skb, st +Index: tmp-xxx/net/decnet/dn_route.c +=================================================================== +--- tmp-xxx.orig/net/decnet/dn_route.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/decnet/dn_route.c 2006-11-27 10:52:42.000000000 +0000 +@@ -629,8 +629,7 @@ padlen); if (flags & DN_RT_PKT_CNTL) { @@ -2041,10 +2032,10 @@ index 3407f19..a0a25e0 100644 goto dump_it; switch(flags & DN_RT_CNTL_MSK) { -diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c -index 97c276f..5ba719e 100644 ---- a/net/ipv4/af_inet.c -+++ b/net/ipv4/af_inet.c +Index: tmp-xxx/net/ipv4/af_inet.c +=================================================================== +--- tmp-xxx.orig/net/ipv4/af_inet.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/ipv4/af_inet.c 2006-11-27 10:52:42.000000000 +0000 @@ -68,6 +68,7 @@ */ @@ -2053,7 +2044,7 @@ index 97c276f..5ba719e 100644 #include <linux/errno.h> #include <linux/types.h> #include <linux/socket.h> -@@ -1084,6 +1085,54 @@ int inet_sk_rebuild_header(struct sock * +@@ -1084,6 +1085,54 @@ EXPORT_SYMBOL(inet_sk_rebuild_header); @@ -2108,7 +2099,7 @@ index 97c276f..5ba719e 100644 #ifdef CONFIG_IP_MULTICAST static struct net_protocol igmp_protocol = { .handler = igmp_rcv, -@@ -1093,6 +1142,7 @@ #endif +@@ -1093,6 +1142,7 @@ static struct net_protocol tcp_protocol = { .handler = tcp_v4_rcv, .err_handler = tcp_v4_err, @@ -2116,7 +2107,7 @@ index 97c276f..5ba719e 100644 .no_policy = 1, }; -@@ -1138,6 +1188,7 @@ static int ipv4_proc_init(void); +@@ -1138,6 +1188,7 @@ static struct packet_type ip_packet_type = { .type = __constant_htons(ETH_P_IP), .func = ip_rcv, @@ -2124,11 +2115,11 @@ index 97c276f..5ba719e 100644 }; static int __init inet_init(void) -diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c -index 8dcba38..19c3c73 100644 ---- a/net/ipv4/ip_output.c -+++ b/net/ipv4/ip_output.c -@@ -210,8 +210,7 @@ #if defined(CONFIG_NETFILTER) && defined +Index: tmp-xxx/net/ipv4/ip_output.c +=================================================================== +--- tmp-xxx.orig/net/ipv4/ip_output.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/ipv4/ip_output.c 2006-11-27 10:52:42.000000000 +0000 +@@ -210,8 +210,7 @@ return dst_output(skb); } #endif @@ -2138,7 +2129,7 @@ index 8dcba38..19c3c73 100644 return ip_fragment(skb, ip_finish_output2); else return ip_finish_output2(skb); -@@ -362,7 +361,7 @@ packet_routed: +@@ -362,7 +361,7 @@ } ip_select_ident_more(iph, &rt->u.dst, sk, @@ -2147,7 +2138,7 @@ index 8dcba38..19c3c73 100644 /* Add an IP checksum. */ ip_send_check(iph); -@@ -743,7 +742,8 @@ static inline int ip_ufo_append_data(str +@@ -743,7 +742,8 @@ (length - transhdrlen)); if (!err) { /* specify the length of each IP datagram fragment*/ @@ -2157,7 +2148,7 @@ index 8dcba38..19c3c73 100644 __skb_queue_tail(&sk->sk_write_queue, skb); return 0; -@@ -839,7 +839,7 @@ int ip_append_data(struct sock *sk, +@@ -839,7 +839,7 @@ */ if (transhdrlen && length + fragheaderlen <= mtu && @@ -2166,7 +2157,7 @@ index 8dcba38..19c3c73 100644 !exthdrlen) csummode = CHECKSUM_HW; -@@ -1086,14 +1086,16 @@ ssize_t ip_append_page(struct sock *sk, +@@ -1086,14 +1086,16 @@ inet->cork.length += size; if ((sk->sk_protocol == IPPROTO_UDP) && @@ -2186,11 +2177,11 @@ index 8dcba38..19c3c73 100644 len = size; else { -diff --git a/net/ipv4/ipcomp.c b/net/ipv4/ipcomp.c -index d64e2ec..7494823 100644 ---- a/net/ipv4/ipcomp.c -+++ b/net/ipv4/ipcomp.c -@@ -84,7 +84,7 @@ static int ipcomp_input(struct xfrm_stat +Index: tmp-xxx/net/ipv4/ipcomp.c +=================================================================== +--- tmp-xxx.orig/net/ipv4/ipcomp.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/ipv4/ipcomp.c 2006-11-27 10:52:42.000000000 +0000 +@@ -84,7 +84,7 @@ struct xfrm_decap_state *decap, struct sk_buff *skb) { u8 nexthdr; @@ -2199,7 +2190,7 @@ index d64e2ec..7494823 100644 struct iphdr *iph; union { struct iphdr iph; -@@ -92,11 +92,8 @@ static int ipcomp_input(struct xfrm_stat +@@ -92,11 +92,8 @@ } tmp_iph; @@ -2212,7 +2203,7 @@ index d64e2ec..7494823 100644 skb->ip_summed = CHECKSUM_NONE; -@@ -171,10 +168,8 @@ static int ipcomp_output(struct xfrm_sta +@@ -171,10 +168,8 @@ goto out_ok; } @@ -2224,11 +2215,11 @@ index d64e2ec..7494823 100644 err = ipcomp_compress(x, skb); iph = skb->nh.iph; -diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c -index 00aa80e..84130c9 100644 ---- a/net/ipv4/tcp.c -+++ b/net/ipv4/tcp.c -@@ -257,6 +257,7 @@ #include <linux/smp_lock.h> +Index: tmp-xxx/net/ipv4/tcp.c +=================================================================== +--- tmp-xxx.orig/net/ipv4/tcp.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/ipv4/tcp.c 2006-11-27 10:52:42.000000000 +0000 +@@ -257,6 +257,7 @@ #include <linux/fs.h> #include <linux/random.h> #include <linux/bootmem.h> @@ -2236,7 +2227,7 @@ index 00aa80e..84130c9 100644 #include <net/icmp.h> #include <net/tcp.h> -@@ -570,7 +571,7 @@ new_segment: +@@ -570,7 +571,7 @@ skb->ip_summed = CHECKSUM_HW; tp->write_seq += copy; TCP_SKB_CB(skb)->end_seq += copy; @@ -2245,7 +2236,7 @@ index 00aa80e..84130c9 100644 if (!copied) TCP_SKB_CB(skb)->flags &= ~TCPCB_FLAG_PSH; -@@ -621,14 +622,10 @@ ssize_t tcp_sendpage(struct socket *sock +@@ -621,14 +622,10 @@ ssize_t res; struct sock *sk = sock->sk; @@ -2261,7 +2252,7 @@ index 00aa80e..84130c9 100644 lock_sock(sk); TCP_CHECK_TIMER(sk); res = do_tcp_sendpages(sk, &page, offset, size, flags); -@@ -725,9 +722,7 @@ new_segment: +@@ -725,9 +722,7 @@ /* * Check whether we can use HW checksum. */ @@ -2272,7 +2263,7 @@ index 00aa80e..84130c9 100644 skb->ip_summed = CHECKSUM_HW; skb_entail(sk, tp, skb); -@@ -823,7 +818,7 @@ new_segment: +@@ -823,7 +818,7 @@ tp->write_seq += copy; TCP_SKB_CB(skb)->end_seq += copy; @@ -2281,7 +2272,7 @@ index 00aa80e..84130c9 100644 from += copy; copied += copy; -@@ -2026,6 +2021,71 @@ int tcp_getsockopt(struct sock *sk, int +@@ -2026,6 +2021,71 @@ } @@ -2353,11 +2344,11 @@ index 00aa80e..84130c9 100644 extern void __skb_cb_too_small_for_tcp(int, int); extern struct tcp_congestion_ops tcp_reno; -diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c -index e9a54ae..defe77a 100644 ---- a/net/ipv4/tcp_input.c -+++ b/net/ipv4/tcp_input.c -@@ -1072,7 +1072,7 @@ tcp_sacktag_write_queue(struct sock *sk, +Index: tmp-xxx/net/ipv4/tcp_input.c +=================================================================== +--- tmp-xxx.orig/net/ipv4/tcp_input.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/ipv4/tcp_input.c 2006-11-27 10:52:42.000000000 +0000 +@@ -1072,7 +1072,7 @@ else pkt_len = (end_seq - TCP_SKB_CB(skb)->seq); @@ -2366,11 +2357,11 @@ index e9a54ae..defe77a 100644 break; pcount = tcp_skb_pcount(skb); } -diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c -index 310f2e6..ee01f69 100644 ---- a/net/ipv4/tcp_output.c -+++ b/net/ipv4/tcp_output.c -@@ -497,15 +497,17 @@ static void tcp_set_skb_tso_segs(struct +Index: tmp-xxx/net/ipv4/tcp_output.c +=================================================================== +--- tmp-xxx.orig/net/ipv4/tcp_output.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/ipv4/tcp_output.c 2006-11-27 10:52:42.000000000 +0000 +@@ -497,15 +497,17 @@ /* Avoid the costly divide in the normal * non-TSO case. */ @@ -2392,7 +2383,7 @@ index 310f2e6..ee01f69 100644 } } -@@ -850,7 +852,7 @@ static int tcp_init_tso_segs(struct sock +@@ -850,7 +852,7 @@ if (!tso_segs || (tso_segs > 1 && @@ -2401,7 +2392,7 @@ index 310f2e6..ee01f69 100644 tcp_set_skb_tso_segs(sk, skb, mss_now); tso_segs = tcp_skb_pcount(skb); } -@@ -1510,8 +1512,9 @@ int tcp_retransmit_skb(struct sock *sk, +@@ -1510,8 +1512,9 @@ tp->snd_una == (TCP_SKB_CB(skb)->end_seq - 1)) { if (!pskb_trim(skb, 0)) { TCP_SKB_CB(skb)->seq = TCP_SKB_CB(skb)->end_seq - 1; @@ -2413,7 +2404,7 @@ index 310f2e6..ee01f69 100644 skb->ip_summed = CHECKSUM_NONE; skb->csum = 0; } -@@ -1716,8 +1719,9 @@ void tcp_send_fin(struct sock *sk) +@@ -1716,8 +1719,9 @@ skb->csum = 0; TCP_SKB_CB(skb)->flags = (TCPCB_FLAG_ACK | TCPCB_FLAG_FIN); TCP_SKB_CB(skb)->sacked = 0; @@ -2425,7 +2416,7 @@ index 310f2e6..ee01f69 100644 /* FIN eats a sequence byte, write_seq advanced by tcp_queue_skb(). */ TCP_SKB_CB(skb)->seq = tp->write_seq; -@@ -1749,8 +1753,9 @@ void tcp_send_active_reset(struct sock * +@@ -1749,8 +1753,9 @@ skb->csum = 0; TCP_SKB_CB(skb)->flags = (TCPCB_FLAG_ACK | TCPCB_FLAG_RST); TCP_SKB_CB(skb)->sacked = 0; @@ -2437,7 +2428,7 @@ index 310f2e6..ee01f69 100644 /* Send it off. */ TCP_SKB_CB(skb)->seq = tcp_acceptable_seq(sk, tp); -@@ -1833,8 +1838,9 @@ struct sk_buff * tcp_make_synack(struct +@@ -1833,8 +1838,9 @@ TCP_SKB_CB(skb)->seq = tcp_rsk(req)->snt_isn; TCP_SKB_CB(skb)->end_seq = TCP_SKB_CB(skb)->seq + 1; TCP_SKB_CB(skb)->sacked = 0; @@ -2449,7 +2440,7 @@ index 310f2e6..ee01f69 100644 th->seq = htonl(TCP_SKB_CB(skb)->seq); th->ack_seq = htonl(tcp_rsk(req)->rcv_isn + 1); if (req->rcv_wnd == 0) { /* ignored for retransmitted syns */ -@@ -1937,8 +1943,9 @@ int tcp_connect(struct sock *sk) +@@ -1937,8 +1943,9 @@ TCP_SKB_CB(buff)->flags = TCPCB_FLAG_SYN; TCP_ECN_send_syn(sk, tp, buff); TCP_SKB_CB(buff)->sacked = 0; @@ -2461,7 +2452,7 @@ index 310f2e6..ee01f69 100644 buff->csum = 0; TCP_SKB_CB(buff)->seq = tp->write_seq++; TCP_SKB_CB(buff)->end_seq = tp->write_seq; -@@ -2042,8 +2049,9 @@ void tcp_send_ack(struct sock *sk) +@@ -2042,8 +2049,9 @@ buff->csum = 0; TCP_SKB_CB(buff)->flags = TCPCB_FLAG_ACK; TCP_SKB_CB(buff)->sacked = 0; @@ -2473,7 +2464,7 @@ index 310f2e6..ee01f69 100644 /* Send it off, this clears delayed acks for us. */ TCP_SKB_CB(buff)->seq = TCP_SKB_CB(buff)->end_seq = tcp_acceptable_seq(sk, tp); -@@ -2078,8 +2086,9 @@ static int tcp_xmit_probe_skb(struct soc +@@ -2078,8 +2086,9 @@ skb->csum = 0; TCP_SKB_CB(skb)->flags = TCPCB_FLAG_ACK; TCP_SKB_CB(skb)->sacked = urgent; @@ -2485,10 +2476,10 @@ index 310f2e6..ee01f69 100644 /* Use a previous sequence. This should cause the other * end to send an ack. Don't queue or clone SKB, just -diff --git a/net/ipv4/xfrm4_output.c b/net/ipv4/xfrm4_output.c -index 32ad229..737c1db 100644 ---- a/net/ipv4/xfrm4_output.c -+++ b/net/ipv4/xfrm4_output.c +Index: tmp-xxx/net/ipv4/xfrm4_output.c +=================================================================== +--- tmp-xxx.orig/net/ipv4/xfrm4_output.c 2006-11-27 10:52:32.000000000 +0000 ++++ tmp-xxx/net/ipv4/xfrm4_output.c 2006-11-27 10:52:42.000000000 +0000 @@ -9,6 +9,8 @@ */ @@ -2498,7 +2489,7 @@ index 32ad229..737c1db 100644 #include <linux/skbuff.h> #include <linux/spinlock.h> #include <linux/netfilter_ipv4.h> -@@ -152,16 +154,10 @@ error_nolock: +@@ -158,16 +160,10 @@ goto out_exit; } @@ -2516,7 +2507,7 @@ index 32ad229..737c1db 100644 while (likely((err = xfrm4_output_one(skb)) == 0)) { nf_reset(skb); -@@ -174,7 +170,7 @@ #endif +@@ -180,7 +176,7 @@ return dst_output(skb); err = nf_hook(PF_INET, NF_IP_POST_ROUTING, &skb, NULL, @@ -2525,7 +2516,7 @@ index 32ad229..737c1db 100644 if (unlikely(err != 1)) break; } -@@ -182,6 +178,48 @@ #endif +@@ -188,6 +184,48 @@ return err; } @@ -2574,11 +2565,11 @@ index 32ad229..737c1db 100644 int xfrm4_output(struct sk_buff *skb) { return NF_HOOK_COND(PF_INET, NF_IP_POST_ROUTING, skb, NULL, skb->dst->dev, -diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c -index 5bf70b1..cf5d17e 100644 ---- a/net/ipv6/ip6_output.c -+++ b/net/ipv6/ip6_output.c -@@ -147,7 +147,7 @@ static int ip6_output2(struct sk_buff *s +Index: tmp-xxx/net/ipv6/ip6_output.c +=================================================================== +--- tmp-xxx.orig/net/ipv6/ip6_output.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/ipv6/ip6_output.c 2006-11-27 10:52:42.000000000 +0000 +@@ -147,7 +147,7 @@ int ip6_output(struct sk_buff *skb) { @@ -2587,7 +2578,7 @@ index 5bf70b1..cf5d17e 100644 dst_allfrag(skb->dst)) return ip6_fragment(skb, ip6_output2); else -@@ -829,8 +829,9 @@ static inline int ip6_ufo_append_data(st +@@ -829,8 +829,9 @@ struct frag_hdr fhdr; /* specify the length of each IP datagram fragment*/ @@ -2599,11 +2590,11 @@ index 5bf70b1..cf5d17e 100644 ipv6_select_ident(skb, &fhdr); skb_shinfo(skb)->ip6_frag_id = fhdr.identification; __skb_queue_tail(&sk->sk_write_queue, skb); -diff --git a/net/ipv6/ipcomp6.c b/net/ipv6/ipcomp6.c -index d511a88..ef56d5d 100644 ---- a/net/ipv6/ipcomp6.c -+++ b/net/ipv6/ipcomp6.c -@@ -64,7 +64,7 @@ static LIST_HEAD(ipcomp6_tfms_list); +Index: tmp-xxx/net/ipv6/ipcomp6.c +=================================================================== +--- tmp-xxx.orig/net/ipv6/ipcomp6.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/ipv6/ipcomp6.c 2006-11-27 10:52:42.000000000 +0000 +@@ -64,7 +64,7 @@ static int ipcomp6_input(struct xfrm_state *x, struct xfrm_decap_state *decap, struct sk_buff *skb) { @@ -2612,7 +2603,7 @@ index d511a88..ef56d5d 100644 u8 nexthdr = 0; int hdr_len = skb->h.raw - skb->nh.raw; unsigned char *tmp_hdr = NULL; -@@ -75,11 +75,8 @@ static int ipcomp6_input(struct xfrm_sta +@@ -75,11 +75,8 @@ struct crypto_tfm *tfm; int cpu; @@ -2625,7 +2616,7 @@ index d511a88..ef56d5d 100644 skb->ip_summed = CHECKSUM_NONE; -@@ -158,10 +155,8 @@ static int ipcomp6_output(struct xfrm_st +@@ -158,10 +155,8 @@ goto out_ok; } @@ -2637,11 +2628,11 @@ index d511a88..ef56d5d 100644 /* compression */ plen = skb->len - hdr_len; -diff --git a/net/ipv6/xfrm6_output.c b/net/ipv6/xfrm6_output.c -index 8024217..39bdeec 100644 ---- a/net/ipv6/xfrm6_output.c -+++ b/net/ipv6/xfrm6_output.c -@@ -151,7 +151,7 @@ error_nolock: +Index: tmp-xxx/net/ipv6/xfrm6_output.c +=================================================================== +--- tmp-xxx.orig/net/ipv6/xfrm6_output.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/ipv6/xfrm6_output.c 2006-11-27 10:52:42.000000000 +0000 +@@ -151,7 +151,7 @@ goto out_exit; } @@ -2650,7 +2641,7 @@ index 8024217..39bdeec 100644 { int err; -@@ -167,7 +167,7 @@ static int xfrm6_output_finish(struct sk +@@ -167,7 +167,7 @@ return dst_output(skb); err = nf_hook(PF_INET6, NF_IP6_POST_ROUTING, &skb, NULL, @@ -2659,7 +2650,7 @@ index 8024217..39bdeec 100644 if (unlikely(err != 1)) break; } -@@ -175,6 +175,41 @@ static int xfrm6_output_finish(struct sk +@@ -175,6 +175,41 @@ return err; } @@ -2701,11 +2692,11 @@ index 8024217..39bdeec 100644 int xfrm6_output(struct sk_buff *skb) { return NF_HOOK(PF_INET6, NF_IP6_POST_ROUTING, skb, NULL, skb->dst->dev, -diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c -index 99ceb91..28c9efd 100644 ---- a/net/sched/sch_generic.c -+++ b/net/sched/sch_generic.c -@@ -72,9 +72,9 @@ void qdisc_unlock_tree(struct net_device +Index: tmp-xxx/net/sched/sch_generic.c +=================================================================== +--- tmp-xxx.orig/net/sched/sch_generic.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/sched/sch_generic.c 2006-11-27 10:52:42.000000000 +0000 +@@ -72,9 +72,9 @@ dev->queue_lock serializes queue accesses for this device AND dev->qdisc pointer itself. @@ -2717,7 +2708,7 @@ index 99ceb91..28c9efd 100644 if one is grabbed, another must be free. */ -@@ -90,14 +90,17 @@ void qdisc_unlock_tree(struct net_device +@@ -90,14 +90,17 @@ NOTE: Called under dev->queue_lock with locally disabled BH. */ @@ -2737,7 +2728,7 @@ index 99ceb91..28c9efd 100644 /* * When the driver has LLTX set it does its own locking * in start_xmit. No need to add additional overhead by -@@ -108,7 +111,7 @@ int qdisc_restart(struct net_device *dev +@@ -108,7 +111,7 @@ * will be requeued. */ if (!nolock) { @@ -2746,7 +2737,7 @@ index 99ceb91..28c9efd 100644 collision: /* So, someone grabbed the driver. */ -@@ -126,8 +129,6 @@ int qdisc_restart(struct net_device *dev +@@ -126,8 +129,6 @@ __get_cpu_var(netdev_rx_stat).cpu_collision++; goto requeue; } @@ -2755,7 +2746,7 @@ index 99ceb91..28c9efd 100644 } { -@@ -136,14 +137,11 @@ int qdisc_restart(struct net_device *dev +@@ -136,14 +137,11 @@ if (!netif_queue_stopped(dev)) { int ret; @@ -2772,7 +2763,7 @@ index 99ceb91..28c9efd 100644 } spin_lock(&dev->queue_lock); return -1; -@@ -157,8 +155,7 @@ int qdisc_restart(struct net_device *dev +@@ -157,8 +155,7 @@ /* NETDEV_TX_BUSY - we need to requeue */ /* Release the driver */ if (!nolock) { @@ -2782,7 +2773,7 @@ index 99ceb91..28c9efd 100644 } spin_lock(&dev->queue_lock); q = dev->qdisc; -@@ -175,7 +172,10 @@ int qdisc_restart(struct net_device *dev +@@ -175,7 +172,10 @@ */ requeue: @@ -2794,7 +2785,7 @@ index 99ceb91..28c9efd 100644 netif_schedule(dev); return 1; } -@@ -183,11 +183,23 @@ requeue: +@@ -183,11 +183,23 @@ return q->q.qlen; } @@ -2819,7 +2810,7 @@ index 99ceb91..28c9efd 100644 if (dev->qdisc != &noop_qdisc) { if (netif_device_present(dev) && netif_running(dev) && -@@ -201,7 +213,7 @@ static void dev_watchdog(unsigned long a +@@ -201,7 +213,7 @@ dev_hold(dev); } } @@ -2828,7 +2819,7 @@ index 99ceb91..28c9efd 100644 dev_put(dev); } -@@ -225,17 +237,17 @@ void __netdev_watchdog_up(struct net_dev +@@ -225,17 +237,17 @@ static void dev_watchdog_up(struct net_device *dev) { @@ -2850,7 +2841,7 @@ index 99ceb91..28c9efd 100644 } void netif_carrier_on(struct net_device *dev) -@@ -577,10 +589,17 @@ void dev_deactivate(struct net_device *d +@@ -577,10 +589,17 @@ dev_watchdog_down(dev); @@ -2870,18 +2861,18 @@ index 99ceb91..28c9efd 100644 } void dev_init_scheduler(struct net_device *dev) -@@ -622,6 +641,5 @@ EXPORT_SYMBOL(qdisc_create_dflt); +@@ -622,6 +641,5 @@ EXPORT_SYMBOL(qdisc_alloc); EXPORT_SYMBOL(qdisc_destroy); EXPORT_SYMBOL(qdisc_reset); -EXPORT_SYMBOL(qdisc_restart); EXPORT_SYMBOL(qdisc_lock_tree); EXPORT_SYMBOL(qdisc_unlock_tree); -diff --git a/net/sched/sch_teql.c b/net/sched/sch_teql.c -index 79b8ef3..4c16ad5 100644 ---- a/net/sched/sch_teql.c -+++ b/net/sched/sch_teql.c -@@ -302,20 +302,17 @@ restart: +Index: tmp-xxx/net/sched/sch_teql.c +=================================================================== +--- tmp-xxx.orig/net/sched/sch_teql.c 2006-11-15 10:38:39.000000000 +0000 ++++ tmp-xxx/net/sched/sch_teql.c 2006-11-27 10:52:42.000000000 +0000 +@@ -302,20 +302,17 @@ switch (teql_resolve(skb, skb_res, slave)) { case 0: diff --git a/patches/linux-2.6.16.13/net-gso-1-check-dodgy.patch b/patches/linux-2.6.16.32/net-gso-1-check-dodgy.patch index ab8812af61..db2ea2321b 100644 --- a/patches/linux-2.6.16.13/net-gso-1-check-dodgy.patch +++ b/patches/linux-2.6.16.32/net-gso-1-check-dodgy.patch @@ -1,6 +1,6 @@ -diff -urp a/net/ipv4/tcp.c b/net/ipv4/tcp.c ---- a/net/ipv4/tcp.c 2006-07-25 14:42:53.194910626 +0100 -+++ b/net/ipv4/tcp.c 2006-07-25 14:41:00.955501910 +0100 +diff -pruN ../orig-linux-2.6.16.29/net/ipv4/tcp.c ./net/ipv4/tcp.c +--- ../orig-linux-2.6.16.29/net/ipv4/tcp.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./net/ipv4/tcp.c 2006-09-19 13:59:42.000000000 +0100 @@ -2042,13 +2042,19 @@ struct sk_buff *tcp_tso_segment(struct s if (!pskb_may_pull(skb, thlen)) goto out; diff --git a/patches/linux-2.6.16.13/net-gso-2-checksum-fix.patch b/patches/linux-2.6.16.32/net-gso-2-checksum-fix.patch index d8b7ba7a75..430be5fbbf 100644 --- a/patches/linux-2.6.16.13/net-gso-2-checksum-fix.patch +++ b/patches/linux-2.6.16.32/net-gso-2-checksum-fix.patch @@ -1,6 +1,6 @@ -diff -urp a/drivers/net/bnx2.c b/drivers/net/bnx2.c ---- a/drivers/net/bnx2.c 2006-07-25 14:41:00.905507519 +0100 -+++ b/drivers/net/bnx2.c 2006-07-25 14:36:00.288561400 +0100 +diff -pruN ../orig-linux-2.6.16.29/drivers/net/bnx2.c ./drivers/net/bnx2.c +--- ../orig-linux-2.6.16.29/drivers/net/bnx2.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./drivers/net/bnx2.c 2006-09-19 13:59:46.000000000 +0100 @@ -1593,7 +1593,7 @@ bnx2_tx_int(struct bnx2 *bp) skb = tx_buf->skb; #ifdef BCM_TSO @@ -10,9 +10,9 @@ diff -urp a/drivers/net/bnx2.c b/drivers/net/bnx2.c u16 last_idx, last_ring_idx; last_idx = sw_cons + -diff -urp a/drivers/net/chelsio/sge.c b/drivers/net/chelsio/sge.c ---- a/drivers/net/chelsio/sge.c 2006-07-25 14:41:00.908507183 +0100 -+++ b/drivers/net/chelsio/sge.c 2006-07-25 14:36:00.291561087 +0100 +diff -pruN ../orig-linux-2.6.16.29/drivers/net/chelsio/sge.c ./drivers/net/chelsio/sge.c +--- ../orig-linux-2.6.16.29/drivers/net/chelsio/sge.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./drivers/net/chelsio/sge.c 2006-09-19 13:59:46.000000000 +0100 @@ -1419,7 +1419,7 @@ int t1_start_xmit(struct sk_buff *skb, s struct cpl_tx_pkt *cpl; @@ -22,9 +22,9 @@ diff -urp a/drivers/net/chelsio/sge.c b/drivers/net/chelsio/sge.c int eth_type; struct cpl_tx_pkt_lso *hdr; -diff -urp a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c ---- a/drivers/net/e1000/e1000_main.c 2006-07-25 14:41:00.910506958 +0100 -+++ b/drivers/net/e1000/e1000_main.c 2006-07-25 14:36:00.293560878 +0100 +diff -pruN ../orig-linux-2.6.16.29/drivers/net/e1000/e1000_main.c ./drivers/net/e1000/e1000_main.c +--- ../orig-linux-2.6.16.29/drivers/net/e1000/e1000_main.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./drivers/net/e1000/e1000_main.c 2006-09-19 13:59:46.000000000 +0100 @@ -2526,7 +2526,7 @@ e1000_tso(struct e1000_adapter *adapter, uint8_t ipcss, ipcso, tucss, tucso, hdr_len; int err; @@ -53,9 +53,9 @@ diff -urp a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c count++; #endif -diff -urp a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c ---- a/drivers/net/forcedeth.c 2006-07-25 14:41:00.912506734 +0100 -+++ b/drivers/net/forcedeth.c 2006-07-25 14:36:00.295560669 +0100 +diff -pruN ../orig-linux-2.6.16.29/drivers/net/forcedeth.c ./drivers/net/forcedeth.c +--- ../orig-linux-2.6.16.29/drivers/net/forcedeth.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./drivers/net/forcedeth.c 2006-09-19 13:59:46.000000000 +0100 @@ -1105,7 +1105,7 @@ static int nv_start_xmit(struct sk_buff np->tx_skbuff[nr] = skb; @@ -65,9 +65,9 @@ diff -urp a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c tx_flags_extra = NV_TX2_TSO | (skb_shinfo(skb)->gso_size << NV_TX2_TSO_SHIFT); else #endif -diff -urp a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c ---- a/drivers/net/ixgb/ixgb_main.c 2006-07-25 14:41:00.915506397 +0100 -+++ b/drivers/net/ixgb/ixgb_main.c 2006-07-25 14:36:00.298560355 +0100 +diff -pruN ../orig-linux-2.6.16.29/drivers/net/ixgb/ixgb_main.c ./drivers/net/ixgb/ixgb_main.c +--- ../orig-linux-2.6.16.29/drivers/net/ixgb/ixgb_main.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./drivers/net/ixgb/ixgb_main.c 2006-09-19 13:59:46.000000000 +0100 @@ -1163,7 +1163,7 @@ ixgb_tso(struct ixgb_adapter *adapter, s uint16_t ipcse, tucse, mss; int err; @@ -77,9 +77,9 @@ diff -urp a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c if (skb_header_cloned(skb)) { err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); if (err) -diff -urp a/drivers/net/loopback.c b/drivers/net/loopback.c ---- a/drivers/net/loopback.c 2006-07-25 14:41:00.915506397 +0100 -+++ b/drivers/net/loopback.c 2006-07-25 14:36:00.298560355 +0100 +diff -pruN ../orig-linux-2.6.16.29/drivers/net/loopback.c ./drivers/net/loopback.c +--- ../orig-linux-2.6.16.29/drivers/net/loopback.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./drivers/net/loopback.c 2006-09-19 13:59:46.000000000 +0100 @@ -139,7 +139,7 @@ static int loopback_xmit(struct sk_buff #endif @@ -89,9 +89,9 @@ diff -urp a/drivers/net/loopback.c b/drivers/net/loopback.c BUG_ON(skb->protocol != htons(ETH_P_IP)); BUG_ON(skb->nh.iph->protocol != IPPROTO_TCP); -diff -urp a/drivers/net/sky2.c b/drivers/net/sky2.c ---- a/drivers/net/sky2.c 2006-07-25 14:41:00.924505388 +0100 -+++ b/drivers/net/sky2.c 2006-07-25 14:36:00.306559519 +0100 +diff -pruN ../orig-linux-2.6.16.29/drivers/net/sky2.c ./drivers/net/sky2.c +--- ../orig-linux-2.6.16.29/drivers/net/sky2.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./drivers/net/sky2.c 2006-09-19 13:59:46.000000000 +0100 @@ -1125,7 +1125,7 @@ static unsigned tx_le_req(const struct s count = sizeof(dma_addr_t) / sizeof(u32); count += skb_shinfo(skb)->nr_frags * count; @@ -101,9 +101,9 @@ diff -urp a/drivers/net/sky2.c b/drivers/net/sky2.c ++count; if (skb->ip_summed == CHECKSUM_HW) -diff -urp a/drivers/net/typhoon.c b/drivers/net/typhoon.c ---- a/drivers/net/typhoon.c 2006-07-25 14:41:00.931504603 +0100 -+++ b/drivers/net/typhoon.c 2006-07-25 14:36:00.314558683 +0100 +diff -pruN ../orig-linux-2.6.16.29/drivers/net/typhoon.c ./drivers/net/typhoon.c +--- ../orig-linux-2.6.16.29/drivers/net/typhoon.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./drivers/net/typhoon.c 2006-09-19 13:59:46.000000000 +0100 @@ -805,7 +805,7 @@ typhoon_start_tx(struct sk_buff *skb, st * If problems develop with TSO, check this first. */ @@ -122,9 +122,9 @@ diff -urp a/drivers/net/typhoon.c b/drivers/net/typhoon.c first_txd->processFlags |= TYPHOON_TX_PF_TCP_SEGMENT; first_txd->numDesc++; -diff -urp a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c ---- a/drivers/s390/net/qeth_main.c 2006-07-25 14:41:00.939503705 +0100 -+++ b/drivers/s390/net/qeth_main.c 2006-07-25 14:36:00.321557952 +0100 +diff -pruN ../orig-linux-2.6.16.29/drivers/s390/net/qeth_main.c ./drivers/s390/net/qeth_main.c +--- ../orig-linux-2.6.16.29/drivers/s390/net/qeth_main.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./drivers/s390/net/qeth_main.c 2006-09-19 13:59:46.000000000 +0100 @@ -4454,7 +4454,7 @@ qeth_send_packet(struct qeth_card *card, queue = card->qdio.out_qs [qeth_get_priority_queue(card, skb, ipv, cast_type)]; @@ -144,9 +144,9 @@ diff -urp a/drivers/s390/net/qeth_main.c b/drivers/s390/net/qeth_main.c card->perf_stats.large_send_bytes += skb->len; card->perf_stats.large_send_cnt++; } -diff -urp a/include/linux/netdevice.h b/include/linux/netdevice.h ---- a/include/linux/netdevice.h 2006-07-25 14:41:00.940503593 +0100 -+++ b/include/linux/netdevice.h 2006-07-25 14:36:00.323557743 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/linux/netdevice.h ./include/linux/netdevice.h +--- ../orig-linux-2.6.16.29/include/linux/netdevice.h 2006-09-19 13:59:20.000000000 +0100 ++++ ./include/linux/netdevice.h 2006-09-19 13:59:46.000000000 +0100 @@ -541,6 +541,7 @@ struct packet_type { struct net_device *); struct sk_buff *(*gso_segment)(struct sk_buff *skb, @@ -174,9 +174,9 @@ diff -urp a/include/linux/netdevice.h b/include/linux/netdevice.h } #endif /* __KERNEL__ */ -diff -urp a/include/linux/skbuff.h b/include/linux/skbuff.h ---- a/include/linux/skbuff.h 2006-07-25 14:41:00.941503481 +0100 -+++ b/include/linux/skbuff.h 2006-07-25 14:36:00.323557743 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/linux/skbuff.h ./include/linux/skbuff.h +--- ../orig-linux-2.6.16.29/include/linux/skbuff.h 2006-09-19 13:59:20.000000000 +0100 ++++ ./include/linux/skbuff.h 2006-09-19 13:59:46.000000000 +0100 @@ -1403,5 +1403,10 @@ static inline void nf_bridge_get(struct static inline void nf_reset(struct sk_buff *skb) {} #endif /* CONFIG_NETFILTER */ @@ -188,9 +188,9 @@ diff -urp a/include/linux/skbuff.h b/include/linux/skbuff.h + #endif /* __KERNEL__ */ #endif /* _LINUX_SKBUFF_H */ -diff -urp a/include/net/protocol.h b/include/net/protocol.h ---- a/include/net/protocol.h 2006-07-25 14:41:00.942503369 +0100 -+++ b/include/net/protocol.h 2006-07-25 14:36:00.324557639 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/net/protocol.h ./include/net/protocol.h +--- ../orig-linux-2.6.16.29/include/net/protocol.h 2006-09-19 13:59:20.000000000 +0100 ++++ ./include/net/protocol.h 2006-09-19 13:59:46.000000000 +0100 @@ -37,6 +37,7 @@ struct net_protocol { int (*handler)(struct sk_buff *skb); @@ -199,9 +199,9 @@ diff -urp a/include/net/protocol.h b/include/net/protocol.h struct sk_buff *(*gso_segment)(struct sk_buff *skb, int features); int no_policy; -diff -urp a/include/net/tcp.h b/include/net/tcp.h ---- a/include/net/tcp.h 2006-07-25 14:41:00.943503256 +0100 -+++ b/include/net/tcp.h 2006-07-25 14:36:00.325557534 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/net/tcp.h ./include/net/tcp.h +--- ../orig-linux-2.6.16.29/include/net/tcp.h 2006-09-19 13:59:20.000000000 +0100 ++++ ./include/net/tcp.h 2006-09-19 13:59:46.000000000 +0100 @@ -1063,6 +1063,7 @@ extern struct request_sock_ops tcp_reque extern int tcp_v4_destroy_sock(struct sock *sk); @@ -210,9 +210,9 @@ diff -urp a/include/net/tcp.h b/include/net/tcp.h extern struct sk_buff *tcp_tso_segment(struct sk_buff *skb, int features); #ifdef CONFIG_PROC_FS -diff -urp a/net/bridge/br_forward.c b/net/bridge/br_forward.c ---- a/net/bridge/br_forward.c 2006-07-25 14:41:00.944503144 +0100 -+++ b/net/bridge/br_forward.c 2006-07-25 14:36:00.326557430 +0100 +diff -pruN ../orig-linux-2.6.16.29/net/bridge/br_forward.c ./net/bridge/br_forward.c +--- ../orig-linux-2.6.16.29/net/bridge/br_forward.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./net/bridge/br_forward.c 2006-09-19 13:59:46.000000000 +0100 @@ -32,7 +32,7 @@ static inline int should_deliver(const s int br_dev_queue_push_xmit(struct sk_buff *skb) { @@ -222,9 +222,9 @@ diff -urp a/net/bridge/br_forward.c b/net/bridge/br_forward.c kfree_skb(skb); else { #ifdef CONFIG_BRIDGE_NETFILTER -diff -urp a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c ---- a/net/bridge/br_netfilter.c 2006-07-25 14:41:00.945503032 +0100 -+++ b/net/bridge/br_netfilter.c 2006-07-25 14:36:00.327557325 +0100 +diff -pruN ../orig-linux-2.6.16.29/net/bridge/br_netfilter.c ./net/bridge/br_netfilter.c +--- ../orig-linux-2.6.16.29/net/bridge/br_netfilter.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./net/bridge/br_netfilter.c 2006-09-19 13:59:46.000000000 +0100 @@ -743,7 +743,7 @@ static int br_nf_dev_queue_xmit(struct s { if (skb->protocol == htons(ETH_P_IP) && @@ -234,9 +234,9 @@ diff -urp a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c return ip_fragment(skb, br_dev_queue_push_xmit); else return br_dev_queue_push_xmit(skb); -diff -urp a/net/core/dev.c b/net/core/dev.c ---- a/net/core/dev.c 2006-07-25 14:41:00.947502808 +0100 -+++ b/net/core/dev.c 2006-07-25 14:36:00.329557116 +0100 +diff -pruN ../orig-linux-2.6.16.29/net/core/dev.c ./net/core/dev.c +--- ../orig-linux-2.6.16.29/net/core/dev.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./net/core/dev.c 2006-09-19 13:59:46.000000000 +0100 @@ -1083,9 +1083,17 @@ int skb_checksum_help(struct sk_buff *sk unsigned int csum; int ret = 0, offset = skb->h.raw - skb->data; @@ -304,9 +304,9 @@ diff -urp a/net/core/dev.c b/net/core/dev.c segs = ptype->gso_segment(skb, features); break; } -diff -urp a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c ---- a/net/ipv4/af_inet.c 2006-07-25 14:41:00.952502247 +0100 -+++ b/net/ipv4/af_inet.c 2006-07-25 14:36:00.334556594 +0100 +diff -pruN ../orig-linux-2.6.16.29/net/ipv4/af_inet.c ./net/ipv4/af_inet.c +--- ../orig-linux-2.6.16.29/net/ipv4/af_inet.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./net/ipv4/af_inet.c 2006-09-19 13:59:46.000000000 +0100 @@ -1085,6 +1085,40 @@ int inet_sk_rebuild_header(struct sock * EXPORT_SYMBOL(inet_sk_rebuild_header); @@ -364,9 +364,9 @@ diff -urp a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c .gso_segment = inet_gso_segment, }; -diff -urp a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c ---- a/net/ipv4/ip_output.c 2006-07-25 14:41:00.953502135 +0100 -+++ b/net/ipv4/ip_output.c 2006-07-25 14:36:00.335556489 +0100 +diff -pruN ../orig-linux-2.6.16.29/net/ipv4/ip_output.c ./net/ipv4/ip_output.c +--- ../orig-linux-2.6.16.29/net/ipv4/ip_output.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./net/ipv4/ip_output.c 2006-09-19 13:59:46.000000000 +0100 @@ -210,7 +210,7 @@ static inline int ip_finish_output(struc return dst_output(skb); } @@ -385,9 +385,9 @@ diff -urp a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c len = size; else { -diff -urp a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c ---- a/net/ipv4/tcp_ipv4.c 2006-07-25 14:39:15.985080788 +0100 -+++ b/net/ipv4/tcp_ipv4.c 2006-07-25 14:36:00.339556071 +0100 +diff -pruN ../orig-linux-2.6.16.29/net/ipv4/tcp_ipv4.c ./net/ipv4/tcp_ipv4.c +--- ../orig-linux-2.6.16.29/net/ipv4/tcp_ipv4.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./net/ipv4/tcp_ipv4.c 2006-09-19 13:59:46.000000000 +0100 @@ -495,6 +495,24 @@ void tcp_v4_send_check(struct sock *sk, } } @@ -413,10 +413,10 @@ diff -urp a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c /* * This routine will send an RST to the other tcp. * -diff -urp a/net/ipv4/xfrm4_output.c b/net/ipv4/xfrm4_output.c ---- a/net/ipv4/xfrm4_output.c 2006-07-25 14:41:00.958501574 +0100 -+++ b/net/ipv4/xfrm4_output.c 2006-07-25 14:36:00.341555862 +0100 -@@ -189,7 +189,7 @@ static int xfrm4_output_finish(struct sk +diff -pruN ../orig-linux-2.6.16.29/net/ipv4/xfrm4_output.c ./net/ipv4/xfrm4_output.c +--- ../orig-linux-2.6.16.29/net/ipv4/xfrm4_output.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./net/ipv4/xfrm4_output.c 2006-09-19 13:59:46.000000000 +0100 +@@ -195,7 +195,7 @@ static int xfrm4_output_finish(struct sk } #endif @@ -425,9 +425,9 @@ diff -urp a/net/ipv4/xfrm4_output.c b/net/ipv4/xfrm4_output.c return xfrm4_output_finish2(skb); skb->protocol = htons(ETH_P_IP); -diff -urp a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c ---- a/net/ipv6/ip6_output.c 2006-07-25 14:41:00.959501461 +0100 -+++ b/net/ipv6/ip6_output.c 2006-07-25 14:36:00.341555862 +0100 +diff -pruN ../orig-linux-2.6.16.29/net/ipv6/ip6_output.c ./net/ipv6/ip6_output.c +--- ../orig-linux-2.6.16.29/net/ipv6/ip6_output.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./net/ipv6/ip6_output.c 2006-09-19 13:59:46.000000000 +0100 @@ -147,7 +147,7 @@ static int ip6_output2(struct sk_buff *s int ip6_output(struct sk_buff *skb) @@ -437,9 +437,9 @@ diff -urp a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c dst_allfrag(skb->dst)) return ip6_fragment(skb, ip6_output2); else -diff -urp a/net/ipv6/xfrm6_output.c b/net/ipv6/xfrm6_output.c ---- a/net/ipv6/xfrm6_output.c 2006-07-25 14:41:00.960501349 +0100 -+++ b/net/ipv6/xfrm6_output.c 2006-07-25 14:36:00.342555758 +0100 +diff -pruN ../orig-linux-2.6.16.29/net/ipv6/xfrm6_output.c ./net/ipv6/xfrm6_output.c +--- ../orig-linux-2.6.16.29/net/ipv6/xfrm6_output.c 2006-09-19 13:59:20.000000000 +0100 ++++ ./net/ipv6/xfrm6_output.c 2006-09-19 13:59:46.000000000 +0100 @@ -179,7 +179,7 @@ static int xfrm6_output_finish(struct sk { struct sk_buff *segs; diff --git a/patches/linux-2.6.16.13/net-gso-3-fix-errorcheck.patch b/patches/linux-2.6.16.32/net-gso-3-fix-errorcheck.patch index 0b3dfd2870..0c373223d8 100644 --- a/patches/linux-2.6.16.13/net-gso-3-fix-errorcheck.patch +++ b/patches/linux-2.6.16.32/net-gso-3-fix-errorcheck.patch @@ -1,6 +1,6 @@ -diff -urp a/include/linux/netdevice.h b/include/linux/netdevice.h ---- a/include/linux/netdevice.h 2006-07-25 15:16:39.314333975 +0100 -+++ b/include/linux/netdevice.h 2006-07-25 15:19:37.298320799 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/linux/netdevice.h ./include/linux/netdevice.h +--- ../orig-linux-2.6.16.29/include/linux/netdevice.h 2006-09-19 13:59:46.000000000 +0100 ++++ ./include/linux/netdevice.h 2006-09-19 14:05:28.000000000 +0100 @@ -930,10 +930,10 @@ static inline void netif_tx_lock_bh(stru static inline int netif_tx_trylock(struct net_device *dev) diff --git a/patches/linux-2.6.16.13/net-gso-4-kill-warnon.patch b/patches/linux-2.6.16.32/net-gso-4-kill-warnon.patch index caefc4a1f5..86cd7a2b47 100644 --- a/patches/linux-2.6.16.13/net-gso-4-kill-warnon.patch +++ b/patches/linux-2.6.16.32/net-gso-4-kill-warnon.patch @@ -1,8 +1,6 @@ -508c578140642a641bb9b888369719c510ae2a00 -diff --git a/net/core/dev.c b/net/core/dev.c -index e814a89..240773b 100644 ---- a/net/core/dev.c -+++ b/net/core/dev.c +diff -pruN ../orig-linux-2.6.16.29/net/core/dev.c ./net/core/dev.c +--- ../orig-linux-2.6.16.29/net/core/dev.c 2006-09-19 13:59:46.000000000 +0100 ++++ ./net/core/dev.c 2006-09-19 14:05:32.000000000 +0100 @@ -1087,11 +1087,6 @@ int skb_checksum_help(struct sk_buff *sk goto out_set_summed; diff --git a/patches/linux-2.6.16.32/net-gso-5-rcv-mss.patch b/patches/linux-2.6.16.32/net-gso-5-rcv-mss.patch new file mode 100644 index 0000000000..a711d0ee5f --- /dev/null +++ b/patches/linux-2.6.16.32/net-gso-5-rcv-mss.patch @@ -0,0 +1,13 @@ +diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c +index 104af5d..1fa1536 100644 +--- a/net/ipv4/tcp_input.c ++++ b/net/ipv4/tcp_input.c +@@ -127,7 +127,7 @@ static void tcp_measure_rcv_mss(struct s + /* skb->len may jitter because of SACKs, even if peer + * sends good full-sized frames. + */ +- len = skb->len; ++ len = skb_shinfo(skb)->gso_size ?: skb->len; + if (len >= icsk->icsk_ack.rcv_mss) { + icsk->icsk_ack.rcv_mss = len; + } else { diff --git a/patches/linux-2.6.16.32/pci-mmconfig-fix-from-2.6.17.patch b/patches/linux-2.6.16.32/pci-mmconfig-fix-from-2.6.17.patch new file mode 100644 index 0000000000..e4b709362f --- /dev/null +++ b/patches/linux-2.6.16.32/pci-mmconfig-fix-from-2.6.17.patch @@ -0,0 +1,292 @@ +diff -pruN ../orig-linux-2.6.16.29/arch/i386/pci/mmconfig.c ./arch/i386/pci/mmconfig.c +--- ../orig-linux-2.6.16.29/arch/i386/pci/mmconfig.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./arch/i386/pci/mmconfig.c 2006-09-21 09:35:27.000000000 +0100 +@@ -12,14 +12,22 @@ + #include <linux/pci.h> + #include <linux/init.h> + #include <linux/acpi.h> ++#include <asm/e820.h> + #include "pci.h" + ++/* aperture is up to 256MB but BIOS may reserve less */ ++#define MMCONFIG_APER_MIN (2 * 1024*1024) ++#define MMCONFIG_APER_MAX (256 * 1024*1024) ++ ++/* Assume systems with more busses have correct MCFG */ ++#define MAX_CHECK_BUS 16 ++ + #define mmcfg_virt_addr ((void __iomem *) fix_to_virt(FIX_PCIE_MCFG)) + + /* The base address of the last MMCONFIG device accessed */ + static u32 mmcfg_last_accessed_device; + +-static DECLARE_BITMAP(fallback_slots, 32); ++static DECLARE_BITMAP(fallback_slots, MAX_CHECK_BUS*32); + + /* + * Functions for accessing PCI configuration space with MMCONFIG accesses +@@ -29,8 +37,8 @@ static u32 get_base_addr(unsigned int se + int cfg_num = -1; + struct acpi_table_mcfg_config *cfg; + +- if (seg == 0 && bus == 0 && +- test_bit(PCI_SLOT(devfn), fallback_slots)) ++ if (seg == 0 && bus < MAX_CHECK_BUS && ++ test_bit(PCI_SLOT(devfn) + 32*bus, fallback_slots)) + return 0; + + while (1) { +@@ -74,8 +82,10 @@ static int pci_mmcfg_read(unsigned int s + unsigned long flags; + u32 base; + +- if (!value || (bus > 255) || (devfn > 255) || (reg > 4095)) ++ if ((bus > 255) || (devfn > 255) || (reg > 4095)) { ++ *value = -1; + return -EINVAL; ++ } + + base = get_base_addr(seg, bus, devfn); + if (!base) +@@ -146,30 +156,66 @@ static struct pci_raw_ops pci_mmcfg = { + Normally this can be expressed in the MCFG by not listing them + and assigning suitable _SEGs, but this isn't implemented in some BIOS. + Instead try to discover all devices on bus 0 that are unreachable using MM +- and fallback for them. +- We only do this for bus 0/seg 0 */ ++ and fallback for them. */ + static __init void unreachable_devices(void) + { +- int i; ++ int i, k; + unsigned long flags; + +- for (i = 0; i < 32; i++) { +- u32 val1; +- u32 addr; ++ for (k = 0; k < MAX_CHECK_BUS; k++) { ++ for (i = 0; i < 32; i++) { ++ u32 val1; ++ u32 addr; ++ ++ pci_conf1_read(0, k, PCI_DEVFN(i, 0), 0, 4, &val1); ++ if (val1 == 0xffffffff) ++ continue; ++ ++ /* Locking probably not needed, but safer */ ++ spin_lock_irqsave(&pci_config_lock, flags); ++ addr = get_base_addr(0, k, PCI_DEVFN(i, 0)); ++ if (addr != 0) ++ pci_exp_set_dev_base(addr, k, PCI_DEVFN(i, 0)); ++ if (addr == 0 || ++ readl((u32 __iomem *)mmcfg_virt_addr) != val1) { ++ set_bit(i, fallback_slots); ++ printk(KERN_NOTICE ++ "PCI: No mmconfig possible on %x:%x\n", k, i); ++ } ++ spin_unlock_irqrestore(&pci_config_lock, flags); ++ } ++ } ++} + +- pci_conf1_read(0, 0, PCI_DEVFN(i, 0), 0, 4, &val1); +- if (val1 == 0xffffffff) ++/* NB. Ripped from arch/i386/kernel/setup.c for this Xen bugfix patch. */ ++#ifdef CONFIG_XEN ++extern struct e820map machine_e820; ++#define e820 machine_e820 ++#endif ++static int __init ++e820_all_mapped(unsigned long s, unsigned long e, unsigned type) ++{ ++ u64 start = s; ++ u64 end = e; ++ int i; ++ for (i = 0; i < e820.nr_map; i++) { ++ struct e820entry *ei = &e820.map[i]; ++ if (type && ei->type != type) + continue; +- +- /* Locking probably not needed, but safer */ +- spin_lock_irqsave(&pci_config_lock, flags); +- addr = get_base_addr(0, 0, PCI_DEVFN(i, 0)); +- if (addr != 0) +- pci_exp_set_dev_base(addr, 0, PCI_DEVFN(i, 0)); +- if (addr == 0 || readl((u32 __iomem *)mmcfg_virt_addr) != val1) +- set_bit(i, fallback_slots); +- spin_unlock_irqrestore(&pci_config_lock, flags); ++ /* is the region (part) in overlap with the current region ?*/ ++ if (ei->addr >= end || ei->addr + ei->size <= start) ++ continue; ++ /* if the region is at the beginning of <start,end> we move ++ * start to the end of the region since it's ok until there ++ */ ++ if (ei->addr <= start) ++ start = ei->addr + ei->size; ++ /* if start is now at or beyond end, we're done, full ++ * coverage */ ++ if (start >= end) ++ return 1; /* we're done */ + } ++ return 0; + } + + static int __init pci_mmcfg_init(void) +@@ -183,6 +229,15 @@ static int __init pci_mmcfg_init(void) + (pci_mmcfg_config[0].base_address == 0)) + goto out; + ++ if (!e820_all_mapped(pci_mmcfg_config[0].base_address, ++ pci_mmcfg_config[0].base_address + MMCONFIG_APER_MIN, ++ E820_RESERVED)) { ++ printk(KERN_ERR "PCI: BIOS Bug: MCFG area at %x is not E820-reserved\n", ++ pci_mmcfg_config[0].base_address); ++ printk(KERN_ERR "PCI: Not using MMCONFIG.\n"); ++ goto out; ++ } ++ + printk(KERN_INFO "PCI: Using MMCONFIG\n"); + raw_pci_ops = &pci_mmcfg; + pci_probe = (pci_probe & ~PCI_PROBE_MASK) | PCI_PROBE_MMCONF; +diff -pruN ../orig-linux-2.6.16.29/arch/x86_64/pci/mmconfig.c ./arch/x86_64/pci/mmconfig.c +--- ../orig-linux-2.6.16.29/arch/x86_64/pci/mmconfig.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./arch/x86_64/pci/mmconfig.c 2006-09-21 09:35:40.000000000 +0100 +@@ -9,11 +9,19 @@ + #include <linux/init.h> + #include <linux/acpi.h> + #include <linux/bitmap.h> ++#include <asm/e820.h> ++ + #include "pci.h" + +-#define MMCONFIG_APER_SIZE (256*1024*1024) ++/* aperture is up to 256MB but BIOS may reserve less */ ++#define MMCONFIG_APER_MIN (2 * 1024*1024) ++#define MMCONFIG_APER_MAX (256 * 1024*1024) ++ ++/* Verify the first 16 busses. We assume that systems with more busses ++ get MCFG right. */ ++#define MAX_CHECK_BUS 16 + +-static DECLARE_BITMAP(fallback_slots, 32); ++static DECLARE_BITMAP(fallback_slots, 32*MAX_CHECK_BUS); + + /* Static virtual mapping of the MMCONFIG aperture */ + struct mmcfg_virt { +@@ -55,7 +63,8 @@ static char __iomem *get_virt(unsigned i + static char __iomem *pci_dev_base(unsigned int seg, unsigned int bus, unsigned int devfn) + { + char __iomem *addr; +- if (seg == 0 && bus == 0 && test_bit(PCI_SLOT(devfn), &fallback_slots)) ++ if (seg == 0 && bus < MAX_CHECK_BUS && ++ test_bit(32*bus + PCI_SLOT(devfn), fallback_slots)) + return NULL; + addr = get_virt(seg, bus); + if (!addr) +@@ -69,8 +78,10 @@ static int pci_mmcfg_read(unsigned int s + char __iomem *addr; + + /* Why do we have this when nobody checks it. How about a BUG()!? -AK */ +- if (unlikely(!value || (bus > 255) || (devfn > 255) || (reg > 4095))) ++ if (unlikely((bus > 255) || (devfn > 255) || (reg > 4095))) { ++ *value = -1; + return -EINVAL; ++ } + + addr = pci_dev_base(seg, bus, devfn); + if (!addr) +@@ -129,23 +140,56 @@ static struct pci_raw_ops pci_mmcfg = { + Normally this can be expressed in the MCFG by not listing them + and assigning suitable _SEGs, but this isn't implemented in some BIOS. + Instead try to discover all devices on bus 0 that are unreachable using MM +- and fallback for them. +- We only do this for bus 0/seg 0 */ ++ and fallback for them. */ + static __init void unreachable_devices(void) + { +- int i; +- for (i = 0; i < 32; i++) { +- u32 val1; +- char __iomem *addr; ++ int i, k; ++ /* Use the max bus number from ACPI here? */ ++ for (k = 0; k < MAX_CHECK_BUS; k++) { ++ for (i = 0; i < 32; i++) { ++ u32 val1; ++ char __iomem *addr; ++ ++ pci_conf1_read(0, k, PCI_DEVFN(i,0), 0, 4, &val1); ++ if (val1 == 0xffffffff) ++ continue; ++ addr = pci_dev_base(0, k, PCI_DEVFN(i, 0)); ++ if (addr == NULL|| readl(addr) != val1) { ++ set_bit(i + 32*k, fallback_slots); ++ printk(KERN_NOTICE ++ "PCI: No mmconfig possible on device %x:%x\n", ++ k, i); ++ } ++ } ++ } ++} + +- pci_conf1_read(0, 0, PCI_DEVFN(i,0), 0, 4, &val1); +- if (val1 == 0xffffffff) ++/* NB. Ripped from arch/x86_64/kernel/e820.c for this Xen bugfix patch. */ ++#ifdef CONFIG_XEN ++extern struct e820map machine_e820; ++#define e820 machine_e820 ++#endif ++static int __init e820_all_mapped(unsigned long start, unsigned long end, unsigned type) ++{ ++ int i; ++ for (i = 0; i < e820.nr_map; i++) { ++ struct e820entry *ei = &e820.map[i]; ++ if (type && ei->type != type) + continue; +- addr = pci_dev_base(0, 0, PCI_DEVFN(i, 0)); +- if (addr == NULL|| readl(addr) != val1) { +- set_bit(i, &fallback_slots); +- } ++ /* is the region (part) in overlap with the current region ?*/ ++ if (ei->addr >= end || ei->addr + ei->size <= start) ++ continue; ++ ++ /* if the region is at the beginning of <start,end> we move ++ * start to the end of the region since it's ok until there ++ */ ++ if (ei->addr <= start) ++ start = ei->addr + ei->size; ++ /* if start is now at or beyond end, we're done, full coverage */ ++ if (start >= end) ++ return 1; /* we're done */ + } ++ return 0; + } + + static int __init pci_mmcfg_init(void) +@@ -161,6 +205,15 @@ static int __init pci_mmcfg_init(void) + (pci_mmcfg_config[0].base_address == 0)) + return 0; + ++ if (!e820_all_mapped(pci_mmcfg_config[0].base_address, ++ pci_mmcfg_config[0].base_address + MMCONFIG_APER_MIN, ++ E820_RESERVED)) { ++ printk(KERN_ERR "PCI: BIOS Bug: MCFG area at %x is not E820-reserved\n", ++ pci_mmcfg_config[0].base_address); ++ printk(KERN_ERR "PCI: Not using MMCONFIG.\n"); ++ return 0; ++ } ++ + /* RED-PEN i386 doesn't do _nocache right now */ + pci_mmcfg_virt = kmalloc(sizeof(*pci_mmcfg_virt) * pci_mmcfg_config_num, GFP_KERNEL); + if (pci_mmcfg_virt == NULL) { +@@ -169,7 +222,8 @@ static int __init pci_mmcfg_init(void) + } + for (i = 0; i < pci_mmcfg_config_num; ++i) { + pci_mmcfg_virt[i].cfg = &pci_mmcfg_config[i]; +- pci_mmcfg_virt[i].virt = ioremap_nocache(pci_mmcfg_config[i].base_address, MMCONFIG_APER_SIZE); ++ pci_mmcfg_virt[i].virt = ioremap_nocache(pci_mmcfg_config[i].base_address, ++ MMCONFIG_APER_MAX); + if (!pci_mmcfg_virt[i].virt) { + printk("PCI: Cannot map mmconfig aperture for segment %d\n", + pci_mmcfg_config[i].pci_segment_group_number); diff --git a/patches/linux-2.6.16.13/pmd-shared.patch b/patches/linux-2.6.16.32/pmd-shared.patch index 2af0a737f4..f8123a96ba 100644 --- a/patches/linux-2.6.16.13/pmd-shared.patch +++ b/patches/linux-2.6.16.32/pmd-shared.patch @@ -1,6 +1,6 @@ -diff -pruN ../pristine-linux-2.6.16.13/arch/i386/mm/pageattr.c ./arch/i386/mm/pageattr.c ---- ../pristine-linux-2.6.16.13/arch/i386/mm/pageattr.c 2006-05-02 22:38:44.000000000 +0100 -+++ ./arch/i386/mm/pageattr.c 2006-05-04 17:41:40.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/arch/i386/mm/pageattr.c ./arch/i386/mm/pageattr.c +--- ../orig-linux-2.6.16.29/arch/i386/mm/pageattr.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./arch/i386/mm/pageattr.c 2006-09-19 14:05:35.000000000 +0100 @@ -78,7 +78,7 @@ static void set_pmd_pte(pte_t *kpte, uns unsigned long flags; @@ -10,9 +10,9 @@ diff -pruN ../pristine-linux-2.6.16.13/arch/i386/mm/pageattr.c ./arch/i386/mm/pa return; spin_lock_irqsave(&pgd_lock, flags); -diff -pruN ../pristine-linux-2.6.16.13/arch/i386/mm/pgtable.c ./arch/i386/mm/pgtable.c ---- ../pristine-linux-2.6.16.13/arch/i386/mm/pgtable.c 2006-05-02 22:38:44.000000000 +0100 -+++ ./arch/i386/mm/pgtable.c 2006-05-04 17:41:40.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/arch/i386/mm/pgtable.c ./arch/i386/mm/pgtable.c +--- ../orig-linux-2.6.16.29/arch/i386/mm/pgtable.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./arch/i386/mm/pgtable.c 2006-09-19 14:05:35.000000000 +0100 @@ -215,9 +215,10 @@ void pgd_ctor(void *pgd, kmem_cache_t *c spin_lock_irqsave(&pgd_lock, flags); } @@ -85,9 +85,9 @@ diff -pruN ../pristine-linux-2.6.16.13/arch/i386/mm/pgtable.c ./arch/i386/mm/pgt /* in the non-PAE case, free_pgtables() clears user pgd entries */ kmem_cache_free(pgd_cache, pgd); } -diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/pgtable-2level-defs.h ./include/asm-i386/pgtable-2level-defs.h ---- ../pristine-linux-2.6.16.13/include/asm-i386/pgtable-2level-defs.h 2006-05-02 22:38:44.000000000 +0100 -+++ ./include/asm-i386/pgtable-2level-defs.h 2006-05-04 17:41:40.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/asm-i386/pgtable-2level-defs.h ./include/asm-i386/pgtable-2level-defs.h +--- ../orig-linux-2.6.16.29/include/asm-i386/pgtable-2level-defs.h 2006-09-12 19:02:10.000000000 +0100 ++++ ./include/asm-i386/pgtable-2level-defs.h 2006-09-19 14:05:35.000000000 +0100 @@ -1,6 +1,8 @@ #ifndef _I386_PGTABLE_2LEVEL_DEFS_H #define _I386_PGTABLE_2LEVEL_DEFS_H @@ -97,9 +97,9 @@ diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/pgtable-2level-defs.h ./ /* * traditional i386 two-level paging structure: */ -diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/pgtable-3level-defs.h ./include/asm-i386/pgtable-3level-defs.h ---- ../pristine-linux-2.6.16.13/include/asm-i386/pgtable-3level-defs.h 2006-05-02 22:38:44.000000000 +0100 -+++ ./include/asm-i386/pgtable-3level-defs.h 2006-05-04 17:41:40.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/asm-i386/pgtable-3level-defs.h ./include/asm-i386/pgtable-3level-defs.h +--- ../orig-linux-2.6.16.29/include/asm-i386/pgtable-3level-defs.h 2006-09-12 19:02:10.000000000 +0100 ++++ ./include/asm-i386/pgtable-3level-defs.h 2006-09-19 14:05:35.000000000 +0100 @@ -1,6 +1,8 @@ #ifndef _I386_PGTABLE_3LEVEL_DEFS_H #define _I386_PGTABLE_3LEVEL_DEFS_H diff --git a/patches/linux-2.6.16.13/rcu_needs_cpu.patch b/patches/linux-2.6.16.32/rcu_needs_cpu.patch index f2d60f7b02..c8f3b79229 100644 --- a/patches/linux-2.6.16.13/rcu_needs_cpu.patch +++ b/patches/linux-2.6.16.32/rcu_needs_cpu.patch @@ -1,5 +1,17 @@ ---- ../pristine-linux-2.6.16.13/kernel/rcupdate.c 2006-05-02 22:38:44.000000000 +0100 -+++ ./kernel/rcupdate.c 2006-06-09 20:27:45.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/linux/rcupdate.h ./include/linux/rcupdate.h +--- ../orig-linux-2.6.16.29/include/linux/rcupdate.h 2006-09-12 19:02:10.000000000 +0100 ++++ ./include/linux/rcupdate.h 2006-09-19 14:05:39.000000000 +0100 +@@ -134,6 +134,7 @@ static inline void rcu_bh_qsctr_inc(int + } + + extern int rcu_pending(int cpu); ++extern int rcu_needs_cpu(int cpu); + + /** + * rcu_read_lock - mark the beginning of an RCU read-side critical section. +diff -pruN ../orig-linux-2.6.16.29/kernel/rcupdate.c ./kernel/rcupdate.c +--- ../orig-linux-2.6.16.29/kernel/rcupdate.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./kernel/rcupdate.c 2006-09-19 14:05:39.000000000 +0100 @@ -485,6 +485,20 @@ int rcu_pending(int cpu) __rcu_pending(&rcu_bh_ctrlblk, &per_cpu(rcu_bh_data, cpu)); } @@ -21,13 +33,3 @@ void rcu_check_callbacks(int cpu, int user) { if (user || ---- ../pristine-linux-2.6.16.13/include/linux/rcupdate.h 2006-05-02 22:38:44.000000000 +0100 -+++ ./include/linux/rcupdate.h 2006-06-09 20:28:57.000000000 +0100 -@@ -134,6 +134,7 @@ static inline void rcu_bh_qsctr_inc(int - } - - extern int rcu_pending(int cpu); -+extern int rcu_needs_cpu(int cpu); - - /** - * rcu_read_lock - mark the beginning of an RCU read-side critical section. diff --git a/patches/linux-2.6.16.13/rename-TSS_sysenter_esp0-SYSENTER_stack_esp0.patch b/patches/linux-2.6.16.32/rename-TSS_sysenter_esp0-SYSENTER_stack_esp0.patch index 0f318dee73..31788cc3bc 100644 --- a/patches/linux-2.6.16.13/rename-TSS_sysenter_esp0-SYSENTER_stack_esp0.patch +++ b/patches/linux-2.6.16.32/rename-TSS_sysenter_esp0-SYSENTER_stack_esp0.patch @@ -1,6 +1,6 @@ -diff -pruN ../pristine-linux-2.6.16.13/arch/i386/kernel/entry.S ./arch/i386/kernel/entry.S ---- ../pristine-linux-2.6.16.13/arch/i386/kernel/entry.S 2006-05-02 22:38:44.000000000 +0100 -+++ ./arch/i386/kernel/entry.S 2006-05-04 17:41:44.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/arch/i386/kernel/entry.S ./arch/i386/kernel/entry.S +--- ../orig-linux-2.6.16.29/arch/i386/kernel/entry.S 2006-09-12 19:02:10.000000000 +0100 ++++ ./arch/i386/kernel/entry.S 2006-09-19 14:05:44.000000000 +0100 @@ -177,7 +177,7 @@ need_resched: # sysenter call handler stub diff --git a/patches/linux-2.6.16.13/series b/patches/linux-2.6.16.32/series index 63774a0bd7..ef2c35842e 100644 --- a/patches/linux-2.6.16.13/series +++ b/patches/linux-2.6.16.32/series @@ -10,6 +10,8 @@ net-gso-1-check-dodgy.patch net-gso-2-checksum-fix.patch net-gso-3-fix-errorcheck.patch net-gso-4-kill-warnon.patch +net-gso-5-rcv-mss.patch +pci-mmconfig-fix-from-2.6.17.patch pmd-shared.patch rcu_needs_cpu.patch rename-TSS_sysenter_esp0-SYSENTER_stack_esp0.patch @@ -21,3 +23,5 @@ xenoprof-generic.patch x86-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch x86_64-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch x86-elfnote-as-preprocessor-macro.patch +vsnprintf.patch +kasprintf.patch diff --git a/patches/linux-2.6.16.13/smp-alts.patch b/patches/linux-2.6.16.32/smp-alts.patch index 0e0d597da9..fbcd4a29ac 100644 --- a/patches/linux-2.6.16.13/smp-alts.patch +++ b/patches/linux-2.6.16.32/smp-alts.patch @@ -1,6 +1,6 @@ -diff -pruN ../pristine-linux-2.6.16.13/arch/i386/Kconfig ./arch/i386/Kconfig ---- ../pristine-linux-2.6.16.13/arch/i386/Kconfig 2006-05-02 22:38:44.000000000 +0100 -+++ ./arch/i386/Kconfig 2006-05-04 17:41:45.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/arch/i386/Kconfig ./arch/i386/Kconfig +--- ../orig-linux-2.6.16.29/arch/i386/Kconfig 2006-09-12 19:02:10.000000000 +0100 ++++ ./arch/i386/Kconfig 2006-09-19 14:05:48.000000000 +0100 @@ -202,6 +202,19 @@ config SMP If you don't know what to do here, say N. @@ -21,9 +21,9 @@ diff -pruN ../pristine-linux-2.6.16.13/arch/i386/Kconfig ./arch/i386/Kconfig config NR_CPUS int "Maximum number of CPUs (2-255)" range 2 255 -diff -pruN ../pristine-linux-2.6.16.13/arch/i386/kernel/Makefile ./arch/i386/kernel/Makefile ---- ../pristine-linux-2.6.16.13/arch/i386/kernel/Makefile 2006-05-02 22:38:44.000000000 +0100 -+++ ./arch/i386/kernel/Makefile 2006-05-04 17:41:45.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/arch/i386/kernel/Makefile ./arch/i386/kernel/Makefile +--- ../orig-linux-2.6.16.29/arch/i386/kernel/Makefile 2006-09-12 19:02:10.000000000 +0100 ++++ ./arch/i386/kernel/Makefile 2006-09-19 14:05:48.000000000 +0100 @@ -37,6 +37,7 @@ obj-$(CONFIG_EFI) += efi.o efi_stub.o obj-$(CONFIG_DOUBLEFAULT) += doublefault.o obj-$(CONFIG_VM86) += vm86.o @@ -32,9 +32,9 @@ diff -pruN ../pristine-linux-2.6.16.13/arch/i386/kernel/Makefile ./arch/i386/ker EXTRA_AFLAGS := -traditional -diff -pruN ../pristine-linux-2.6.16.13/arch/i386/kernel/smpalts.c ./arch/i386/kernel/smpalts.c ---- ../pristine-linux-2.6.16.13/arch/i386/kernel/smpalts.c 1970-01-01 01:00:00.000000000 +0100 -+++ ./arch/i386/kernel/smpalts.c 2006-05-04 17:41:45.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/arch/i386/kernel/smpalts.c ./arch/i386/kernel/smpalts.c +--- ../orig-linux-2.6.16.29/arch/i386/kernel/smpalts.c 1970-01-01 01:00:00.000000000 +0100 ++++ ./arch/i386/kernel/smpalts.c 2006-09-19 14:05:48.000000000 +0100 @@ -0,0 +1,85 @@ +#include <linux/kernel.h> +#include <asm/system.h> @@ -121,9 +121,9 @@ diff -pruN ../pristine-linux-2.6.16.13/arch/i386/kernel/smpalts.c ./arch/i386/ke + asm volatile ("jmp 1f\n1:"); + mb(); +} -diff -pruN ../pristine-linux-2.6.16.13/arch/i386/kernel/smpboot.c ./arch/i386/kernel/smpboot.c ---- ../pristine-linux-2.6.16.13/arch/i386/kernel/smpboot.c 2006-05-02 22:38:44.000000000 +0100 -+++ ./arch/i386/kernel/smpboot.c 2006-05-04 17:41:45.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/arch/i386/kernel/smpboot.c ./arch/i386/kernel/smpboot.c +--- ../orig-linux-2.6.16.29/arch/i386/kernel/smpboot.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./arch/i386/kernel/smpboot.c 2006-09-19 14:05:48.000000000 +0100 @@ -1218,6 +1218,11 @@ static void __init smp_boot_cpus(unsigne if (max_cpus <= cpucount+1) continue; @@ -148,9 +148,9 @@ diff -pruN ../pristine-linux-2.6.16.13/arch/i386/kernel/smpboot.c ./arch/i386/ke local_irq_enable(); per_cpu(cpu_state, cpu) = CPU_UP_PREPARE; /* Unleash the CPU! */ -diff -pruN ../pristine-linux-2.6.16.13/arch/i386/kernel/vmlinux.lds.S ./arch/i386/kernel/vmlinux.lds.S ---- ../pristine-linux-2.6.16.13/arch/i386/kernel/vmlinux.lds.S 2006-05-02 22:38:44.000000000 +0100 -+++ ./arch/i386/kernel/vmlinux.lds.S 2006-05-04 17:41:45.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/arch/i386/kernel/vmlinux.lds.S ./arch/i386/kernel/vmlinux.lds.S +--- ../orig-linux-2.6.16.29/arch/i386/kernel/vmlinux.lds.S 2006-09-12 19:02:10.000000000 +0100 ++++ ./arch/i386/kernel/vmlinux.lds.S 2006-09-19 14:05:48.000000000 +0100 @@ -34,6 +34,13 @@ SECTIONS __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) { *(__ex_table) } __stop___ex_table = .; @@ -165,9 +165,9 @@ diff -pruN ../pristine-linux-2.6.16.13/arch/i386/kernel/vmlinux.lds.S ./arch/i38 RODATA /* writeable */ -diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/atomic.h ./include/asm-i386/atomic.h ---- ../pristine-linux-2.6.16.13/include/asm-i386/atomic.h 2006-05-02 22:38:44.000000000 +0100 -+++ ./include/asm-i386/atomic.h 2006-05-04 17:41:45.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/asm-i386/atomic.h ./include/asm-i386/atomic.h +--- ../orig-linux-2.6.16.29/include/asm-i386/atomic.h 2006-09-12 19:02:10.000000000 +0100 ++++ ./include/asm-i386/atomic.h 2006-09-19 14:05:48.000000000 +0100 @@ -4,18 +4,13 @@ #include <linux/config.h> #include <linux/compiler.h> @@ -188,9 +188,9 @@ diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/atomic.h ./include/asm-i /* * Make sure gcc doesn't try to be clever and move things around * on us. We need to use _exactly_ the address the user gave us, -diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/bitops.h ./include/asm-i386/bitops.h ---- ../pristine-linux-2.6.16.13/include/asm-i386/bitops.h 2006-05-02 22:38:44.000000000 +0100 -+++ ./include/asm-i386/bitops.h 2006-05-04 17:41:45.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/asm-i386/bitops.h ./include/asm-i386/bitops.h +--- ../orig-linux-2.6.16.29/include/asm-i386/bitops.h 2006-09-12 19:02:10.000000000 +0100 ++++ ./include/asm-i386/bitops.h 2006-09-19 14:05:48.000000000 +0100 @@ -7,6 +7,7 @@ #include <linux/config.h> @@ -266,9 +266,9 @@ diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/bitops.h ./include/asm-i "btcl %2,%1\n\tsbbl %0,%0" :"=r" (oldbit),"+m" (ADDR) :"Ir" (nr) : "memory"); -diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/futex.h ./include/asm-i386/futex.h ---- ../pristine-linux-2.6.16.13/include/asm-i386/futex.h 2006-05-02 22:38:44.000000000 +0100 -+++ ./include/asm-i386/futex.h 2006-05-04 17:41:45.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/asm-i386/futex.h ./include/asm-i386/futex.h +--- ../orig-linux-2.6.16.29/include/asm-i386/futex.h 2006-09-12 19:02:10.000000000 +0100 ++++ ./include/asm-i386/futex.h 2006-09-19 14:05:48.000000000 +0100 @@ -28,7 +28,7 @@ "1: movl %2, %0\n\ movl %0, %3\n" \ @@ -287,9 +287,9 @@ diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/futex.h ./include/asm-i3 oldval, uaddr, oparg); break; case FUTEX_OP_OR: -diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/rwsem.h ./include/asm-i386/rwsem.h ---- ../pristine-linux-2.6.16.13/include/asm-i386/rwsem.h 2006-05-02 22:38:44.000000000 +0100 -+++ ./include/asm-i386/rwsem.h 2006-05-04 17:41:45.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/asm-i386/rwsem.h ./include/asm-i386/rwsem.h +--- ../orig-linux-2.6.16.29/include/asm-i386/rwsem.h 2006-09-12 19:02:10.000000000 +0100 ++++ ./include/asm-i386/rwsem.h 2006-09-19 14:05:48.000000000 +0100 @@ -40,6 +40,7 @@ #include <linux/list.h> @@ -370,9 +370,9 @@ diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/rwsem.h ./include/asm-i3 : "+r"(tmp), "=m"(sem->count) : "r"(sem), "m"(sem->count) : "memory"); -diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/smp_alt.h ./include/asm-i386/smp_alt.h ---- ../pristine-linux-2.6.16.13/include/asm-i386/smp_alt.h 1970-01-01 01:00:00.000000000 +0100 -+++ ./include/asm-i386/smp_alt.h 2006-05-04 17:41:45.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/asm-i386/smp_alt.h ./include/asm-i386/smp_alt.h +--- ../orig-linux-2.6.16.29/include/asm-i386/smp_alt.h 1970-01-01 01:00:00.000000000 +0100 ++++ ./include/asm-i386/smp_alt.h 2006-09-19 14:05:48.000000000 +0100 @@ -0,0 +1,32 @@ +#ifndef __ASM_SMP_ALT_H__ +#define __ASM_SMP_ALT_H__ @@ -406,9 +406,9 @@ diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/smp_alt.h ./include/asm- +#endif + +#endif /* __ASM_SMP_ALT_H__ */ -diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/spinlock.h ./include/asm-i386/spinlock.h ---- ../pristine-linux-2.6.16.13/include/asm-i386/spinlock.h 2006-05-02 22:38:44.000000000 +0100 -+++ ./include/asm-i386/spinlock.h 2006-05-04 17:41:45.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/asm-i386/spinlock.h ./include/asm-i386/spinlock.h +--- ../orig-linux-2.6.16.29/include/asm-i386/spinlock.h 2006-09-12 19:02:10.000000000 +0100 ++++ ./include/asm-i386/spinlock.h 2006-09-19 14:05:48.000000000 +0100 @@ -6,6 +6,7 @@ #include <asm/page.h> #include <linux/config.h> @@ -488,9 +488,9 @@ diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/spinlock.h ./include/asm : "=m" (rw->lock) : : "memory"); } -diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/system.h ./include/asm-i386/system.h ---- ../pristine-linux-2.6.16.13/include/asm-i386/system.h 2006-05-02 22:38:44.000000000 +0100 -+++ ./include/asm-i386/system.h 2006-05-04 17:41:45.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/asm-i386/system.h ./include/asm-i386/system.h +--- ../orig-linux-2.6.16.29/include/asm-i386/system.h 2006-09-12 19:02:10.000000000 +0100 ++++ ./include/asm-i386/system.h 2006-09-19 14:05:48.000000000 +0100 @@ -5,7 +5,7 @@ #include <linux/kernel.h> #include <asm/segment.h> diff --git a/patches/linux-2.6.16.13/tpm_plugin_2.6.17.patch b/patches/linux-2.6.16.32/tpm_plugin_2.6.17.patch index df0bc02e78..71a22017b5 100644 --- a/patches/linux-2.6.16.13/tpm_plugin_2.6.17.patch +++ b/patches/linux-2.6.16.32/tpm_plugin_2.6.17.patch @@ -1,6 +1,6 @@ -diff -pruN ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_atmel.c ./drivers/char/tpm/tpm_atmel.c ---- ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_atmel.c 2006-06-26 18:05:03.000000000 -0400 -+++ ./drivers/char/tpm/tpm_atmel.c 2006-06-26 18:16:33.000000000 -0400 +diff -pruN ../orig-linux-2.6.16.29/drivers/char/tpm/tpm_atmel.c ./drivers/char/tpm/tpm_atmel.c +--- ../orig-linux-2.6.16.29/drivers/char/tpm/tpm_atmel.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./drivers/char/tpm/tpm_atmel.c 2006-09-19 14:05:52.000000000 +0100 @@ -47,12 +47,12 @@ static int tpm_atml_recv(struct tpm_chip return -EIO; @@ -151,9 +151,9 @@ diff -pruN ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_atmel.c ./drivers/ch err_unreg_drv: driver_unregister(&atml_drv); return rc; -diff -pruN ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_atmel.h ./drivers/char/tpm/tpm_atmel.h ---- ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_atmel.h 2006-06-26 18:05:03.000000000 -0400 -+++ ./drivers/char/tpm/tpm_atmel.h 2006-06-26 18:16:33.000000000 -0400 +diff -pruN ../orig-linux-2.6.16.29/drivers/char/tpm/tpm_atmel.h ./drivers/char/tpm/tpm_atmel.h +--- ../orig-linux-2.6.16.29/drivers/char/tpm/tpm_atmel.h 2006-09-12 19:02:10.000000000 +0100 ++++ ./drivers/char/tpm/tpm_atmel.h 2006-09-19 14:05:52.000000000 +0100 @@ -28,13 +28,12 @@ #define atmel_request_region request_mem_region #define atmel_release_region release_mem_region @@ -214,9 +214,9 @@ diff -pruN ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_atmel.h ./drivers/ch + return ioport_map(*base, *region_size); } #endif -diff -pruN ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_bios.c ./drivers/char/tpm/tpm_bios.c ---- ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_bios.c 2006-06-26 18:05:03.000000000 -0400 -+++ ./drivers/char/tpm/tpm_bios.c 2006-06-26 18:16:33.000000000 -0400 +diff -pruN ../orig-linux-2.6.16.29/drivers/char/tpm/tpm_bios.c ./drivers/char/tpm/tpm_bios.c +--- ../orig-linux-2.6.16.29/drivers/char/tpm/tpm_bios.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./drivers/char/tpm/tpm_bios.c 2006-09-19 14:05:52.000000000 +0100 @@ -29,6 +29,11 @@ #define MAX_TEXT_EVENT 1000 /* Max event string length */ #define ACPI_TCPA_SIG "TCPA" /* 0x41504354 /'TCPA' */ @@ -469,9 +469,9 @@ diff -pruN ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_bios.c ./drivers/cha return 0; } -diff -pruN ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_infineon.c ./drivers/char/tpm/tpm_infineon.c ---- ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_infineon.c 2006-06-26 18:05:03.000000000 -0400 -+++ ./drivers/char/tpm/tpm_infineon.c 2006-06-26 18:16:33.000000000 -0400 +diff -pruN ../orig-linux-2.6.16.29/drivers/char/tpm/tpm_infineon.c ./drivers/char/tpm/tpm_infineon.c +--- ../orig-linux-2.6.16.29/drivers/char/tpm/tpm_infineon.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./drivers/char/tpm/tpm_infineon.c 2006-09-19 14:05:52.000000000 +0100 @@ -15,6 +15,7 @@ * License. */ @@ -684,9 +684,9 @@ diff -pruN ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_infineon.c ./drivers -MODULE_VERSION("1.7"); +MODULE_VERSION("1.8"); MODULE_LICENSE("GPL"); -diff -pruN ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_nsc.c ./drivers/char/tpm/tpm_nsc.c ---- ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_nsc.c 2006-06-26 18:05:03.000000000 -0400 -+++ ./drivers/char/tpm/tpm_nsc.c 2006-06-26 18:16:33.000000000 -0400 +diff -pruN ../orig-linux-2.6.16.29/drivers/char/tpm/tpm_nsc.c ./drivers/char/tpm/tpm_nsc.c +--- ../orig-linux-2.6.16.29/drivers/char/tpm/tpm_nsc.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./drivers/char/tpm/tpm_nsc.c 2006-09-19 14:05:52.000000000 +0100 @@ -71,7 +71,7 @@ static int wait_for_stat(struct tpm_chip unsigned long stop; @@ -874,9 +874,9 @@ diff -pruN ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_nsc.c ./drivers/char err_unreg_dev: platform_device_unregister(pdev); err_free_dev: -diff -pruN ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_tis.c ./drivers/char/tpm/tpm_tis.c ---- ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_tis.c 1969-12-31 19:00:00.000000000 -0500 -+++ ./drivers/char/tpm/tpm_tis.c 2006-06-26 18:16:33.000000000 -0400 +diff -pruN ../orig-linux-2.6.16.29/drivers/char/tpm/tpm_tis.c ./drivers/char/tpm/tpm_tis.c +--- ../orig-linux-2.6.16.29/drivers/char/tpm/tpm_tis.c 1970-01-01 01:00:00.000000000 +0100 ++++ ./drivers/char/tpm/tpm_tis.c 2006-09-19 14:05:52.000000000 +0100 @@ -0,0 +1,665 @@ +/* + * Copyright (C) 2005, 2006 IBM Corporation @@ -1543,4 +1543,3 @@ diff -pruN ../pristine-linux-2.6.16.13/drivers/char/tpm/tpm_tis.c ./drivers/char +MODULE_DESCRIPTION("TPM Driver"); +MODULE_VERSION("2.0"); +MODULE_LICENSE("GPL"); - diff --git a/patches/linux-2.6.16.32/vsnprintf.patch b/patches/linux-2.6.16.32/vsnprintf.patch new file mode 100644 index 0000000000..69a93fa5c5 --- /dev/null +++ b/patches/linux-2.6.16.32/vsnprintf.patch @@ -0,0 +1,211 @@ +commit f796937a062c7aeb44cd0e75e1586c8543634a7d +Author: Jeremy Fitzhardinge <jeremy@xensource.com> +Date: Sun Jun 25 05:49:17 2006 -0700 + + [PATCH] Fix bounds check in vsnprintf, to allow for a 0 size and NULL buffer + + This change allows callers to use a 0-byte buffer and a NULL buffer pointer + with vsnprintf, so it can be used to determine how large the resulting + formatted string will be. + + Previously the code effectively treated a size of 0 as a size of 4G (on + 32-bit systems), with other checks preventing it from actually trying to + emit the string - but the terminal \0 would still be written, which would + crash if the buffer is NULL. + + This change changes the boundary check so that 'end' points to the putative + location of the terminal '\0', which is only written if size > 0. + + vsnprintf still allows the buffer size to be set very large, to allow + unbounded buffer sizes (to implement sprintf, etc). + + [akpm@osdl.org: fix long-vs-longlong confusion] + Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com> + Signed-off-by: Chris Wright <chrisw@sous-sol.org> + Signed-off-by: Andrew Morton <akpm@osdl.org> + Signed-off-by: Linus Torvalds <torvalds@osdl.org> + +diff --git a/lib/vsprintf.c b/lib/vsprintf.c +index b07db5c..f595947 100644 +--- a/lib/vsprintf.c ++++ b/lib/vsprintf.c +@@ -187,49 +187,49 @@ static char * number(char * buf, char * + size -= precision; + if (!(type&(ZEROPAD+LEFT))) { + while(size-->0) { +- if (buf <= end) ++ if (buf < end) + *buf = ' '; + ++buf; + } + } + if (sign) { +- if (buf <= end) ++ if (buf < end) + *buf = sign; + ++buf; + } + if (type & SPECIAL) { + if (base==8) { +- if (buf <= end) ++ if (buf < end) + *buf = '0'; + ++buf; + } else if (base==16) { +- if (buf <= end) ++ if (buf < end) + *buf = '0'; + ++buf; +- if (buf <= end) ++ if (buf < end) + *buf = digits[33]; + ++buf; + } + } + if (!(type & LEFT)) { + while (size-- > 0) { +- if (buf <= end) ++ if (buf < end) + *buf = c; + ++buf; + } + } + while (i < precision--) { +- if (buf <= end) ++ if (buf < end) + *buf = '0'; + ++buf; + } + while (i-- > 0) { +- if (buf <= end) ++ if (buf < end) + *buf = tmp[i]; + ++buf; + } + while (size-- > 0) { +- if (buf <= end) ++ if (buf < end) + *buf = ' '; + ++buf; + } +@@ -272,7 +272,8 @@ int vsnprintf(char *buf, size_t size, co + /* 'z' changed to 'Z' --davidm 1/25/99 */ + /* 't' added for ptrdiff_t */ + +- /* Reject out-of-range values early */ ++ /* Reject out-of-range values early. Large positive sizes are ++ used for unknown buffer sizes. */ + if (unlikely((int) size < 0)) { + /* There can be only one.. */ + static int warn = 1; +@@ -282,16 +283,17 @@ int vsnprintf(char *buf, size_t size, co + } + + str = buf; +- end = buf + size - 1; ++ end = buf + size; + +- if (end < buf - 1) { +- end = ((void *) -1); +- size = end - buf + 1; ++ /* Make sure end is always >= buf */ ++ if (end < buf) { ++ end = ((void *)-1); ++ size = end - buf; + } + + for (; *fmt ; ++fmt) { + if (*fmt != '%') { +- if (str <= end) ++ if (str < end) + *str = *fmt; + ++str; + continue; +@@ -357,17 +359,17 @@ int vsnprintf(char *buf, size_t size, co + case 'c': + if (!(flags & LEFT)) { + while (--field_width > 0) { +- if (str <= end) ++ if (str < end) + *str = ' '; + ++str; + } + } + c = (unsigned char) va_arg(args, int); +- if (str <= end) ++ if (str < end) + *str = c; + ++str; + while (--field_width > 0) { +- if (str <= end) ++ if (str < end) + *str = ' '; + ++str; + } +@@ -382,18 +384,18 @@ int vsnprintf(char *buf, size_t size, co + + if (!(flags & LEFT)) { + while (len < field_width--) { +- if (str <= end) ++ if (str < end) + *str = ' '; + ++str; + } + } + for (i = 0; i < len; ++i) { +- if (str <= end) ++ if (str < end) + *str = *s; + ++str; ++s; + } + while (len < field_width--) { +- if (str <= end) ++ if (str < end) + *str = ' '; + ++str; + } +@@ -426,7 +428,7 @@ int vsnprintf(char *buf, size_t size, co + continue; + + case '%': +- if (str <= end) ++ if (str < end) + *str = '%'; + ++str; + continue; +@@ -449,11 +451,11 @@ int vsnprintf(char *buf, size_t size, co + break; + + default: +- if (str <= end) ++ if (str < end) + *str = '%'; + ++str; + if (*fmt) { +- if (str <= end) ++ if (str < end) + *str = *fmt; + ++str; + } else { +@@ -483,14 +485,13 @@ int vsnprintf(char *buf, size_t size, co + str = number(str, end, num, base, + field_width, precision, flags); + } +- if (str <= end) +- *str = '\0'; +- else if (size > 0) +- /* don't write out a null byte if the buf size is zero */ +- *end = '\0'; +- /* the trailing null byte doesn't count towards the total +- * ++str; +- */ ++ if (size > 0) { ++ if (str < end) ++ *str = '\0'; ++ else ++ *end = '\0'; ++ } ++ /* the trailing null byte doesn't count towards the total */ + return str-buf; + } + diff --git a/patches/linux-2.6.16.13/x86-elfnote-as-preprocessor-macro.patch b/patches/linux-2.6.16.32/x86-elfnote-as-preprocessor-macro.patch index 208573b424..3dcae42ffd 100644 --- a/patches/linux-2.6.16.13/x86-elfnote-as-preprocessor-macro.patch +++ b/patches/linux-2.6.16.32/x86-elfnote-as-preprocessor-macro.patch @@ -1,7 +1,6 @@ - -diff -r 4b7cd997c08f include/linux/elfnote.h ---- a/include/linux/elfnote.h Wed Aug 23 11:48:46 2006 +0100 -+++ b/include/linux/elfnote.h Wed Aug 23 12:44:27 2006 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/linux/elfnote.h ./include/linux/elfnote.h +--- ../orig-linux-2.6.16.29/include/linux/elfnote.h 2006-09-19 14:06:10.000000000 +0100 ++++ ./include/linux/elfnote.h 2006-09-19 14:06:20.000000000 +0100 @@ -31,22 +31,24 @@ /* * Generate a structure with the same shape as Elf{32,64}_Nhdr (which diff --git a/patches/linux-2.6.16.13/x86-increase-interrupt-vector-range.patch b/patches/linux-2.6.16.32/x86-increase-interrupt-vector-range.patch index 1bff3be41e..0ac84e4aca 100644 --- a/patches/linux-2.6.16.13/x86-increase-interrupt-vector-range.patch +++ b/patches/linux-2.6.16.32/x86-increase-interrupt-vector-range.patch @@ -1,6 +1,6 @@ -diff -pruN ../pristine-linux-2.6.16.13/arch/i386/kernel/entry.S ./arch/i386/kernel/entry.S ---- ../pristine-linux-2.6.16.13/arch/i386/kernel/entry.S 2006-05-02 22:38:44.000000000 +0100 -+++ ./arch/i386/kernel/entry.S 2006-05-04 17:41:49.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/arch/i386/kernel/entry.S ./arch/i386/kernel/entry.S +--- ../orig-linux-2.6.16.29/arch/i386/kernel/entry.S 2006-09-19 14:05:44.000000000 +0100 ++++ ./arch/i386/kernel/entry.S 2006-09-19 14:05:56.000000000 +0100 @@ -406,7 +406,7 @@ vector=0 ENTRY(irq_entries_start) .rept NR_IRQS @@ -19,9 +19,9 @@ diff -pruN ../pristine-linux-2.6.16.13/arch/i386/kernel/entry.S ./arch/i386/kern SAVE_ALL \ movl %esp,%eax; \ call smp_/**/name; \ -diff -pruN ../pristine-linux-2.6.16.13/arch/i386/kernel/irq.c ./arch/i386/kernel/irq.c ---- ../pristine-linux-2.6.16.13/arch/i386/kernel/irq.c 2006-05-02 22:38:44.000000000 +0100 -+++ ./arch/i386/kernel/irq.c 2006-05-04 17:41:49.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/arch/i386/kernel/irq.c ./arch/i386/kernel/irq.c +--- ../orig-linux-2.6.16.29/arch/i386/kernel/irq.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./arch/i386/kernel/irq.c 2006-09-19 14:05:56.000000000 +0100 @@ -53,8 +53,8 @@ static union irq_ctx *softirq_ctx[NR_CPU */ fastcall unsigned int do_IRQ(struct pt_regs *regs) @@ -33,10 +33,10 @@ diff -pruN ../pristine-linux-2.6.16.13/arch/i386/kernel/irq.c ./arch/i386/kernel #ifdef CONFIG_4KSTACKS union irq_ctx *curctx, *irqctx; u32 *isp; -diff -pruN ../pristine-linux-2.6.16.13/arch/x86_64/kernel/entry.S ./arch/x86_64/kernel/entry.S ---- ../pristine-linux-2.6.16.13/arch/x86_64/kernel/entry.S 2006-05-02 22:38:44.000000000 +0100 -+++ ./arch/x86_64/kernel/entry.S 2006-05-04 17:41:49.000000000 +0100 -@@ -601,7 +601,7 @@ retint_kernel: +diff -pruN ../orig-linux-2.6.16.29/arch/x86_64/kernel/entry.S ./arch/x86_64/kernel/entry.S +--- ../orig-linux-2.6.16.29/arch/x86_64/kernel/entry.S 2006-09-12 19:02:10.000000000 +0100 ++++ ./arch/x86_64/kernel/entry.S 2006-09-19 14:05:56.000000000 +0100 +@@ -596,7 +596,7 @@ retint_kernel: */ .macro apicinterrupt num,func INTR_FRAME @@ -45,9 +45,9 @@ diff -pruN ../pristine-linux-2.6.16.13/arch/x86_64/kernel/entry.S ./arch/x86_64/ CFI_ADJUST_CFA_OFFSET 8 interrupt \func jmp ret_from_intr -diff -pruN ../pristine-linux-2.6.16.13/arch/x86_64/kernel/irq.c ./arch/x86_64/kernel/irq.c ---- ../pristine-linux-2.6.16.13/arch/x86_64/kernel/irq.c 2006-05-02 22:38:44.000000000 +0100 -+++ ./arch/x86_64/kernel/irq.c 2006-05-04 17:41:49.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/arch/x86_64/kernel/irq.c ./arch/x86_64/kernel/irq.c +--- ../orig-linux-2.6.16.29/arch/x86_64/kernel/irq.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./arch/x86_64/kernel/irq.c 2006-09-19 14:05:56.000000000 +0100 @@ -96,8 +96,8 @@ skip: */ asmlinkage unsigned int do_IRQ(struct pt_regs *regs) @@ -59,9 +59,9 @@ diff -pruN ../pristine-linux-2.6.16.13/arch/x86_64/kernel/irq.c ./arch/x86_64/ke exit_idle(); irq_enter(); -diff -pruN ../pristine-linux-2.6.16.13/arch/x86_64/kernel/smp.c ./arch/x86_64/kernel/smp.c ---- ../pristine-linux-2.6.16.13/arch/x86_64/kernel/smp.c 2006-05-02 22:38:44.000000000 +0100 -+++ ./arch/x86_64/kernel/smp.c 2006-05-04 17:41:49.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/arch/x86_64/kernel/smp.c ./arch/x86_64/kernel/smp.c +--- ../orig-linux-2.6.16.29/arch/x86_64/kernel/smp.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./arch/x86_64/kernel/smp.c 2006-09-19 14:05:56.000000000 +0100 @@ -135,10 +135,10 @@ asmlinkage void smp_invalidate_interrupt cpu = smp_processor_id(); @@ -75,9 +75,9 @@ diff -pruN ../pristine-linux-2.6.16.13/arch/x86_64/kernel/smp.c ./arch/x86_64/ke f = &per_cpu(flush_state, sender); if (!cpu_isset(cpu, f->flush_cpumask)) -diff -pruN ../pristine-linux-2.6.16.13/include/asm-x86_64/hw_irq.h ./include/asm-x86_64/hw_irq.h ---- ../pristine-linux-2.6.16.13/include/asm-x86_64/hw_irq.h 2006-05-02 22:38:44.000000000 +0100 -+++ ./include/asm-x86_64/hw_irq.h 2006-05-04 17:41:49.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/include/asm-x86_64/hw_irq.h ./include/asm-x86_64/hw_irq.h +--- ../orig-linux-2.6.16.29/include/asm-x86_64/hw_irq.h 2006-09-12 19:02:10.000000000 +0100 ++++ ./include/asm-x86_64/hw_irq.h 2006-09-19 14:05:56.000000000 +0100 @@ -127,7 +127,7 @@ asmlinkage void IRQ_NAME(nr); \ __asm__( \ "\n.p2align\n" \ diff --git a/patches/linux-2.6.16.13/x86-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch b/patches/linux-2.6.16.32/x86-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch index 6f2422f517..1047ee417c 100644 --- a/patches/linux-2.6.16.13/x86-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch +++ b/patches/linux-2.6.16.32/x86-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch @@ -1,37 +1,7 @@ -Taken from 2.6.18-rc4-mm1. - -From: Jeremy Fitzhardinge <jeremy@xensource.com> - -This patch will pack any .note.* section into a PT_NOTE segment in the output -file. - -To do this, we tell ld that we need a PT_NOTE segment. This requires us to -start explicitly mapping sections to segments, so we also need to explicitly -create PT_LOAD segments for text and data, and map the sections to them -appropriately. Fortunately, each section will default to its previous -section's segment, so it doesn't take many changes to vmlinux.lds.S. - -This only changes i386 for now, but I presume the corresponding changes for -other architectures will be as simple. - -This change also adds <linux/elfnote.h>, which defines C and Assembler macros -for actually creating ELF notes. - -Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com> -Cc: Eric W. Biederman <ebiederm@xmission.com> -Cc: Hollis Blanchard <hollisb@us.ibm.com> -Signed-off-by: Andrew Morton <akpm@osdl.org> ---- - - arch/i386/kernel/vmlinux.lds.S | 12 +++ - include/asm-generic/vmlinux.lds.h | 3 - include/linux/elfnote.h | 88 ++++++++++++++++++++++++++++ - 3 files changed, 101 insertions(+), 2 deletions(-) - -diff -puN arch/i386/kernel/vmlinux.lds.S~x86-put-note-sections-into-a-pt_note-segment-in-vmlinux arch/i386/kernel/vmlinux.lds.S ---- a/arch/i386/kernel/vmlinux.lds.S~x86-put-note-sections-into-a-pt_note-segment-in-vmlinux -+++ a/arch/i386/kernel/vmlinux.lds.S -@@ -13,6 +13,12 @@ OUTPUT_FORMAT("elf32-i386", "elf32-i386" +diff -pruN ../orig-linux-2.6.16.29/arch/i386/kernel/vmlinux.lds.S ./arch/i386/kernel/vmlinux.lds.S +--- ../orig-linux-2.6.16.29/arch/i386/kernel/vmlinux.lds.S 2006-09-19 14:05:48.000000000 +0100 ++++ ./arch/i386/kernel/vmlinux.lds.S 2006-09-19 14:06:10.000000000 +0100 +@@ -12,6 +12,12 @@ OUTPUT_FORMAT("elf32-i386", "elf32-i386" OUTPUT_ARCH(i386) ENTRY(phys_startup_32) jiffies = jiffies_64; @@ -44,7 +14,7 @@ diff -puN arch/i386/kernel/vmlinux.lds.S~x86-put-note-sections-into-a-pt_note-se SECTIONS { . = __KERNEL_START; -@@ -26,7 +32,7 @@ SECTIONS +@@ -25,7 +31,7 @@ SECTIONS KPROBES_TEXT *(.fixup) *(.gnu.warning) @@ -53,7 +23,7 @@ diff -puN arch/i386/kernel/vmlinux.lds.S~x86-put-note-sections-into-a-pt_note-se _etext = .; /* End of text section */ -@@ -50,7 +56,7 @@ SECTIONS +@@ -47,7 +53,7 @@ SECTIONS .data : AT(ADDR(.data) - LOAD_OFFSET) { /* Data */ *(.data) CONSTRUCTORS @@ -62,26 +32,26 @@ diff -puN arch/i386/kernel/vmlinux.lds.S~x86-put-note-sections-into-a-pt_note-se . = ALIGN(4096); __nosave_begin = .; -@@ -186,4 +192,6 @@ SECTIONS +@@ -154,4 +160,6 @@ SECTIONS STABS_DEBUG DWARF_DEBUG + + NOTES } -diff -puN include/asm-generic/vmlinux.lds.h~x86-put-note-sections-into-a-pt_note-segment-in-vmlinux include/asm-generic/vmlinux.lds.h ---- a/include/asm-generic/vmlinux.lds.h~x86-put-note-sections-into-a-pt_note-segment-in-vmlinux -+++ a/include/asm-generic/vmlinux.lds.h -@@ -194,3 +194,6 @@ +diff -pruN ../orig-linux-2.6.16.29/include/asm-generic/vmlinux.lds.h ./include/asm-generic/vmlinux.lds.h +--- ../orig-linux-2.6.16.29/include/asm-generic/vmlinux.lds.h 2006-09-12 19:02:10.000000000 +0100 ++++ ./include/asm-generic/vmlinux.lds.h 2006-09-19 14:06:10.000000000 +0100 +@@ -152,3 +152,6 @@ .stab.index 0 : { *(.stab.index) } \ .stab.indexstr 0 : { *(.stab.indexstr) } \ .comment 0 : { *(.comment) } + +#define NOTES \ + .notes : { *(.note.*) } :note -diff -puN /dev/null include/linux/elfnote.h ---- /dev/null -+++ a/include/linux/elfnote.h +diff -pruN ../orig-linux-2.6.16.29/include/linux/elfnote.h ./include/linux/elfnote.h +--- ../orig-linux-2.6.16.29/include/linux/elfnote.h 1970-01-01 01:00:00.000000000 +0100 ++++ ./include/linux/elfnote.h 2006-09-19 14:06:10.000000000 +0100 @@ -0,0 +1,88 @@ +#ifndef _LINUX_ELFNOTE_H +#define _LINUX_ELFNOTE_H @@ -171,4 +141,3 @@ diff -puN /dev/null include/linux/elfnote.h +#endif /* __ASSEMBLER__ */ + +#endif /* _LINUX_ELFNOTE_H */ -_ diff --git a/patches/linux-2.6.16.13/x86_64-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch b/patches/linux-2.6.16.32/x86_64-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch index 9c0cd81d76..7e44d833b4 100644 --- a/patches/linux-2.6.16.13/x86_64-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch +++ b/patches/linux-2.6.16.32/x86_64-put-note-sections-into-a-pt_note-segment-in-vmlinux.patch @@ -1,6 +1,7 @@ ---- a/arch/x86_64/kernel/vmlinux.lds.S -+++ b/arch/x86_64/kernel/vmlinux.lds.S -@@ -13,6 +13,12 @@ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86 +diff -pruN ../orig-linux-2.6.16.29/arch/x86_64/kernel/vmlinux.lds.S ./arch/x86_64/kernel/vmlinux.lds.S +--- ../orig-linux-2.6.16.29/arch/x86_64/kernel/vmlinux.lds.S 2006-09-12 19:02:10.000000000 +0100 ++++ ./arch/x86_64/kernel/vmlinux.lds.S 2006-09-19 14:06:15.000000000 +0100 +@@ -14,6 +14,12 @@ OUTPUT_FORMAT("elf64-x86-64", "elf64-x86 OUTPUT_ARCH(i386:x86-64) ENTRY(phys_startup_64) jiffies_64 = jiffies; @@ -13,7 +14,7 @@ SECTIONS { . = __START_KERNEL; -@@ -31,7 +37,7 @@ SECTIONS +@@ -26,7 +32,7 @@ SECTIONS KPROBES_TEXT *(.fixup) *(.gnu.warning) @@ -22,7 +23,7 @@ /* out-of-line lock text */ .text.lock : AT(ADDR(.text.lock) - LOAD_OFFSET) { *(.text.lock) } -@@ -57,17 +63,10 @@ #endif +@@ -43,17 +49,10 @@ SECTIONS .data : AT(ADDR(.data) - LOAD_OFFSET) { *(.data) CONSTRUCTORS @@ -41,7 +42,7 @@ . = ALIGN(PAGE_SIZE); . = ALIGN(CONFIG_X86_L1_CACHE_BYTES); .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET) { -@@ -89,7 +88,7 @@ #define VVIRT_OFFSET (VSYSCALL_ADDR - VS +@@ -75,7 +74,7 @@ SECTIONS #define VVIRT(x) (ADDR(x) - VVIRT_OFFSET) . = VSYSCALL_ADDR; @@ -50,7 +51,7 @@ __vsyscall_0 = VSYSCALL_VIRT_ADDR; . = ALIGN(CONFIG_X86_L1_CACHE_BYTES); -@@ -132,7 +131,7 @@ #undef VVIRT +@@ -118,7 +117,7 @@ SECTIONS . = ALIGN(8192); /* init_task */ .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) { *(.data.init_task) @@ -59,7 +60,7 @@ . = ALIGN(4096); .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) { -@@ -222,6 +221,14 @@ SECTIONS +@@ -188,6 +187,14 @@ SECTIONS . = ALIGN(4096); __nosave_end = .; @@ -74,7 +75,7 @@ _end = . ; /* Sections to be discarded */ -@@ -235,4 +242,6 @@ #endif +@@ -201,4 +208,6 @@ SECTIONS STABS_DEBUG DWARF_DEBUG diff --git a/patches/linux-2.6.16.13/xen-hotplug.patch b/patches/linux-2.6.16.32/xen-hotplug.patch index 529cd568c1..06abdda41b 100644 --- a/patches/linux-2.6.16.13/xen-hotplug.patch +++ b/patches/linux-2.6.16.32/xen-hotplug.patch @@ -1,5 +1,6 @@ ---- ../pristine-linux-2.6.16.13/fs/proc/proc_misc.c 2006-05-02 22:38:44.000000000 +0100 -+++ ./fs/proc/proc_misc.c 2006-05-22 15:29:34.000000000 +0100 +diff -pruN ../orig-linux-2.6.16.29/fs/proc/proc_misc.c ./fs/proc/proc_misc.c +--- ../orig-linux-2.6.16.29/fs/proc/proc_misc.c 2006-09-12 19:02:10.000000000 +0100 ++++ ./fs/proc/proc_misc.c 2006-09-19 14:06:00.000000000 +0100 @@ -433,7 +433,7 @@ static int show_stat(struct seq_file *p, (unsigned long long)cputime64_to_clock_t(irq), (unsigned long long)cputime64_to_clock_t(softirq), diff --git a/patches/linux-2.6.16.13/xenoprof-generic.patch b/patches/linux-2.6.16.32/xenoprof-generic.patch index 66b17ba2f3..7783495f70 100644 --- a/patches/linux-2.6.16.13/xenoprof-generic.patch +++ b/patches/linux-2.6.16.32/xenoprof-generic.patch @@ -1,6 +1,6 @@ -diff -Naur orig/drivers/oprofile/buffer_sync.c new/drivers/oprofile/buffer_sync.c ---- orig/drivers/oprofile/buffer_sync.c 2006-05-02 14:38:44.000000000 -0700 -+++ new/drivers/oprofile/buffer_sync.c 2006-07-06 18:19:05.000000000 -0700 +diff -pruN ../orig-linux-2.6.16.29/drivers/oprofile/buffer_sync.c ./drivers/oprofile/buffer_sync.c +--- ../orig-linux-2.6.16.29/drivers/oprofile/buffer_sync.c 2006-11-06 14:46:52.000000000 -0800 ++++ ./drivers/oprofile/buffer_sync.c 2006-11-06 15:16:52.000000000 -0800 @@ -6,6 +6,10 @@ * * @author John Levon <levon@movementarian.org> @@ -12,7 +12,27 @@ diff -Naur orig/drivers/oprofile/buffer_sync.c new/drivers/oprofile/buffer_sync. * This is the core of the buffer management. Each * CPU buffer is processed and entered into the * global event buffer. Such processing is necessary -@@ -275,15 +279,31 @@ +@@ -38,6 +42,7 @@ static cpumask_t marked_cpus = CPU_MASK_ + static DEFINE_SPINLOCK(task_mortuary); + static void process_task_mortuary(void); + ++static int cpu_current_domain[NR_CPUS]; + + /* Take ownership of the task struct and place it on the + * list for processing. Only after two full buffer syncs +@@ -146,6 +151,11 @@ static void end_sync(void) + int sync_start(void) + { + int err; ++ int i; ++ ++ for (i = 0; i < NR_CPUS; i++) { ++ cpu_current_domain[i] = COORDINATOR_DOMAIN; ++ } + + start_cpu_work(); + +@@ -275,15 +285,31 @@ static void add_cpu_switch(int i) last_cookie = INVALID_COOKIE; } @@ -50,7 +70,7 @@ diff -Naur orig/drivers/oprofile/buffer_sync.c new/drivers/oprofile/buffer_sync. static void add_user_ctx_switch(struct task_struct const * task, unsigned long cookie) { -@@ -348,9 +368,9 @@ +@@ -348,9 +374,9 @@ static int add_us_sample(struct mm_struc * for later lookup from userspace. */ static int @@ -62,7 +82,7 @@ diff -Naur orig/drivers/oprofile/buffer_sync.c new/drivers/oprofile/buffer_sync. add_sample_entry(s->eip, s->event); return 1; } else if (mm) { -@@ -496,10 +516,11 @@ +@@ -496,15 +522,21 @@ void sync_buffer(int cpu) struct mm_struct *mm = NULL; struct task_struct * new; unsigned long cookie = 0; @@ -75,7 +95,17 @@ diff -Naur orig/drivers/oprofile/buffer_sync.c new/drivers/oprofile/buffer_sync. down(&buffer_sem); -@@ -512,16 +533,18 @@ + add_cpu_switch(cpu); + ++ /* We need to assign the first samples in this CPU buffer to the ++ same domain that we were processing at the last sync_buffer */ ++ if (cpu_current_domain[cpu] != COORDINATOR_DOMAIN) { ++ add_domain_switch(cpu_current_domain[cpu]); ++ } + /* Remember, only we can modify tail_pos */ + + available = get_slots(cpu_buf); +@@ -512,16 +544,18 @@ void sync_buffer(int cpu) for (i = 0; i < available; ++i) { struct op_sample * s = &cpu_buf->buffer[cpu_buf->tail_pos]; @@ -99,7 +129,7 @@ diff -Naur orig/drivers/oprofile/buffer_sync.c new/drivers/oprofile/buffer_sync. } else { struct mm_struct * oldmm = mm; -@@ -535,11 +558,16 @@ +@@ -535,11 +569,21 @@ void sync_buffer(int cpu) add_user_ctx_switch(new, cookie); } } else { @@ -109,10 +139,15 @@ diff -Naur orig/drivers/oprofile/buffer_sync.c new/drivers/oprofile/buffer_sync. - state = sb_bt_ignore; - atomic_inc(&oprofile_stats.bt_lost_no_mapping); + if (domain_switch) { ++ cpu_current_domain[cpu] = s->eip; + add_domain_switch(s->eip); + domain_switch = 0; + } else { -+ if (state >= sb_bt_start && ++ if (cpu_current_domain[cpu] != ++ COORDINATOR_DOMAIN) { ++ add_sample_entry(s->eip, s->event); ++ } ++ else if (state >= sb_bt_start && + !add_sample(mm, s, cpu_mode)) { + if (state == sb_bt_start) { + state = sb_bt_ignore; @@ -121,9 +156,21 @@ diff -Naur orig/drivers/oprofile/buffer_sync.c new/drivers/oprofile/buffer_sync. } } } -diff -Naur orig/drivers/oprofile/cpu_buffer.c new/drivers/oprofile/cpu_buffer.c ---- orig/drivers/oprofile/cpu_buffer.c 2006-05-02 14:38:44.000000000 -0700 -+++ new/drivers/oprofile/cpu_buffer.c 2006-07-06 18:19:05.000000000 -0700 +@@ -548,6 +592,11 @@ void sync_buffer(int cpu) + } + release_mm(mm); + ++ /* We reset domain to COORDINATOR at each CPU switch */ ++ if (cpu_current_domain[cpu] != COORDINATOR_DOMAIN) { ++ add_domain_switch(COORDINATOR_DOMAIN); ++ } ++ + mark_done(cpu); + + up(&buffer_sem); +diff -pruN ../orig-linux-2.6.16.29/drivers/oprofile/cpu_buffer.c ./drivers/oprofile/cpu_buffer.c +--- ../orig-linux-2.6.16.29/drivers/oprofile/cpu_buffer.c 2006-11-06 14:46:52.000000000 -0800 ++++ ./drivers/oprofile/cpu_buffer.c 2006-11-06 14:47:55.000000000 -0800 @@ -6,6 +6,10 @@ * * @author John Levon <levon@movementarian.org> @@ -135,7 +182,7 @@ diff -Naur orig/drivers/oprofile/cpu_buffer.c new/drivers/oprofile/cpu_buffer.c * Each CPU has a local buffer that stores PC value/event * pairs. We also log context switches when we notice them. * Eventually each CPU's buffer is processed into the global -@@ -34,6 +38,8 @@ +@@ -34,6 +38,8 @@ static void wq_sync_buffer(void *); #define DEFAULT_TIMER_EXPIRE (HZ / 10) static int work_enabled; @@ -144,7 +191,7 @@ diff -Naur orig/drivers/oprofile/cpu_buffer.c new/drivers/oprofile/cpu_buffer.c void free_cpu_buffers(void) { int i; -@@ -58,7 +64,7 @@ +@@ -58,7 +64,7 @@ int alloc_cpu_buffers(void) goto fail; b->last_task = NULL; @@ -153,7 +200,7 @@ diff -Naur orig/drivers/oprofile/cpu_buffer.c new/drivers/oprofile/cpu_buffer.c b->tracing = 0; b->buffer_size = buffer_size; b->tail_pos = 0; -@@ -114,7 +120,7 @@ +@@ -114,7 +120,7 @@ void cpu_buffer_reset(struct oprofile_cp * collected will populate the buffer with proper * values to initialize the buffer */ @@ -162,7 +209,7 @@ diff -Naur orig/drivers/oprofile/cpu_buffer.c new/drivers/oprofile/cpu_buffer.c cpu_buf->last_task = NULL; } -@@ -164,13 +170,13 @@ +@@ -164,13 +170,13 @@ add_code(struct oprofile_cpu_buffer * bu * because of the head/tail separation of the writer and reader * of the CPU buffer. * @@ -180,7 +227,7 @@ diff -Naur orig/drivers/oprofile/cpu_buffer.c new/drivers/oprofile/cpu_buffer.c { struct task_struct * task; -@@ -181,18 +187,18 @@ +@@ -181,18 +187,18 @@ static int log_sample(struct oprofile_cp return 0; } @@ -206,7 +253,7 @@ diff -Naur orig/drivers/oprofile/cpu_buffer.c new/drivers/oprofile/cpu_buffer.c cpu_buf->last_task = task; add_code(cpu_buf, (unsigned long)task); } -@@ -269,6 +275,25 @@ +@@ -269,6 +275,25 @@ void oprofile_add_trace(unsigned long pc add_sample(cpu_buf, pc, 0); } @@ -232,10 +279,10 @@ diff -Naur orig/drivers/oprofile/cpu_buffer.c new/drivers/oprofile/cpu_buffer.c /* * This serves to avoid cpu buffer overflow, and makes sure * the task mortuary progresses -diff -Naur orig/drivers/oprofile/cpu_buffer.h new/drivers/oprofile/cpu_buffer.h ---- orig/drivers/oprofile/cpu_buffer.h 2006-05-02 14:38:44.000000000 -0700 -+++ new/drivers/oprofile/cpu_buffer.h 2006-07-06 18:19:05.000000000 -0700 -@@ -36,7 +36,7 @@ +diff -pruN ../orig-linux-2.6.16.29/drivers/oprofile/cpu_buffer.h ./drivers/oprofile/cpu_buffer.h +--- ../orig-linux-2.6.16.29/drivers/oprofile/cpu_buffer.h 2006-11-06 14:46:52.000000000 -0800 ++++ ./drivers/oprofile/cpu_buffer.h 2006-11-06 14:47:55.000000000 -0800 +@@ -36,7 +36,7 @@ struct oprofile_cpu_buffer { volatile unsigned long tail_pos; unsigned long buffer_size; struct task_struct * last_task; @@ -244,7 +291,7 @@ diff -Naur orig/drivers/oprofile/cpu_buffer.h new/drivers/oprofile/cpu_buffer.h int tracing; struct op_sample * buffer; unsigned long sample_received; -@@ -51,7 +51,10 @@ +@@ -51,7 +51,10 @@ extern struct oprofile_cpu_buffer cpu_bu void cpu_buffer_reset(struct oprofile_cpu_buffer * cpu_buf); /* transient events for the CPU buffer -> event buffer */ @@ -257,10 +304,10 @@ diff -Naur orig/drivers/oprofile/cpu_buffer.h new/drivers/oprofile/cpu_buffer.h +#define CPU_DOMAIN_SWITCH 4 #endif /* OPROFILE_CPU_BUFFER_H */ -diff -Naur orig/drivers/oprofile/event_buffer.h new/drivers/oprofile/event_buffer.h ---- orig/drivers/oprofile/event_buffer.h 2006-05-02 14:38:44.000000000 -0700 -+++ new/drivers/oprofile/event_buffer.h 2006-07-06 18:19:05.000000000 -0700 -@@ -29,15 +29,20 @@ +diff -pruN ../orig-linux-2.6.16.29/drivers/oprofile/event_buffer.h ./drivers/oprofile/event_buffer.h +--- ../orig-linux-2.6.16.29/drivers/oprofile/event_buffer.h 2006-11-06 14:46:52.000000000 -0800 ++++ ./drivers/oprofile/event_buffer.h 2006-11-06 14:47:55.000000000 -0800 +@@ -29,15 +29,20 @@ void wake_up_buffer_waiter(void); #define CPU_SWITCH_CODE 2 #define COOKIE_SWITCH_CODE 3 #define KERNEL_ENTER_SWITCH_CODE 4 @@ -282,9 +329,9 @@ diff -Naur orig/drivers/oprofile/event_buffer.h new/drivers/oprofile/event_buffe /* add data to the event buffer */ void add_event_entry(unsigned long data); -diff -Naur orig/drivers/oprofile/oprof.c new/drivers/oprofile/oprof.c ---- orig/drivers/oprofile/oprof.c 2006-05-02 14:38:44.000000000 -0700 -+++ new/drivers/oprofile/oprof.c 2006-07-06 18:19:05.000000000 -0700 +diff -pruN ../orig-linux-2.6.16.29/drivers/oprofile/oprof.c ./drivers/oprofile/oprof.c +--- ../orig-linux-2.6.16.29/drivers/oprofile/oprof.c 2006-11-06 14:46:52.000000000 -0800 ++++ ./drivers/oprofile/oprof.c 2006-11-06 14:47:55.000000000 -0800 @@ -5,6 +5,10 @@ * @remark Read the file COPYING * @@ -305,7 +352,7 @@ diff -Naur orig/drivers/oprofile/oprof.c new/drivers/oprofile/oprof.c struct oprofile_operations oprofile_ops; unsigned long oprofile_started; -@@ -33,6 +37,32 @@ +@@ -33,6 +37,32 @@ static DECLARE_MUTEX(start_sem); */ static int timer = 0; @@ -338,10 +385,10 @@ diff -Naur orig/drivers/oprofile/oprof.c new/drivers/oprofile/oprof.c int oprofile_setup(void) { int err; -diff -Naur orig/drivers/oprofile/oprof.h new/drivers/oprofile/oprof.h ---- orig/drivers/oprofile/oprof.h 2006-05-02 14:38:44.000000000 -0700 -+++ new/drivers/oprofile/oprof.h 2006-07-06 18:19:05.000000000 -0700 -@@ -35,5 +35,8 @@ +diff -pruN ../orig-linux-2.6.16.29/drivers/oprofile/oprof.h ./drivers/oprofile/oprof.h +--- ../orig-linux-2.6.16.29/drivers/oprofile/oprof.h 2006-11-06 14:46:52.000000000 -0800 ++++ ./drivers/oprofile/oprof.h 2006-11-06 14:47:55.000000000 -0800 +@@ -35,5 +35,8 @@ void oprofile_create_files(struct super_ void oprofile_timer_init(struct oprofile_operations * ops); int oprofile_set_backtrace(unsigned long depth); @@ -350,9 +397,9 @@ diff -Naur orig/drivers/oprofile/oprof.h new/drivers/oprofile/oprof.h +int oprofile_set_passive(int passive_domains[], unsigned int pdomains); #endif /* OPROF_H */ -diff -Naur orig/drivers/oprofile/oprofile_files.c new/drivers/oprofile/oprofile_files.c ---- orig/drivers/oprofile/oprofile_files.c 2006-05-02 14:38:44.000000000 -0700 -+++ new/drivers/oprofile/oprofile_files.c 2006-07-06 18:19:05.000000000 -0700 +diff -pruN ../orig-linux-2.6.16.29/drivers/oprofile/oprofile_files.c ./drivers/oprofile/oprofile_files.c +--- ../orig-linux-2.6.16.29/drivers/oprofile/oprofile_files.c 2006-11-06 14:46:52.000000000 -0800 ++++ ./drivers/oprofile/oprofile_files.c 2006-11-06 14:47:55.000000000 -0800 @@ -5,15 +5,21 @@ * @remark Read the file COPYING * @@ -376,7 +423,7 @@ diff -Naur orig/drivers/oprofile/oprofile_files.c new/drivers/oprofile/oprofile_ unsigned long fs_buffer_size = 131072; unsigned long fs_cpu_buffer_size = 8192; unsigned long fs_buffer_watershed = 32768; /* FIXME: tune */ -@@ -117,11 +123,202 @@ +@@ -117,11 +123,202 @@ static ssize_t dump_write(struct file * static struct file_operations dump_fops = { .write = dump_write, }; @@ -580,9 +627,9 @@ diff -Naur orig/drivers/oprofile/oprofile_files.c new/drivers/oprofile/oprofile_ oprofilefs_create_file(sb, root, "buffer", &event_buffer_fops); oprofilefs_create_ulong(sb, root, "buffer_size", &fs_buffer_size); oprofilefs_create_ulong(sb, root, "buffer_watershed", &fs_buffer_watershed); -diff -Naur orig/include/linux/oprofile.h new/include/linux/oprofile.h ---- orig/include/linux/oprofile.h 2006-05-02 14:38:44.000000000 -0700 -+++ new/include/linux/oprofile.h 2006-07-06 18:19:31.000000000 -0700 +diff -pruN ../orig-linux-2.6.16.29/include/linux/oprofile.h ./include/linux/oprofile.h +--- ../orig-linux-2.6.16.29/include/linux/oprofile.h 2006-11-06 14:46:42.000000000 -0800 ++++ ./include/linux/oprofile.h 2006-11-06 14:47:55.000000000 -0800 @@ -16,6 +16,8 @@ #include <linux/types.h> #include <linux/spinlock.h> @@ -592,7 +639,7 @@ diff -Naur orig/include/linux/oprofile.h new/include/linux/oprofile.h struct super_block; struct dentry; -@@ -27,6 +29,11 @@ +@@ -27,6 +29,11 @@ struct oprofile_operations { /* create any necessary configuration files in the oprofile fs. * Optional. */ int (*create_files)(struct super_block * sb, struct dentry * root); @@ -604,7 +651,7 @@ diff -Naur orig/include/linux/oprofile.h new/include/linux/oprofile.h /* Do any necessary interrupt setup. Optional. */ int (*setup)(void); /* Do any necessary interrupt shutdown. Optional. */ -@@ -68,6 +75,8 @@ +@@ -68,6 +75,8 @@ void oprofile_add_pc(unsigned long pc, i /* add a backtrace entry, to be called from the ->backtrace callback */ void oprofile_add_trace(unsigned long eip); |