aboutsummaryrefslogtreecommitdiffstats
path: root/patches
diff options
context:
space:
mode:
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.patch59
-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.patch13
-rw-r--r--patches/linux-2.6.16.32/pci-mmconfig-fix-from-2.6.17.patch292
-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.patch211
-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);