diff --git a/debian/bin/abiupdate.py b/debian/bin/abiupdate.py index da94b0f49..69a2a23df 100755 --- a/debian/bin/abiupdate.py +++ b/debian/bin/abiupdate.py @@ -71,7 +71,13 @@ class Main(object): self.dir = tempfile.mkdtemp(prefix='abiupdate') try: self.log("Retrieve config\n") - config = self.get_config() + + try: + config = self.get_config() + except urllib2.HTTPError as e: + self.log("Failed to retrieve %s: %s\n" % (e.filename, e)) + sys.exit(1) + if self.override_arch: arches = [self.override_arch] else: diff --git a/debian/changelog b/debian/changelog index 8574a26c0..0ebc0a1c7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -19,6 +19,68 @@ linux-2.6 (3.3~rc6-1~experimental.1) experimental; urgency=low -- Ben Hutchings Sun, 04 Mar 2012 20:27:42 +0000 +linux-2.6 (3.2.12-1) unstable; urgency=high + + * New upstream stable update: + http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.11 + http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.12 + - aio: fix io_setup/io_destroy race + - aio: fix the "too late munmap()" race + - vfs: fix double put after complete_walk() + - acer-wmi: No wifi rfkill on Lenovo machines (Closes: #655941) + - tcp: fix false reordering signal in tcp_shifted_skb + - r8169: corrupted IP fragments fix for large mtu + - tcp: don't fragment SACKed skbs in tcp_mark_head_lost() + - tcp: fix tcp_shift_skb_data() to not shift SACKed data below snd_una + - block: Fix NULL pointer dereference in sd_revalidate_disk + (Closes: #649735) + - block: fix __blkdev_get and add_disk race condition + + [ Ben Hutchings ] + * [powerpc] Enable KVM_GUEST + * [s390] Ignore arch_pick_mmap_layout version change; it should not be + needed by modules (fixes FTBFS) + * [x86] Disable POHMELFS; this version is obsolete + * epoll: Don't limit non-nested epoll paths + * CIFS: Fix a spurious error in cifs_push_posix_locks + * [rt] bump rt patch to version 3.2.11-rt20 + * aufs: Update to aufs3.2-20120312 + * tcp: fix syncookie regression + * ipv6: Don't dev_hold(dev) in ip6_mc_find_dev_rcu + + [ Jonathan Nieder ] + * [x86] Enable RTS5139 as module (Closes: #663912) + + -- Ben Hutchings Tue, 20 Mar 2012 04:32:51 +0000 + +linux-2.6 (3.2.10-1) unstable; urgency=high + + * New upstream stable update: + http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.2.10 + - regset: Prevent null pointer reference on readonly regsets + (CVE-2012-1097) + + [ Uwe Kleine-König ] + * [rt] bump rt patch to version 3.2.9-rt17 + * [rt] fix conflict between the security restrictions on links introduced in + 3.2.9-1 and rt (Closes: #663269) + + [ Aurelien Jarno ] + * [mips,mipsel] Mark ext4-modules as provided by the kernel-image udeb, remove + ide-core-modules provide. + + [ Ben Hutchings ] + * [x86,ia64] PCI/hotplug: Build-in common hotplug drivers: + - Change HOTPLUG_PCI, HOTPLUG_PCI_PCIE to built-in + - [x86] Change HOTPLUG_PCI_ACPI to built-in (Closes: #663433) + - [ia64] Enable HOTPLUG_PCI_SGI as built-in + * linux-headers: Remove unused, broken symlinks to Kbuild (Closes: #663597) + * udeb: Remove dependency of {pcmcia,usb}-storage-modules on ide-core-modules + * [mips,mipsel] Mark ata-modules as provided by the kernel-image udeb + for most flavours + + -- Bastian Blank Tue, 13 Mar 2012 17:19:32 +0100 + linux-2.6 (3.2.9-1) unstable; urgency=high * New upstream stable update: diff --git a/debian/config/config b/debian/config/config index fb25af056..4f02f94b5 100644 --- a/debian/config/config +++ b/debian/config/config @@ -1832,7 +1832,7 @@ CONFIG_NET_VENDOR_INTEL=y CONFIG_E1000=m CONFIG_E1000E=m CONFIG_IGB=m -CONFIG_IGB_DCA=m +CONFIG_IGB_DCA=y CONFIG_IGBVF=m CONFIG_IXGB=m CONFIG_IXGBE=m @@ -2400,7 +2400,7 @@ CONFIG_HOTPLUG_PCI_CPCI=y ## file: drivers/pci/pcie/Kconfig ## CONFIG_PCIEPORTBUS=y -CONFIG_HOTPLUG_PCI_PCIE=m +CONFIG_HOTPLUG_PCI_PCIE=y CONFIG_PCIEASPM=y # CONFIG_PCIEASPM_DEBUG is not set diff --git a/debian/config/defines b/debian/config/defines index 852298f14..86465be82 100644 --- a/debian/config/defines +++ b/debian/config/defines @@ -25,6 +25,9 @@ featuresets: none rt +[featureset-rt_base] +enabled: true + [description] part-long-up: This kernel is not suitable for SMP (multi-processor, multi-core or hyper-threaded) systems. @@ -49,6 +52,3 @@ initramfs-tools: initramfs-tools (>= 0.99~) elilo: elilo (>= 3.12-3.1~) lilo: lilo (>= 22.8-8.2~) s390-tools: s390-tools (>= 1.8.3-2~) - -[featureset-rt] -enabled: true diff --git a/debian/config/featureset-rt/config b/debian/config/featureset-rt/config index 8136f167e..247fe31b6 100644 --- a/debian/config/featureset-rt/config +++ b/debian/config/featureset-rt/config @@ -3,3 +3,6 @@ CONFIG_PREEMPT_RT_FULL=y CONFIG_SCHED_TRACER=y CONFIG_MISSED_TIMER_OFFSETS_HIST=y CONFIG_WAKEUP_LATENCY_HIST=y + +## disable aufs as it's not needed on rt and conflicts with fs-dentry-use-seqlock.patch +# CONFIG_AUFS_FS is not set diff --git a/debian/config/ia64/config b/debian/config/ia64/config index 5e601ebb1..dca49dde7 100644 --- a/debian/config/ia64/config +++ b/debian/config/ia64/config @@ -590,7 +590,8 @@ CONFIG_PCMCIA_SPECTRUM=m ## ## file: drivers/pci/hotplug/Kconfig ## -CONFIG_HOTPLUG_PCI=m +CONFIG_HOTPLUG_PCI=y +CONFIG_HOTPLUG_PCI_SGI=y ## ## file: drivers/pcmcia/Kconfig diff --git a/debian/config/kernelarch-x86/config b/debian/config/kernelarch-x86/config index 3f6733728..26ba66bd3 100644 --- a/debian/config/kernelarch-x86/config +++ b/debian/config/kernelarch-x86/config @@ -1039,9 +1039,9 @@ CONFIG_HT_IRQ=y ## ## file: drivers/pci/hotplug/Kconfig ## -CONFIG_HOTPLUG_PCI=m +CONFIG_HOTPLUG_PCI=y CONFIG_HOTPLUG_PCI_FAKE=m -CONFIG_HOTPLUG_PCI_ACPI=m +CONFIG_HOTPLUG_PCI_ACPI=y CONFIG_HOTPLUG_PCI_ACPI_IBM=m CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m @@ -1306,12 +1306,6 @@ CONFIG_LIRC_SIR=m CONFIG_LIRC_TTUSBIR=m CONFIG_LIRC_ZILOG=m -## -## file: drivers/staging/pohmelfs/Kconfig -## -CONFIG_POHMELFS=m -# CONFIG_POHMELFS_DEBUG is not set - ## ## file: drivers/staging/rtl8187se/Kconfig ## @@ -1332,6 +1326,12 @@ CONFIG_RTL8192U=m ## CONFIG_R8712U=m +## +## file: drivers/staging/rts5139/Kconfig +## +CONFIG_RTS5139=m +# CONFIG_RTS5139_DEBUG is not set + ## ## file: drivers/staging/rts_pstor/Kconfig ## diff --git a/debian/config/mips/defines b/debian/config/mips/defines index 523c05d03..ee65d8872 100644 --- a/debian/config/mips/defines +++ b/debian/config/mips/defines @@ -9,11 +9,6 @@ flavours: octeon kernel-arch: mips -[abi] -ignore-changes: -# Removal of EXT3_FS - journal_* log_start_commit log_wait_commit - [image] configs: kernelarch-mips/config diff --git a/debian/config/mipsel/defines b/debian/config/mipsel/defines index 5e99261b9..1b40b3c5b 100644 --- a/debian/config/mipsel/defines +++ b/debian/config/mipsel/defines @@ -8,11 +8,6 @@ flavours: loongson-2f kernel-arch: mips -[abi] -ignore-changes: -# Removal of EXT3_FS - journal_* log_start_commit log_wait_commit - [image] configs: kernelarch-mips/config diff --git a/debian/config/powerpc/config b/debian/config/powerpc/config index 83b37341c..600178e41 100644 --- a/debian/config/powerpc/config +++ b/debian/config/powerpc/config @@ -38,6 +38,7 @@ CONFIG_VIRTUALIZATION=y ## ## file: arch/powerpc/platforms/Kconfig ## +CONFIG_KVM_GUEST=y CONFIG_RTAS_PROC=y CONFIG_CPU_FREQ_PMAC=y CONFIG_PPC601_SYNC_FIX=y diff --git a/debian/installer/mips/package-list b/debian/installer/mips/package-list index c4c7d984c..873fe229d 100644 --- a/debian/installer/mips/package-list +++ b/debian/installer/mips/package-list @@ -4,9 +4,9 @@ # It overwrites specifications from /usr/share/kernel-wedge/package-list. # Package: kernel-image -Provides: ext2-modules, ext3-modules, rtc-modules -Provides_4kc-malta: ext2-modules, ext3-modules, ide-core-modules, rtc-modules -Provides_sb1-bcm91250a: ext2-modules, ext3-modules, ide-core-modules, rtc-modules +Provides: ext2-modules, ext3-modules, ext4-modules, rtc-modules +Provides_4kc-malta: ata-modules, ext2-modules, ext3-modules, ext4-modules, rtc-modules +Provides_sb1-bcm91250a: ata-modules, ext2-modules, ext3-modules, ext4-modules, rtc-modules Package: nbd-modules Depends: kernel-image diff --git a/debian/installer/mipsel/package-list b/debian/installer/mipsel/package-list index 8bdd0814e..76c81fd51 100644 --- a/debian/installer/mipsel/package-list +++ b/debian/installer/mipsel/package-list @@ -4,10 +4,10 @@ # It overwrites specifications from /usr/share/kernel-wedge/package-list. # Package: kernel-image -Provides_sb1-bcm91250a: ext2-modules, ext3-modules, ide-core-modules, rtc-modules -Provides_r5k-cobalt: ext2-modules, ext3-modules, ide-core-modules, rtc-modules -Provides_4kc-malta: ext2-modules, ext3-modules, ide-core-modules, rtc-modules -Provides_loongson-2f: ext2-modules, ext3-modules, rtc-modules +Provides_sb1-bcm91250a: ata-modules, ext2-modules, ext3-modules, ext4-modules, rtc-modules +Provides_r5k-cobalt: ata-modules, ext2-modules, ext3-modules, ext4-modules, rtc-modules +Provides_4kc-malta: ata-modules, ext2-modules, ext3-modules, ext4-modules, rtc-modules +Provides_loongson-2f: ata-modules, ext2-modules, ext3-modules, ext4-modules, rtc-modules Package: nbd-modules Depends: kernel-image diff --git a/debian/installer/package-list b/debian/installer/package-list index d819b26cb..ffb158651 100644 --- a/debian/installer/package-list +++ b/debian/installer/package-list @@ -278,13 +278,13 @@ Description: USB support This package contains core USB drivers for the kernel. Package: usb-storage-modules -Depends: kernel-image, ide-core-modules, scsi-core-modules, usb-modules +Depends: kernel-image, scsi-core-modules, usb-modules Priority: standard Description: USB storage support This package contains the USB storage driver for the kernel. Package: pcmcia-storage-modules -Depends: kernel-image, ide-core-modules, cdrom-core-modules, pcmcia-modules, ata-modules +Depends: kernel-image, cdrom-core-modules, pcmcia-modules, ata-modules Priority: standard Description: PCMCIA storage drivers This package contains PCMCIA storage drivers for the kernel. diff --git a/debian/lib/python/debian_linux/config.py b/debian/lib/python/debian_linux/config.py index fd09134bf..17211dddc 100644 --- a/debian/lib/python/debian_linux/config.py +++ b/debian/lib/python/debian_linux/config.py @@ -168,7 +168,7 @@ class ConfigCoreHierarchy(object): for section in iter(config): if section[0].startswith('featureset-'): - real = (section[-1], None, section[0].lstrip('featureset-')) + real = (section[-1], None, section[0][11:]) else: real = (section[-1],) + section[1:] ret[real] = config[section] diff --git a/debian/patches/bugfix/all/CIFS-Fix-a-spurious-error-in-cifs_push_posix_locks.patch b/debian/patches/bugfix/all/CIFS-Fix-a-spurious-error-in-cifs_push_posix_locks.patch new file mode 100644 index 000000000..3ecd46809 --- /dev/null +++ b/debian/patches/bugfix/all/CIFS-Fix-a-spurious-error-in-cifs_push_posix_locks.patch @@ -0,0 +1,67 @@ +From ce85852b90a214cf577fc1b4f49d99fd7e98784a Mon Sep 17 00:00:00 2001 +From: Pavel Shilovsky +Date: Sat, 17 Mar 2012 09:46:55 +0300 +Subject: [PATCH] CIFS: Fix a spurious error in cifs_push_posix_locks + +Signed-off-by: Pavel Shilovsky +Reviewed-by: Jeff Layton +Reported-by: Ben Hutchings +Signed-off-by: Steve French +--- + fs/cifs/file.c | 19 ++++++++++--------- + 1 files changed, 10 insertions(+), 9 deletions(-) + +diff --git a/fs/cifs/file.c b/fs/cifs/file.c +index 5e64748..8e02dbd 100644 +--- a/fs/cifs/file.c ++++ b/fs/cifs/file.c +@@ -960,9 +960,9 @@ cifs_push_posix_locks(struct cifsFileInfo *cfile) + INIT_LIST_HEAD(&locks_to_send); + + /* +- * Allocating count locks is enough because no locks can be added to +- * the list while we are holding cinode->lock_mutex that protects +- * locking operations of this inode. ++ * Allocating count locks is enough because no FL_POSIX locks can be ++ * added to the list while we are holding cinode->lock_mutex that ++ * protects locking operations of this inode. + */ + for (; i < count; i++) { + lck = kmalloc(sizeof(struct lock_to_push), GFP_KERNEL); +@@ -973,18 +973,20 @@ cifs_push_posix_locks(struct cifsFileInfo *cfile) + list_add_tail(&lck->llist, &locks_to_send); + } + +- i = 0; + el = locks_to_send.next; + lock_flocks(); + cifs_for_each_lock(cfile->dentry->d_inode, before) { ++ flock = *before; ++ if ((flock->fl_flags & FL_POSIX) == 0) ++ continue; + if (el == &locks_to_send) { +- /* something is really wrong */ ++ /* ++ * The list ended. We don't have enough allocated ++ * structures - something is really wrong. ++ */ + cERROR(1, "Can't push all brlocks!"); + break; + } +- flock = *before; +- if ((flock->fl_flags & FL_POSIX) == 0) +- continue; + length = 1 + flock->fl_end - flock->fl_start; + if (flock->fl_type == F_RDLCK || flock->fl_type == F_SHLCK) + type = CIFS_RDLCK; +@@ -996,7 +998,6 @@ cifs_push_posix_locks(struct cifsFileInfo *cfile) + lck->length = length; + lck->type = type; + lck->offset = flock->fl_start; +- i++; + el = el->next; + } + unlock_flocks(); +-- +1.7.0.4 + diff --git a/debian/patches/features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch b/debian/patches/features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch index 4fcc2b606..4fde26846 100644 --- a/debian/patches/features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch +++ b/debian/patches/features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch @@ -18,10 +18,14 @@ Cc: Clark Williams Cc: stable-rt@vger.kernel.org Link: http://lkml.kernel.org/r/1330702617.25686.265.camel@gandalf.stny.rr.com Signed-off-by: Thomas Gleixner -diff --git a/kernel/cpu.c b/kernel/cpu.c -index fa40834..c25b5ff 100644 ---- a/kernel/cpu.c -+++ b/kernel/cpu.c +--- + kernel/cpu.c | 35 ++++++++++++++++++++++++++--------- + 1 file changed, 26 insertions(+), 9 deletions(-) + +Index: linux-3.2/kernel/cpu.c +=================================================================== +--- linux-3.2.orig/kernel/cpu.c ++++ linux-3.2/kernel/cpu.c @@ -46,7 +46,12 @@ static int cpu_hotplug_disabled; static struct { @@ -35,22 +39,30 @@ index fa40834..c25b5ff 100644 /* * Also blocks the new readers during * an ongoing cpu hotplug operation. -@@ -58,6 +63,14 @@ static struct { +@@ -54,10 +59,22 @@ static struct { + int refcount; + } cpu_hotplug = { + .active_writer = NULL, ++#ifdef CONFIG_PREEMPT_RT_FULL ++ .lock = __SPIN_LOCK_UNLOCKED(cpu_hotplug.lock), ++#else + .lock = __MUTEX_INITIALIZER(cpu_hotplug.lock), ++#endif .refcount = 0, }; +#ifdef CONFIG_PREEMPT_RT_FULL -+# define hotplug_lock() spin_lock(&cpu_hotplug.lock) -+# define hotplug_unlock() spin_unlock(&cpu_hotplug.lock) ++# define hotplug_lock() rt_spin_lock(&cpu_hotplug.lock) ++# define hotplug_unlock() rt_spin_unlock(&cpu_hotplug.lock) +#else +# define hotplug_lock() mutex_lock(&cpu_hotplug.lock) -+# define hotplug_lock() mutex_unlock(&cpu_hotplug.lock) ++# define hotplug_unlock() mutex_unlock(&cpu_hotplug.lock) +#endif + struct hotplug_pcp { struct task_struct *unplug; int refcount; -@@ -87,8 +100,8 @@ retry: +@@ -87,8 +104,8 @@ retry: return; } preempt_enable(); @@ -61,7 +73,7 @@ index fa40834..c25b5ff 100644 preempt_disable(); goto retry; } -@@ -161,9 +174,9 @@ void get_online_cpus(void) +@@ -161,9 +178,9 @@ void get_online_cpus(void) might_sleep(); if (cpu_hotplug.active_writer == current) return; @@ -73,7 +85,7 @@ index fa40834..c25b5ff 100644 } EXPORT_SYMBOL_GPL(get_online_cpus); -@@ -172,10 +185,10 @@ void put_online_cpus(void) +@@ -172,10 +189,10 @@ void put_online_cpus(void) { if (cpu_hotplug.active_writer == current) return; @@ -86,7 +98,7 @@ index fa40834..c25b5ff 100644 } EXPORT_SYMBOL_GPL(put_online_cpus); -@@ -207,11 +220,11 @@ static void cpu_hotplug_begin(void) +@@ -207,11 +224,11 @@ static void cpu_hotplug_begin(void) cpu_hotplug.active_writer = current; for (;;) { @@ -100,7 +112,7 @@ index fa40834..c25b5ff 100644 schedule(); } } -@@ -219,7 +232,7 @@ static void cpu_hotplug_begin(void) +@@ -219,7 +236,7 @@ static void cpu_hotplug_begin(void) static void cpu_hotplug_done(void) { cpu_hotplug.active_writer = NULL; @@ -109,7 +121,3 @@ index fa40834..c25b5ff 100644 } #else /* #if CONFIG_HOTPLUG_CPU */ - - - - diff --git a/debian/patches/features/all/rt/drivers-net-fix-livelock-issues.patch b/debian/patches/features/all/rt/drivers-net-fix-livelock-issues.patch index 750cc91bc..f8879d19e 100644 --- a/debian/patches/features/all/rt/drivers-net-fix-livelock-issues.patch +++ b/debian/patches/features/all/rt/drivers-net-fix-livelock-issues.patch @@ -36,9 +36,9 @@ Index: linux-3.2/drivers/net/ethernet/atheros/atl1c/atl1c_main.c - } + spin_lock_irqsave(&adapter->tx_lock, flags); + - if (skb->mark == 0x01) - type = atl1c_trans_high; - else + + if (atl1c_tpd_avail(adapter, type) < tpd_req) { + /* no enough descriptor, just stop queue */ Index: linux-3.2/drivers/net/ethernet/atheros/atl1e/atl1e_main.c =================================================================== --- linux-3.2.orig/drivers/net/ethernet/atheros/atl1e/atl1e_main.c diff --git a/debian/patches/features/all/rt/fix-rt+link-creation-restrictions b/debian/patches/features/all/rt/fix-rt+link-creation-restrictions new file mode 100644 index 000000000..4bffe1bd8 --- /dev/null +++ b/debian/patches/features/all/rt/fix-rt+link-creation-restrictions @@ -0,0 +1,22 @@ +--- + fs/namei.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/fs/namei.c ++++ b/fs/namei.c +@@ -679,13 +679,13 @@ + return 0; + + /* Check parent directory mode and owner. */ +- spin_lock(&dentry->d_lock); ++ seq_spin_lock(&dentry->d_lock); + parent = dentry->d_parent->d_inode; + if ((parent->i_mode & (S_ISVTX|S_IWOTH)) == (S_ISVTX|S_IWOTH) && + parent->i_uid != inode->i_uid) { + error = -EACCES; + } +- spin_unlock(&dentry->d_lock); ++ seq_spin_unlock(&dentry->d_lock); + + if (error) + audit_log_link_denied("follow_link", link); diff --git a/debian/patches/features/all/rt/fs-dcache-use-cpu-chill-in-trylock-loops.patch b/debian/patches/features/all/rt/fs-dcache-use-cpu-chill-in-trylock-loops.patch new file mode 100644 index 000000000..8d7e2066e --- /dev/null +++ b/debian/patches/features/all/rt/fs-dcache-use-cpu-chill-in-trylock-loops.patch @@ -0,0 +1,80 @@ +Subject: fs: dcache: Use cpu_chill() in trylock loops +From: Thomas Gleixner +Date: Wed, 07 Mar 2012 21:00:34 +0100 + +Retry loops on RT might loop forever when the modifying side was +preempted. Use cpu_chill() instead of cpu_relax() to let the system +make progress. + +Signed-off-by: Thomas Gleixner +Cc: stable-rt@vger.kernel.org +--- + fs/autofs4/autofs_i.h | 1 + + fs/autofs4/expire.c | 2 +- + fs/dcache.c | 7 ++++--- + 3 files changed, 6 insertions(+), 4 deletions(-) + +Index: linux-3.2/fs/autofs4/autofs_i.h +=================================================================== +--- linux-3.2.orig/fs/autofs4/autofs_i.h ++++ linux-3.2/fs/autofs4/autofs_i.h +@@ -34,6 +34,7 @@ + #include + #include + #include ++#include + #include + #include + +Index: linux-3.2/fs/autofs4/expire.c +=================================================================== +--- linux-3.2.orig/fs/autofs4/expire.c ++++ linux-3.2/fs/autofs4/expire.c +@@ -170,7 +170,7 @@ again: + parent = p->d_parent; + if (!seq_spin_trylock(&parent->d_lock)) { + seq_spin_unlock(&p->d_lock); +- cpu_relax(); ++ cpu_chill(); + goto relock; + } + seq_spin_unlock(&p->d_lock); +Index: linux-3.2/fs/dcache.c +=================================================================== +--- linux-3.2.orig/fs/dcache.c ++++ linux-3.2/fs/dcache.c +@@ -37,6 +37,7 @@ + #include + #include + #include ++#include + #include "internal.h" + + /* +@@ -410,7 +411,7 @@ static inline struct dentry *dentry_kill + if (inode && !spin_trylock(&inode->i_lock)) { + relock: + seq_spin_unlock(&dentry->d_lock); +- cpu_relax(); ++ cpu_chill(); + return dentry; /* try again with same dentry */ + } + if (IS_ROOT(dentry)) +@@ -796,7 +797,7 @@ relock: + + if (!seq_spin_trylock(&dentry->d_lock)) { + spin_unlock(&dcache_lru_lock); +- cpu_relax(); ++ cpu_chill(); + goto relock; + } + +@@ -1974,7 +1975,7 @@ again: + if (dentry->d_count == 1) { + if (inode && !spin_trylock(&inode->i_lock)) { + seq_spin_unlock(&dentry->d_lock); +- cpu_relax(); ++ cpu_chill(); + goto again; + } + dentry->d_flags &= ~DCACHE_CANT_MOUNT; diff --git a/debian/patches/features/all/rt/fs-more-cpu-chill-fixups.patch b/debian/patches/features/all/rt/fs-more-cpu-chill-fixups.patch new file mode 100644 index 000000000..fb343e747 --- /dev/null +++ b/debian/patches/features/all/rt/fs-more-cpu-chill-fixups.patch @@ -0,0 +1,35 @@ +Subject: fs: namespace: Use cpu_chill() instead of cpu_relax() +From: Thomas Gleixner +Date: Wed, 07 Mar 2012 21:05:19 +0100 + +Retry loops on RT might loop forever when the modifying side was +preempted. Use cpu_chill() instead of cpu_relax() to let the system +make progress. + +Signed-off-by: Thomas Gleixner +Cc: stable-rt@vger.kernel.org +--- + fs/namespace.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Index: linux-3.2/fs/namespace.c +=================================================================== +--- linux-3.2.orig/fs/namespace.c ++++ linux-3.2/fs/namespace.c +@@ -31,6 +31,7 @@ + #include + #include + #include ++#include + #include + #include + #include "pnode.h" +@@ -346,7 +347,7 @@ int mnt_want_write(struct vfsmount *mnt) + */ + while (mnt->mnt_flags & MNT_WRITE_HOLD) { + preempt_enable(); +- cpu_relax(); ++ cpu_chill(); + preempt_disable(); + } + /* diff --git a/debian/patches/features/all/rt/localversion.patch b/debian/patches/features/all/rt/localversion.patch index 6bffce58d..8af1cdb2c 100644 --- a/debian/patches/features/all/rt/localversion.patch +++ b/debian/patches/features/all/rt/localversion.patch @@ -14,4 +14,4 @@ Index: linux-3.2/localversion-rt --- /dev/null +++ linux-3.2/localversion-rt @@ -0,0 +1 @@ -+-rt15 ++-rt20 diff --git a/debian/patches/features/all/rt/net-use-cpu-chill.patch b/debian/patches/features/all/rt/net-use-cpu-chill.patch new file mode 100644 index 000000000..70e7bf7df --- /dev/null +++ b/debian/patches/features/all/rt/net-use-cpu-chill.patch @@ -0,0 +1,66 @@ +Subject: net: Use cpu_chill() instead of cpu_relax() +From: Thomas Gleixner +Date: Wed, 07 Mar 2012 21:10:04 +0100 + +Retry loops on RT might loop forever when the modifying side was +preempted. Use cpu_chill() instead of cpu_relax() to let the system +make progress. + +Signed-off-by: Thomas Gleixner +Cc: stable-rt@vger.kernel.org +--- + net/packet/af_packet.c | 5 +++-- + net/rds/ib_rdma.c | 3 ++- + 2 files changed, 5 insertions(+), 3 deletions(-) + +Index: linux-3.2/net/packet/af_packet.c +=================================================================== +--- linux-3.2.orig/net/packet/af_packet.c ++++ linux-3.2/net/packet/af_packet.c +@@ -89,6 +89,7 @@ + #include + #include + #include ++#include + + #ifdef CONFIG_INET + #include +@@ -673,7 +674,7 @@ static void prb_retire_rx_blk_timer_expi + if (BLOCK_NUM_PKTS(pbd)) { + while (atomic_read(&pkc->blk_fill_in_prog)) { + /* Waiting for skb_copy_bits to finish... */ +- cpu_relax(); ++ cpu_chill(); + } + } + +@@ -928,7 +929,7 @@ static void prb_retire_current_block(str + if (!(status & TP_STATUS_BLK_TMO)) { + while (atomic_read(&pkc->blk_fill_in_prog)) { + /* Waiting for skb_copy_bits to finish... */ +- cpu_relax(); ++ cpu_chill(); + } + } + prb_close_block(pkc, pbd, po, status); +Index: linux-3.2/net/rds/ib_rdma.c +=================================================================== +--- linux-3.2.orig/net/rds/ib_rdma.c ++++ linux-3.2/net/rds/ib_rdma.c +@@ -34,6 +34,7 @@ + #include + #include + #include ++#include + + #include "rds.h" + #include "ib.h" +@@ -286,7 +287,7 @@ static inline void wait_clean_list_grace + for_each_online_cpu(cpu) { + flag = &per_cpu(clean_list_grace, cpu); + while (test_bit(CLEAN_LIST_BUSY_BIT, flag)) +- cpu_relax(); ++ cpu_chill(); + } + } + diff --git a/debian/patches/features/all/rt/rt-introduce-cpu-chill.patch b/debian/patches/features/all/rt/rt-introduce-cpu-chill.patch new file mode 100644 index 000000000..999c6234b --- /dev/null +++ b/debian/patches/features/all/rt/rt-introduce-cpu-chill.patch @@ -0,0 +1,30 @@ +Subject: rt: Introduce cpu_chill() +From: Thomas Gleixner +Date: Wed, 07 Mar 2012 20:51:03 +0100 + +Retry loops on RT might loop forever when the modifying side was +preempted. Add cpu_chill() to replace cpu_relax(). cpu_chill() +defaults to cpu_relax() for non RT. On RT it puts the looping task to +sleep for a tick so the preempted task can make progress. + +Signed-off-by: Thomas Gleixner +Cc: stable-rt@vger.kernel.org +--- + include/linux/delay.h | 6 ++++++ + 1 file changed, 6 insertions(+) + +Index: linux-3.2/include/linux/delay.h +=================================================================== +--- linux-3.2.orig/include/linux/delay.h ++++ linux-3.2/include/linux/delay.h +@@ -52,4 +52,10 @@ static inline void ssleep(unsigned int s + msleep(seconds * 1000); + } + ++#ifdef CONFIG_PREEMPT_RT_FULL ++# define cpu_chill() msleep(1) ++#else ++# define cpu_chill() cpu_relax() ++#endif ++ + #endif /* defined(_LINUX_DELAY_H) */ diff --git a/debian/patches/features/all/rt/seqlock-prevent-rt-starvation.patch b/debian/patches/features/all/rt/seqlock-prevent-rt-starvation.patch index 09cae0cc3..de9285bd4 100644 --- a/debian/patches/features/all/rt/seqlock-prevent-rt-starvation.patch +++ b/debian/patches/features/all/rt/seqlock-prevent-rt-starvation.patch @@ -14,7 +14,8 @@ Cc: stable-rt@vger.kernel.org --- include/linux/seqlock.h | 23 +++++++++++++++++++++++ - 1 file changed, 23 insertions(+) + include/net/neighbour.h | 2 +- + 2 files changed, 24 insertions(+), 1 deletion(-) Index: linux-3.2/include/linux/seqlock.h =================================================================== @@ -24,7 +25,7 @@ Index: linux-3.2/include/linux/seqlock.h /* * Read side functions for starting and finalizing a read side section. */ -+#ifndef CONFIG_PREEMPT_RT ++#ifndef CONFIG_PREEMPT_RT_FULL static inline unsigned read_seqbegin(const seqlock_t *sl) { return read_seqcount_begin(&sl->seqcount); @@ -54,3 +55,16 @@ Index: linux-3.2/include/linux/seqlock.h static inline unsigned read_seqretry(const seqlock_t *sl, unsigned start) { +Index: linux-3.2/include/net/neighbour.h +=================================================================== +--- linux-3.2.orig/include/net/neighbour.h ++++ linux-3.2/include/net/neighbour.h +@@ -385,7 +385,7 @@ struct neighbour_cb { + + #define NEIGH_CB(skb) ((struct neighbour_cb *)(skb)->cb) + +-static inline void neigh_ha_snapshot(char *dst, const struct neighbour *n, ++static inline void neigh_ha_snapshot(char *dst, struct neighbour *n, + const struct net_device *dev) + { + unsigned int seq; diff --git a/debian/patches/features/all/rt/series b/debian/patches/features/all/rt/series index 31d796eea..dd33b575a 100644 --- a/debian/patches/features/all/rt/series +++ b/debian/patches/features/all/rt/series @@ -5,6 +5,7 @@ ############################################################ # UPSTREAM changes queued for 3.3 or 3.2 ############################################################ +x88-derandom-tsc-delay-64-bit.patch x86_64-patch-for-idle-notifiers.patch re-possible-slab-deadlock-while-doing-ifenslave-1.patch @@ -585,8 +586,16 @@ rfc-ring-buffer-rt-check-for-irqs-disabled-before-grabbing-reader-lock.patch rfc-sched-rt-fix-wait_task_interactive-to-test-rt_spin_lock-state.patch rfc-lglock-rt-use-non-rt-for_each_cpu-in-rt-code.patch -# Enable full RT cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch + +softirq-preempt-fix-3-re.txt + +rt-introduce-cpu-chill.patch +fs-dcache-use-cpu-chill-in-trylock-loops.patch +fs-more-cpu-chill-fixups.patch +net-use-cpu-chill.patch + +# Enable full RT kconfig-disable-a-few-options-rt.patch kconfig-preempt-rt-full.patch diff --git a/debian/patches/features/all/rt/softirq-preempt-fix-3-re.txt b/debian/patches/features/all/rt/softirq-preempt-fix-3-re.txt new file mode 100644 index 000000000..e10cffec3 --- /dev/null +++ b/debian/patches/features/all/rt/softirq-preempt-fix-3-re.txt @@ -0,0 +1,153 @@ +Subject: softirq: Check preemption after reenabling interrupts +From: Thomas Gleixner +Date: Sun, 13 Nov 2011 17:17:09 +0100 (CET) + +raise_softirq_irqoff() disables interrupts and wakes the softirq +daemon, but after reenabling interrupts there is no preemption check, +so the execution of the softirq thread might be delayed arbitrarily. + +In principle we could add that check to local_irq_enable/restore, but +that's overkill as the rasie_softirq_irqoff() sections are the only +ones which show this behaviour. + +Reported-by: Carsten Emde +Signed-off-by: Thomas Gleixner +Cc: stable-rt@vger.kernel.org +--- + block/blk-iopoll.c | 3 +++ + block/blk-softirq.c | 3 +++ + include/linux/preempt.h | 3 +++ + net/core/dev.c | 6 ++++++ + 4 files changed, 15 insertions(+) + +Index: linux-3.2/block/blk-iopoll.c +=================================================================== +--- linux-3.2.orig/block/blk-iopoll.c ++++ linux-3.2/block/blk-iopoll.c +@@ -38,6 +38,7 @@ void blk_iopoll_sched(struct blk_iopoll + list_add_tail(&iop->list, &__get_cpu_var(blk_cpu_iopoll)); + __raise_softirq_irqoff(BLOCK_IOPOLL_SOFTIRQ); + local_irq_restore(flags); ++ preempt_check_resched_rt(); + } + EXPORT_SYMBOL(blk_iopoll_sched); + +@@ -135,6 +136,7 @@ static void blk_iopoll_softirq(struct so + __raise_softirq_irqoff(BLOCK_IOPOLL_SOFTIRQ); + + local_irq_enable(); ++ preempt_check_resched_rt(); + } + + /** +@@ -204,6 +206,7 @@ static int __cpuinit blk_iopoll_cpu_noti + &__get_cpu_var(blk_cpu_iopoll)); + __raise_softirq_irqoff(BLOCK_IOPOLL_SOFTIRQ); + local_irq_enable(); ++ preempt_check_resched_rt(); + } + + return NOTIFY_OK; +Index: linux-3.2/block/blk-softirq.c +=================================================================== +--- linux-3.2.orig/block/blk-softirq.c ++++ linux-3.2/block/blk-softirq.c +@@ -50,6 +50,7 @@ static void trigger_softirq(void *data) + raise_softirq_irqoff(BLOCK_SOFTIRQ); + + local_irq_restore(flags); ++ preempt_check_resched_rt(); + } + + /* +@@ -92,6 +93,7 @@ static int __cpuinit blk_cpu_notify(stru + &__get_cpu_var(blk_cpu_done)); + raise_softirq_irqoff(BLOCK_SOFTIRQ); + local_irq_enable(); ++ preempt_check_resched_rt(); + } + + return NOTIFY_OK; +@@ -150,6 +152,7 @@ do_local: + goto do_local; + + local_irq_restore(flags); ++ preempt_check_resched_rt(); + } + + /** +Index: linux-3.2/include/linux/preempt.h +=================================================================== +--- linux-3.2.orig/include/linux/preempt.h ++++ linux-3.2/include/linux/preempt.h +@@ -56,8 +56,10 @@ do { \ + + #ifndef CONFIG_PREEMPT_RT_BASE + # define preempt_enable_no_resched() __preempt_enable_no_resched() ++# define preempt_check_resched_rt() do { } while (0) + #else + # define preempt_enable_no_resched() preempt_enable() ++# define preempt_check_resched_rt() preempt_check_resched() + #endif + + #define preempt_enable() \ +@@ -105,6 +107,7 @@ do { \ + #define preempt_disable_notrace() do { } while (0) + #define preempt_enable_no_resched_notrace() do { } while (0) + #define preempt_enable_notrace() do { } while (0) ++#define preempt_check_resched_rt() do { } while (0) + + #endif /* CONFIG_PREEMPT_COUNT */ + +Index: linux-3.2/net/core/dev.c +=================================================================== +--- linux-3.2.orig/net/core/dev.c ++++ linux-3.2/net/core/dev.c +@@ -1779,6 +1779,7 @@ static inline void __netif_reschedule(st + sd->output_queue_tailp = &q->next_sched; + raise_softirq_irqoff(NET_TX_SOFTIRQ); + local_irq_restore(flags); ++ preempt_check_resched_rt(); + } + + void __netif_schedule(struct Qdisc *q) +@@ -1800,6 +1801,7 @@ void dev_kfree_skb_irq(struct sk_buff *s + sd->completion_queue = skb; + raise_softirq_irqoff(NET_TX_SOFTIRQ); + local_irq_restore(flags); ++ preempt_check_resched_rt(); + } + } + EXPORT_SYMBOL(dev_kfree_skb_irq); +@@ -2969,6 +2971,7 @@ enqueue: + rps_unlock(sd); + + local_irq_restore(flags); ++ preempt_check_resched_rt(); + + atomic_long_inc(&skb->dev->rx_dropped); + kfree_skb(skb); +@@ -3789,6 +3792,7 @@ static void net_rps_action_and_irq_enabl + } else + #endif + local_irq_enable(); ++ preempt_check_resched_rt(); + } + + static int process_backlog(struct napi_struct *napi, int quota) +@@ -3861,6 +3865,7 @@ void __napi_schedule(struct napi_struct + local_irq_save(flags); + ____napi_schedule(&__get_cpu_var(softnet_data), n); + local_irq_restore(flags); ++ preempt_check_resched_rt(); + } + EXPORT_SYMBOL(__napi_schedule); + +@@ -6401,6 +6406,7 @@ static int dev_cpu_callback(struct notif + + raise_softirq_irqoff(NET_TX_SOFTIRQ); + local_irq_enable(); ++ preempt_check_resched_rt(); + + /* Process offline CPU's input_pkt_queue */ + while ((skb = __skb_dequeue(&oldsd->process_queue))) { diff --git a/debian/patches/features/all/rt/staging-pohmelfs-convert-struct-fs-lock-usage-to-.patch b/debian/patches/features/all/rt/staging-pohmelfs-convert-struct-fs-lock-usage-to-.patch new file mode 100644 index 000000000..3a220965b --- /dev/null +++ b/debian/patches/features/all/rt/staging-pohmelfs-convert-struct-fs-lock-usage-to-.patch @@ -0,0 +1,54 @@ +From 0bf0d69e1a358e93e5c9b256bb18cab4041e7d8f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= +Date: Sun, 11 Mar 2012 17:14:22 +0100 +Subject: [PATCH RT] staging/pohmelfs: convert struct fs->lock usage to seq_spin_{,un}lock +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This fixes: + + drivers/staging/pohmelfs/path_entry.c:47:2: warning: passing argument 1 of ‘rt_spin_lock’ from incompatible pointer type [enabled by default] + include/linux/spinlock_rt.h:19:56: note: expected ‘struct spinlock_t *’ but argument is of type ‘struct seqlock_t *’ + drivers/staging/pohmelfs/path_entry.c:49:2: warning: passing argument 1 of ‘rt_spin_unlock’ from incompatible pointer type [enabled by default] + include/linux/spinlock_rt.h:22:56: note: expected ‘struct spinlock_t *’ but argument is of type ‘struct seqlock_t *’ + drivers/staging/pohmelfs/path_entry.c:95:2: warning: passing argument 1 of ‘rt_spin_lock’ from incompatible pointer type [enabled by default] + include/linux/spinlock_rt.h:19:56: note: expected ‘struct spinlock_t *’ but argument is of type ‘struct seqlock_t *’ + drivers/staging/pohmelfs/path_entry.c:97:2: warning: passing argument 1 of ‘rt_spin_unlock’ from incompatible pointer type [enabled by default] + include/linux/spinlock_rt.h:22:56: note: expected ‘struct spinlock_t *’ but argument is of type ‘struct seqlock_t *’ + +Signed-off-by: Uwe Kleine-König +Forwarded: http://mid.gmane.org/1331482999-32252-1-git-send-email-u.kleine-koenig@pengutronix.de +--- + + drivers/staging/pohmelfs/path_entry.c | 8 ++++---- + 1 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/drivers/staging/pohmelfs/path_entry.c b/drivers/staging/pohmelfs/path_entry.c +index 400a9fc..fc0c3fe 100644 +--- a/drivers/staging/pohmelfs/path_entry.c ++++ b/drivers/staging/pohmelfs/path_entry.c +@@ -44,9 +44,9 @@ int pohmelfs_construct_path_string(struct pohmelfs_inode *pi, void *data, int le + return -ENOENT; + } + +- spin_lock(¤t->fs->lock); ++ seq_spin_lock(¤t->fs->lock); + path.mnt = mntget(current->fs->root.mnt); +- spin_unlock(¤t->fs->lock); ++ seq_spin_unlock(¤t->fs->lock); + + path.dentry = d; + +@@ -92,9 +92,9 @@ int pohmelfs_path_length(struct pohmelfs_inode *pi) + return -ENOENT; + } + +- spin_lock(¤t->fs->lock); ++ seq_spin_lock(¤t->fs->lock); + root = dget(current->fs->root.dentry); +- spin_unlock(¤t->fs->lock); ++ seq_spin_unlock(¤t->fs->lock); + + rename_retry: + len = 1; /* Root slash */ diff --git a/debian/patches/series/base b/debian/patches/series/base index 96e066015..306a0d1b8 100644 --- a/debian/patches/series/base +++ b/debian/patches/series/base @@ -52,3 +52,4 @@ + features/all/fs-hardlink-creation-restrictions.patch + features/all/fs-hardlink-creation-restrictions-fix.patch + features/all/fs-hardlink-creation-restriction-cleanup.patch ++ bugfix/all/CIFS-Fix-a-spurious-error-in-cifs_push_posix_locks.patch diff --git a/debian/patches/series/base-extra b/debian/patches/series/base-extra index 3558ef466..a83c1a0e7 100644 --- a/debian/patches/series/base-extra +++ b/debian/patches/series/base-extra @@ -260,5 +260,12 @@ + features/all/rt/rfc-sched-rt-fix-wait_task_interactive-to-test-rt_spin_lock-state.patch featureset=rt + features/all/rt/rfc-lglock-rt-use-non-rt-for_each_cpu-in-rt-code.patch featureset=rt + features/all/rt/cpu-rt-make-hotplug-lock-a-sleeping-spinlock-on-rt.patch featureset=rt ++ features/all/rt/softirq-preempt-fix-3-re.txt featureset=rt ++ features/all/rt/rt-introduce-cpu-chill.patch featureset=rt ++ features/all/rt/fs-dcache-use-cpu-chill-in-trylock-loops.patch featureset=rt ++ features/all/rt/fs-more-cpu-chill-fixups.patch featureset=rt ++ features/all/rt/net-use-cpu-chill.patch featureset=rt + features/all/rt/kconfig-disable-a-few-options-rt.patch featureset=rt + features/all/rt/kconfig-preempt-rt-full.patch featureset=rt ++ features/all/rt/fix-rt+link-creation-restrictions featureset=rt ++ features/all/rt/staging-pohmelfs-convert-struct-fs-lock-usage-to-.patch featureset=rt diff --git a/debian/rules.real b/debian/rules.real index ce7dca952..a7f56c372 100644 --- a/debian/rules.real +++ b/debian/rules.real @@ -215,9 +215,7 @@ install-headers_$(ARCH)_$(FEATURESET): $(STAMPS_DIR)/source_$(ARCH)_$(FEATURESET | \ cpio -pd --preserve-modification-time '$(CURDIR)/$(DIR)' - dh_link \ - /usr/lib/$(PACKAGE_NAME_KBUILD)/Kbuild $(BASE_DIR)/Kbuild \ - /usr/lib/$(PACKAGE_NAME_KBUILD)/scripts $(BASE_DIR)/scripts + dh_link /usr/lib/$(PACKAGE_NAME_KBUILD)/scripts $(BASE_DIR)/scripts +$(MAKE_SELF) install-base