From: Greg Kroah-Hartman Date: Wed, 11 Aug 2010 20:04:16 +0000 (-0700) Subject: .34 patches X-Git-Tag: v2.6.32.19~11 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3d3a328013175a12f978a3427d632259a6c7e350;p=thirdparty%2Fkernel%2Fstable-queue.git .34 patches --- diff --git a/queue-2.6.34/arm-6280-1-imx-fix-build-failure-when-including-mach-gpio.h-without-linux-spinlock.h.patch b/queue-2.6.34/arm-6280-1-imx-fix-build-failure-when-including-mach-gpio.h-without-linux-spinlock.h.patch new file mode 100644 index 00000000000..9b6bc3f6b01 --- /dev/null +++ b/queue-2.6.34/arm-6280-1-imx-fix-build-failure-when-including-mach-gpio.h-without-linux-spinlock.h.patch @@ -0,0 +1,41 @@ +From 868003ca7ad17ac6c1606dc36101f10a7825b399 Mon Sep 17 00:00:00 2001 +From: Uwe Kleine-König +Date: Mon, 2 Aug 2010 08:32:22 +0100 +Subject: ARM: 6280/1: imx: Fix build failure when including without +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Uwe Kleine-König + +commit 868003ca7ad17ac6c1606dc36101f10a7825b399 upstream. + +This is a follow up to + + 14cb0de (arm/imx/gpio: add spinlock protection) + +and fixes the following build failure: + + CC arch/arm/mach-imx/pcm970-baseboard.o + In file included from arch/arm/include/asm/gpio.h:6, + from include/linux/gpio.h:8, + from arch/arm/mach-imx/pcm970-baseboard.c:20: + arch/arm/plat-mxc/include/mach/gpio.h:40: error: expected specifier-qualifier-list before 'spinlock_t' + +Signed-off-by: Uwe Kleine-König +Signed-off-by: Russell King + +--- + arch/arm/plat-mxc/include/mach/gpio.h | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/arm/plat-mxc/include/mach/gpio.h ++++ b/arch/arm/plat-mxc/include/mach/gpio.h +@@ -19,6 +19,7 @@ + #ifndef __ASM_ARCH_MXC_GPIO_H__ + #define __ASM_ARCH_MXC_GPIO_H__ + ++#include + #include + #include + diff --git a/queue-2.6.34/arm-6299-1-errata-tlbiasidis-and-tlbimvais-operations-can-broadcast-a-faulty-asid.patch b/queue-2.6.34/arm-6299-1-errata-tlbiasidis-and-tlbimvais-operations-can-broadcast-a-faulty-asid.patch new file mode 100644 index 00000000000..747a1c30ca3 --- /dev/null +++ b/queue-2.6.34/arm-6299-1-errata-tlbiasidis-and-tlbimvais-operations-can-broadcast-a-faulty-asid.patch @@ -0,0 +1,75 @@ +From cdf357f1e13a08a11261edacb3083746f65c1ed9 Mon Sep 17 00:00:00 2001 +From: Will Deacon +Date: Thu, 5 Aug 2010 11:20:51 +0100 +Subject: ARM: 6299/1: errata: TLBIASIDIS and TLBIMVAIS operations can broadcast a faulty ASID + +From: Will Deacon + +commit cdf357f1e13a08a11261edacb3083746f65c1ed9 upstream. + +On versions of the Cortex-A9 prior to r2p0, performing TLB invalidations by +ASID match can result in the incorrect ASID being broadcast to other CPUs. +As a consequence of this, the targetted TLB entries are not invalidated +across the system. + +This workaround changes the TLB flushing routines to invalidate entries +regardless of the ASID. + +Tested-by: Rob Clark +Acked-by: Catalin Marinas +Signed-off-by: Will Deacon +Signed-off-by: Russell King +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/Kconfig | 12 ++++++++++++ + arch/arm/include/asm/tlbflush.h | 8 ++++++++ + 2 files changed, 20 insertions(+) + +--- a/arch/arm/Kconfig ++++ b/arch/arm/Kconfig +@@ -1025,6 +1025,18 @@ config PL310_ERRATA_588369 + is not correctly implemented in PL310 as clean lines are not + invalidated as a result of these operations. Note that this errata + uses Texas Instrument's secure monitor api. ++ ++config ARM_ERRATA_720789 ++ bool "ARM errata: TLBIASIDIS and TLBIMVAIS operations can broadcast a faulty ASID" ++ depends on CPU_V7 && SMP ++ help ++ This option enables the workaround for the 720789 Cortex-A9 (prior to ++ r2p0) erratum. A faulty ASID can be sent to the other CPUs for the ++ broadcasted CP15 TLB maintenance operations TLBIASIDIS and TLBIMVAIS. ++ As a consequence of this erratum, some TLB entries which should be ++ invalidated are not, resulting in an incoherency in the system page ++ tables. The workaround changes the TLB flushing routines to invalidate ++ entries regardless of the ASID. + endmenu + + source "arch/arm/common/Kconfig" +--- a/arch/arm/include/asm/tlbflush.h ++++ b/arch/arm/include/asm/tlbflush.h +@@ -378,7 +378,11 @@ static inline void local_flush_tlb_mm(st + if (tlb_flag(TLB_V6_I_ASID)) + asm("mcr p15, 0, %0, c8, c5, 2" : : "r" (asid) : "cc"); + if (tlb_flag(TLB_V7_UIS_ASID)) ++#ifdef CONFIG_ARM_ERRATA_720789 ++ asm("mcr p15, 0, %0, c8, c3, 0" : : "r" (zero) : "cc"); ++#else + asm("mcr p15, 0, %0, c8, c3, 2" : : "r" (asid) : "cc"); ++#endif + + if (tlb_flag(TLB_BTB)) { + /* flush the branch target cache */ +@@ -424,7 +428,11 @@ local_flush_tlb_page(struct vm_area_stru + if (tlb_flag(TLB_V6_I_PAGE)) + asm("mcr p15, 0, %0, c8, c5, 1" : : "r" (uaddr) : "cc"); + if (tlb_flag(TLB_V7_UIS_PAGE)) ++#ifdef CONFIG_ARM_ERRATA_720789 ++ asm("mcr p15, 0, %0, c8, c3, 3" : : "r" (uaddr & PAGE_MASK) : "cc"); ++#else + asm("mcr p15, 0, %0, c8, c3, 1" : : "r" (uaddr) : "cc"); ++#endif + + if (tlb_flag(TLB_BTB)) { + /* flush the branch target cache */ diff --git a/queue-2.6.34/arp_notify-allow-drivers-to-explicitly-request-a-notification-event.patch b/queue-2.6.34/arp_notify-allow-drivers-to-explicitly-request-a-notification-event.patch new file mode 100644 index 00000000000..addb6e64fd5 --- /dev/null +++ b/queue-2.6.34/arp_notify-allow-drivers-to-explicitly-request-a-notification-event.patch @@ -0,0 +1,91 @@ +From 06c4648d46d1b757d6b9591a86810be79818b60c Mon Sep 17 00:00:00 2001 +From: Ian Campbell +Date: Wed, 26 May 2010 00:09:42 +0000 +Subject: arp_notify: allow drivers to explicitly request a notification event. + +From: Ian Campbell + +commit 06c4648d46d1b757d6b9591a86810be79818b60c upstream. + +Currently such notifications are only generated when the device comes up or the +address changes. However one use case for these notifications is to enable +faster network recovery after a virtual machine migration (by causing switches +to relearn their MAC tables). A migration appears to the network stack as a +temporary loss of carrier and therefore does not trigger either of the current +conditions. Rather than adding carrier up as a trigger (which can cause issues +when interfaces a flapping) simply add an interface which the driver can use +to explicitly trigger the notification. + +Signed-off-by: Ian Campbell +Cc: Stephen Hemminger +Cc: Jeremy Fitzhardinge +Cc: David S. Miller +Cc: netdev@vger.kernel.org +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/netdevice.h | 2 ++ + include/linux/notifier.h | 1 + + net/ipv4/devinet.c | 1 + + net/sched/sch_generic.c | 18 ++++++++++++++++++ + 4 files changed, 22 insertions(+) + +--- a/include/linux/netdevice.h ++++ b/include/linux/netdevice.h +@@ -1661,6 +1661,8 @@ extern void netif_carrier_on(struct net_ + + extern void netif_carrier_off(struct net_device *dev); + ++extern void netif_notify_peers(struct net_device *dev); ++ + /** + * netif_dormant_on - mark device as dormant. + * @dev: network device +--- a/include/linux/notifier.h ++++ b/include/linux/notifier.h +@@ -203,6 +203,7 @@ static inline int notifier_to_errno(int + #define NETDEV_BONDING_NEWTYPE 0x000F + #define NETDEV_POST_INIT 0x0010 + #define NETDEV_UNREGISTER_BATCH 0x0011 ++#define NETDEV_NOTIFY_PEERS 0x0012 + + #define SYS_DOWN 0x0001 /* Notify of system down */ + #define SYS_RESTART SYS_DOWN +--- a/net/ipv4/devinet.c ++++ b/net/ipv4/devinet.c +@@ -1081,6 +1081,7 @@ static int inetdev_event(struct notifier + } + ip_mc_up(in_dev); + /* fall through */ ++ case NETDEV_NOTIFY_PEERS: + case NETDEV_CHANGEADDR: + /* Send gratuitous ARP to notify of link change */ + if (IN_DEV_ARP_NOTIFY(in_dev)) { +--- a/net/sched/sch_generic.c ++++ b/net/sched/sch_generic.c +@@ -325,6 +325,24 @@ void netif_carrier_off(struct net_device + } + EXPORT_SYMBOL(netif_carrier_off); + ++/** ++ * netif_notify_peers - notify network peers about existence of @dev ++ * @dev: network device ++ * ++ * Generate traffic such that interested network peers are aware of ++ * @dev, such as by generating a gratuitous ARP. This may be used when ++ * a device wants to inform the rest of the network about some sort of ++ * reconfiguration such as a failover event or virtual machine ++ * migration. ++ */ ++void netif_notify_peers(struct net_device *dev) ++{ ++ rtnl_lock(); ++ call_netdevice_notifiers(NETDEV_NOTIFY_PEERS, dev); ++ rtnl_unlock(); ++} ++EXPORT_SYMBOL(netif_notify_peers); ++ + /* "NOOP" scheduler: the best scheduler, recommended for all interfaces + under all circumstances. It is difficult to invent anything faster or + cheaper. diff --git a/queue-2.6.34/bio-fs-update-rwa_mask-reada-and-swrite-to-match-the-corresponding-bio_rw_-bits.patch b/queue-2.6.34/bio-fs-update-rwa_mask-reada-and-swrite-to-match-the-corresponding-bio_rw_-bits.patch new file mode 100644 index 00000000000..77c873b22af --- /dev/null +++ b/queue-2.6.34/bio-fs-update-rwa_mask-reada-and-swrite-to-match-the-corresponding-bio_rw_-bits.patch @@ -0,0 +1,54 @@ +From aca27ba9618276dd2f777bcd5a1419589ccf1ca8 Mon Sep 17 00:00:00 2001 +From: Tejun Heo +Date: Tue, 3 Aug 2010 13:14:33 +0200 +Subject: bio, fs: update RWA_MASK, READA and SWRITE to match the corresponding BIO_RW_* bits + +From: Tejun Heo + +commit aca27ba9618276dd2f777bcd5a1419589ccf1ca8 upstream. + +Commit a82afdf (block: use the same failfast bits for bio and request) +moved BIO_RW_* bits around such that they match up with REQ_* bits. +Unfortunately, fs.h hard coded RW_MASK, RWA_MASK, READ, WRITE, READA +and SWRITE as 0, 1, 2 and 3, and expected them to match with BIO_RW_* +bits. READ/WRITE didn't change but BIO_RW_AHEAD was moved to bit 4 +instead of bit 1, breaking RWA_MASK, READA and SWRITE. + +This patch updates RWA_MASK, READA and SWRITE such that they match the +BIO_RW_* bits again. A follow up patch will update the definitions to +directly use BIO_RW_* bits so that this kind of breakage won't happen +again. + +Neil also spotted missing RWA_MASK conversion. + +Stable: The offending commit a82afdf was released with v2.6.32, so +this patch should be applied to all kernels since then but it must +_NOT_ be applied to kernels earlier than that. + +Signed-off-by: Tejun Heo +Reported-and-bisected-by: Vladislav Bolkhovitin +Root-caused-by: Neil Brown +Signed-off-by: Jens Axboe +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/fs.h | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/include/linux/fs.h ++++ b/include/linux/fs.h +@@ -145,11 +145,11 @@ struct inodes_stat_t { + * + */ + #define RW_MASK 1 +-#define RWA_MASK 2 ++#define RWA_MASK 16 + #define READ 0 + #define WRITE 1 +-#define READA 2 /* read-ahead - don't block if no resources */ +-#define SWRITE 3 /* for ll_rw_block() - wait for buffer lock */ ++#define READA 16 /* readahead - don't block if no resources */ ++#define SWRITE 17 /* for ll_rw_block(), wait for buffer lock */ + #define READ_SYNC (READ | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_UNPLUG)) + #define READ_META (READ | (1 << BIO_RW_META)) + #define WRITE_SYNC_PLUG (WRITE | (1 << BIO_RW_SYNCIO) | (1 << BIO_RW_NOIDLE)) diff --git a/queue-2.6.34/blkdev-cgroup-whitelist-permission-fix.patch b/queue-2.6.34/blkdev-cgroup-whitelist-permission-fix.patch new file mode 100644 index 00000000000..503ec0565c7 --- /dev/null +++ b/queue-2.6.34/blkdev-cgroup-whitelist-permission-fix.patch @@ -0,0 +1,57 @@ +From b7300b78d1a87625975a799a109a2f98d77757c8 Mon Sep 17 00:00:00 2001 +From: Chris Wright +Date: Tue, 10 Aug 2010 18:02:55 -0700 +Subject: blkdev: cgroup whitelist permission fix + +From: Chris Wright + +commit b7300b78d1a87625975a799a109a2f98d77757c8 upstream. + +The cgroup device whitelist code gets confused when trying to grant +permission to a disk partition that is not currently open. Part of +blkdev_open() includes __blkdev_get() on the whole disk. + +Basically, the only ways to reliably allow a cgroup access to a partition +on a block device when using the whitelist are to 1) also give it access +to the whole block device or 2) make sure the partition is already open in +a different context. + +The patch avoids the cgroup check for the whole disk case when opening a +partition. + +Addresses https://bugzilla.redhat.com/show_bug.cgi?id=589662 + +Signed-off-by: Chris Wright +Acked-by: Serge E. Hallyn +Tested-by: Serge E. Hallyn +Reported-by: Vivek Goyal +Cc: Al Viro +Cc: Christoph Hellwig +Cc: "Daniel P. Berrange" +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + fs/block_dev.c | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +--- a/fs/block_dev.c ++++ b/fs/block_dev.c +@@ -1192,10 +1192,12 @@ static int __blkdev_get(struct block_dev + /* + * hooks: /n/, see "layering violations". + */ +- ret = devcgroup_inode_permission(bdev->bd_inode, perm); +- if (ret != 0) { +- bdput(bdev); +- return ret; ++ if (!for_part) { ++ ret = devcgroup_inode_permission(bdev->bd_inode, perm); ++ if (ret != 0) { ++ bdput(bdev); ++ return ret; ++ } + } + + lock_kernel(); diff --git a/queue-2.6.34/bluetooth-added-support-for-controller-shipped-with-imac-i5.patch b/queue-2.6.34/bluetooth-added-support-for-controller-shipped-with-imac-i5.patch new file mode 100644 index 00000000000..7b62e10af1f --- /dev/null +++ b/queue-2.6.34/bluetooth-added-support-for-controller-shipped-with-imac-i5.patch @@ -0,0 +1,44 @@ +From 0a79f67445de50ca0a8dc1d34f3cc406d89c28b2 Mon Sep 17 00:00:00 2001 +From: Cyril Lacoux +Date: Wed, 14 Jul 2010 10:29:27 +0400 +Subject: Bluetooth: Added support for controller shipped with iMac i5 + +From: Cyril Lacoux + +commit 0a79f67445de50ca0a8dc1d34f3cc406d89c28b2 upstream. + +Device class is ff(vend.) instead of e0(wlcon). + +Output from command `usb-devices`: +T: Bus=01 Lev=03 Prnt=03 Port=00 Cnt=01 Dev#= 6 Spd=12 MxCh= 0 +D: Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs= 1 +P: Vendor=05ac ProdID=8215 Rev=01.82 +S: Manufacturer=Apple Inc. +S: Product=Bluetooth USB Host Controller +S: SerialNumber=7C6D62936607 +C: #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA +I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb +I: If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb +I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) +I: If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=00 Driver=(none) + +Signed-off-by: Cyril Lacoux +Signed-off-by: Marcel Holtmann +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/bluetooth/btusb.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/bluetooth/btusb.c ++++ b/drivers/bluetooth/btusb.c +@@ -59,6 +59,9 @@ static struct usb_device_id btusb_table[ + /* Generic Bluetooth USB device */ + { USB_DEVICE_INFO(0xe0, 0x01, 0x01) }, + ++ /* Apple iMac11,1 */ ++ { USB_DEVICE(0x05ac, 0x8215) }, ++ + /* AVM BlueFRITZ! USB v2.0 */ + { USB_DEVICE(0x057c, 0x3800) }, + diff --git a/queue-2.6.34/drm-edid-fix-the-hdtv-hack-sync-adjustment.patch b/queue-2.6.34/drm-edid-fix-the-hdtv-hack-sync-adjustment.patch new file mode 100644 index 00000000000..a9fe95b60c0 --- /dev/null +++ b/queue-2.6.34/drm-edid-fix-the-hdtv-hack-sync-adjustment.patch @@ -0,0 +1,33 @@ +From a4967de6cbb260ad0f6612a1d2035e119ef1578f Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Wed, 28 Jul 2010 07:40:32 +1000 +Subject: drm/edid: Fix the HDTV hack sync adjustment + +From: Adam Jackson + +commit a4967de6cbb260ad0f6612a1d2035e119ef1578f upstream. + +We're adjusting horizontal timings only here, moving vsync was just a +slavish translation of a typo in the X server. + +Signed-off-by: Adam Jackson +Signed-off-by: Dave Airlie +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/drm_edid.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/gpu/drm/drm_edid.c ++++ b/drivers/gpu/drm/drm_edid.c +@@ -577,8 +577,8 @@ struct drm_display_mode *drm_mode_std(st + mode = drm_cvt_mode(dev, hsize, vsize, vrefresh_rate, 0, 0, + false); + mode->hdisplay = 1366; +- mode->vsync_start = mode->vsync_start - 1; +- mode->vsync_end = mode->vsync_end - 1; ++ mode->hsync_start = mode->hsync_start - 1; ++ mode->hsync_end = mode->hsync_end - 1; + return mode; + } + mode = NULL; diff --git a/queue-2.6.34/drm-i915-use-rsen-instead-of-htplg-for-tfp410-monitor-detection.patch b/queue-2.6.34/drm-i915-use-rsen-instead-of-htplg-for-tfp410-monitor-detection.patch new file mode 100644 index 00000000000..c0287d7bf01 --- /dev/null +++ b/queue-2.6.34/drm-i915-use-rsen-instead-of-htplg-for-tfp410-monitor-detection.patch @@ -0,0 +1,33 @@ +From f458823b864c6def488f951a79986fa205aba4f1 Mon Sep 17 00:00:00 2001 +From: Dave Müller +Date: Fri, 4 Jun 2010 16:39:59 -0700 +Subject: drm/i915: Use RSEN instead of HTPLG for tfp410 monitor detection. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Dave Müller + +commit f458823b864c6def488f951a79986fa205aba4f1 upstream. + +Presence detection of a digital monitor seems not to be reliable using +the HTPLG bit. + +Dave Müller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/dvo_tfp410.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/gpu/drm/i915/dvo_tfp410.c ++++ b/drivers/gpu/drm/i915/dvo_tfp410.c +@@ -216,7 +216,7 @@ static enum drm_connector_status tfp410_ + uint8_t ctl2; + + if (tfp410_readb(dvo, TFP410_CTL_2, &ctl2)) { +- if (ctl2 & TFP410_CTL_2_HTPLG) ++ if (ctl2 & TFP410_CTL_2_RSEN) + ret = connector_status_connected; + else + ret = connector_status_disconnected; diff --git a/queue-2.6.34/ecryptfs-handle-ioctl-calls-with-unlocked-and-compat-functions.patch b/queue-2.6.34/ecryptfs-handle-ioctl-calls-with-unlocked-and-compat-functions.patch new file mode 100644 index 00000000000..66710c02786 --- /dev/null +++ b/queue-2.6.34/ecryptfs-handle-ioctl-calls-with-unlocked-and-compat-functions.patch @@ -0,0 +1,107 @@ +From c43f7b8fb03be8bcc579bfc4e6ab70eac887ab55 Mon Sep 17 00:00:00 2001 +From: Tyler Hicks +Date: Tue, 3 Nov 2009 11:45:11 -0600 +Subject: eCryptfs: Handle ioctl calls with unlocked and compat functions + +From: Tyler Hicks + +commit c43f7b8fb03be8bcc579bfc4e6ab70eac887ab55 upstream. + +Lower filesystems that only implemented unlocked_ioctl weren't being +passed ioctl calls because eCryptfs only checked for +lower_file->f_op->ioctl and returned -ENOTTY if it was NULL. + +eCryptfs shouldn't implement ioctl(), since it doesn't require the BKL. +This patch introduces ecryptfs_unlocked_ioctl() and +ecryptfs_compat_ioctl(), which passes the calls on to the lower file +system. + +https://bugs.launchpad.net/ecryptfs/+bug/469664 + +Reported-by: James Dupin +Signed-off-by: Tyler Hicks +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ecryptfs/file.c | 56 +++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 35 insertions(+), 21 deletions(-) + +--- a/fs/ecryptfs/file.c ++++ b/fs/ecryptfs/file.c +@@ -294,12 +294,40 @@ static int ecryptfs_fasync(int fd, struc + return rc; + } + +-static int ecryptfs_ioctl(struct inode *inode, struct file *file, +- unsigned int cmd, unsigned long arg); ++static long ++ecryptfs_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg) ++{ ++ struct file *lower_file = NULL; ++ long rc = -ENOTTY; ++ ++ if (ecryptfs_file_to_private(file)) ++ lower_file = ecryptfs_file_to_lower(file); ++ if (lower_file && lower_file->f_op && lower_file->f_op->unlocked_ioctl) ++ rc = lower_file->f_op->unlocked_ioctl(lower_file, cmd, arg); ++ return rc; ++} ++ ++#ifdef CONFIG_COMPAT ++static long ++ecryptfs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) ++{ ++ struct file *lower_file = NULL; ++ long rc = -ENOIOCTLCMD; ++ ++ if (ecryptfs_file_to_private(file)) ++ lower_file = ecryptfs_file_to_lower(file); ++ if (lower_file && lower_file->f_op && lower_file->f_op->compat_ioctl) ++ rc = lower_file->f_op->compat_ioctl(lower_file, cmd, arg); ++ return rc; ++} ++#endif + + const struct file_operations ecryptfs_dir_fops = { + .readdir = ecryptfs_readdir, +- .ioctl = ecryptfs_ioctl, ++ .unlocked_ioctl = ecryptfs_unlocked_ioctl, ++#ifdef CONFIG_COMPAT ++ .compat_ioctl = ecryptfs_compat_ioctl, ++#endif + .open = ecryptfs_open, + .flush = ecryptfs_flush, + .release = ecryptfs_release, +@@ -315,7 +343,10 @@ const struct file_operations ecryptfs_ma + .write = do_sync_write, + .aio_write = generic_file_aio_write, + .readdir = ecryptfs_readdir, +- .ioctl = ecryptfs_ioctl, ++ .unlocked_ioctl = ecryptfs_unlocked_ioctl, ++#ifdef CONFIG_COMPAT ++ .compat_ioctl = ecryptfs_compat_ioctl, ++#endif + .mmap = generic_file_mmap, + .open = ecryptfs_open, + .flush = ecryptfs_flush, +@@ -324,20 +355,3 @@ const struct file_operations ecryptfs_ma + .fasync = ecryptfs_fasync, + .splice_read = generic_file_splice_read, + }; +- +-static int +-ecryptfs_ioctl(struct inode *inode, struct file *file, unsigned int cmd, +- unsigned long arg) +-{ +- int rc = 0; +- struct file *lower_file = NULL; +- +- if (ecryptfs_file_to_private(file)) +- lower_file = ecryptfs_file_to_lower(file); +- if (lower_file && lower_file->f_op && lower_file->f_op->ioctl) +- rc = lower_file->f_op->ioctl(ecryptfs_inode_to_lower(inode), +- lower_file, cmd, arg); +- else +- rc = -ENOTTY; +- return rc; +-} diff --git a/queue-2.6.34/ecryptfs-release-reference-to-lower-mount-if-interpose-fails.patch b/queue-2.6.34/ecryptfs-release-reference-to-lower-mount-if-interpose-fails.patch new file mode 100644 index 00000000000..122d563a9e8 --- /dev/null +++ b/queue-2.6.34/ecryptfs-release-reference-to-lower-mount-if-interpose-fails.patch @@ -0,0 +1,44 @@ +From 31f73bee3e170b7cabb35db9e2f4bf7919b9d036 Mon Sep 17 00:00:00 2001 +From: Lino Sanfilippo +Date: Thu, 29 Jul 2010 13:01:36 +0200 +Subject: ecryptfs: release reference to lower mount if interpose fails + +From: Lino Sanfilippo + +commit 31f73bee3e170b7cabb35db9e2f4bf7919b9d036 upstream. + +In ecryptfs_lookup_and_interpose_lower() the lower mount is not decremented +if allocation of a dentry info struct failed. As a result the lower filesystem +cant be unmounted any more (since it is considered busy). This patch corrects +the reference counting. + +Signed-off-by: Lino Sanfilippo +Signed-off-by: Tyler Hicks +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ecryptfs/inode.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/fs/ecryptfs/inode.c ++++ b/fs/ecryptfs/inode.c +@@ -273,7 +273,7 @@ int ecryptfs_lookup_and_interpose_lower( + printk(KERN_ERR "%s: Out of memory whilst attempting " + "to allocate ecryptfs_dentry_info struct\n", + __func__); +- goto out_dput; ++ goto out_put; + } + ecryptfs_set_dentry_lower(ecryptfs_dentry, lower_dentry); + ecryptfs_set_dentry_lower_mnt(ecryptfs_dentry, lower_mnt); +@@ -348,8 +348,9 @@ int ecryptfs_lookup_and_interpose_lower( + out_free_kmem: + kmem_cache_free(ecryptfs_header_cache_2, page_virt); + goto out; +-out_dput: ++out_put: + dput(lower_dentry); ++ mntput(lower_mnt); + d_drop(ecryptfs_dentry); + out: + return rc; diff --git a/queue-2.6.34/fs-ecryptfs-file.c-introduce-missing-free.patch b/queue-2.6.34/fs-ecryptfs-file.c-introduce-missing-free.patch new file mode 100644 index 00000000000..0f4c2e9a481 --- /dev/null +++ b/queue-2.6.34/fs-ecryptfs-file.c-introduce-missing-free.patch @@ -0,0 +1,80 @@ +From ceeab92971e8af05c1e81a4ff2c271124b55bb9b Mon Sep 17 00:00:00 2001 +From: Julia Lawall +Date: Fri, 6 Aug 2010 22:58:49 +0200 +Subject: fs/ecryptfs/file.c: introduce missing free + +From: Julia Lawall + +commit ceeab92971e8af05c1e81a4ff2c271124b55bb9b upstream. + +The comments in the code indicate that file_info should be released if the +function fails. This releasing is done at the label out_free, not out. + +The semantic match that finds this problem is as follows: +(http://www.emn.fr/x-info/coccinelle/) + +// +@r exists@ +local idexpression x; +statement S; +expression E; +identifier f,f1,l; +position p1,p2; +expression *ptr != NULL; +@@ + +x@p1 = kmem_cache_zalloc(...); +... +if (x == NULL) S +<... when != x + when != if (...) { <+...x...+> } +( +x->f1 = E +| + (x->f1 == NULL || ...) +| + f(...,x->f1,...) +) +...> +( + return <+...x...+>; +| + return@p2 ...; +) + +@script:python@ +p1 << r.p1; +p2 << r.p2; +@@ + +print "* file: %s kmem_cache_zalloc %s" % (p1[0].file,p1[0].line) +// + +Signed-off-by: Julia Lawall +Signed-off-by: Tyler Hicks +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ecryptfs/file.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/fs/ecryptfs/file.c ++++ b/fs/ecryptfs/file.c +@@ -199,7 +199,7 @@ static int ecryptfs_open(struct inode *i + "the persistent file for the dentry with name " + "[%s]; rc = [%d]\n", __func__, + ecryptfs_dentry->d_name.name, rc); +- goto out; ++ goto out_free; + } + } + if ((ecryptfs_inode_to_private(inode)->lower_file->f_flags & O_RDONLY) +@@ -207,7 +207,7 @@ static int ecryptfs_open(struct inode *i + rc = -EPERM; + printk(KERN_WARNING "%s: Lower persistent file is RO; eCryptfs " + "file must hence be opened RO\n", __func__); +- goto out; ++ goto out_free; + } + ecryptfs_set_file_lower( + file, ecryptfs_inode_to_private(inode)->lower_file); diff --git a/queue-2.6.34/irq-add-new-irq-flag-irqf_no_suspend.patch b/queue-2.6.34/irq-add-new-irq-flag-irqf_no_suspend.patch new file mode 100644 index 00000000000..deac2545591 --- /dev/null +++ b/queue-2.6.34/irq-add-new-irq-flag-irqf_no_suspend.patch @@ -0,0 +1,70 @@ +From 685fd0b4ea3f0f1d5385610b0d5b57775a8d5842 Mon Sep 17 00:00:00 2001 +From: Ian Campbell +Date: Thu, 29 Jul 2010 11:16:32 +0100 +Subject: irq: Add new IRQ flag IRQF_NO_SUSPEND + +From: Ian Campbell + +commit 685fd0b4ea3f0f1d5385610b0d5b57775a8d5842 upstream. + +A small number of users of IRQF_TIMER are using it for the implied no +suspend behaviour on interrupts which are not timer interrupts. + +Therefore add a new IRQF_NO_SUSPEND flag, rename IRQF_TIMER to +__IRQF_TIMER and redefine IRQF_TIMER in terms of these new flags. + +Signed-off-by: Ian Campbell +Cc: Jeremy Fitzhardinge +Cc: Dmitry Torokhov +Cc: Benjamin Herrenschmidt +Cc: Paul Mackerras +Cc: Grant Likely +Cc: xen-devel@lists.xensource.com +Cc: linux-input@vger.kernel.org +Cc: linuxppc-dev@ozlabs.org +Cc: devicetree-discuss@lists.ozlabs.org +LKML-Reference: <1280398595-29708-1-git-send-email-ian.campbell@citrix.com> +Signed-off-by: Thomas Gleixner +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/interrupt.h | 7 ++++++- + kernel/irq/manage.c | 2 +- + 2 files changed, 7 insertions(+), 2 deletions(-) + +--- a/include/linux/interrupt.h ++++ b/include/linux/interrupt.h +@@ -52,16 +52,21 @@ + * IRQF_ONESHOT - Interrupt is not reenabled after the hardirq handler finished. + * Used by threaded interrupts which need to keep the + * irq line disabled until the threaded handler has been run. ++ * IRQF_NO_SUSPEND - Do not disable this IRQ during suspend ++ * + */ + #define IRQF_DISABLED 0x00000020 + #define IRQF_SAMPLE_RANDOM 0x00000040 + #define IRQF_SHARED 0x00000080 + #define IRQF_PROBE_SHARED 0x00000100 +-#define IRQF_TIMER 0x00000200 ++#define __IRQF_TIMER 0x00000200 + #define IRQF_PERCPU 0x00000400 + #define IRQF_NOBALANCING 0x00000800 + #define IRQF_IRQPOLL 0x00001000 + #define IRQF_ONESHOT 0x00002000 ++#define IRQF_NO_SUSPEND 0x00004000 ++ ++#define IRQF_TIMER (__IRQF_TIMER | IRQF_NO_SUSPEND) + + /* + * Bits used by threaded handlers: +--- a/kernel/irq/manage.c ++++ b/kernel/irq/manage.c +@@ -200,7 +200,7 @@ static inline int setup_affinity(unsigne + void __disable_irq(struct irq_desc *desc, unsigned int irq, bool suspend) + { + if (suspend) { +- if (!desc->action || (desc->action->flags & IRQF_TIMER)) ++ if (!desc->action || (desc->action->flags & IRQF_NO_SUSPEND)) + return; + desc->status |= IRQ_SUSPENDED; + } diff --git a/queue-2.6.34/jfs-don-t-allow-os2-xattr-namespace-overlap-with-others.patch b/queue-2.6.34/jfs-don-t-allow-os2-xattr-namespace-overlap-with-others.patch new file mode 100644 index 00000000000..57fbf5fcec8 --- /dev/null +++ b/queue-2.6.34/jfs-don-t-allow-os2-xattr-namespace-overlap-with-others.patch @@ -0,0 +1,162 @@ +From aca0fa34bdaba39bfddddba8ca70dba4782e8fe6 Mon Sep 17 00:00:00 2001 +From: Dave Kleikamp +Date: Mon, 9 Aug 2010 15:57:38 -0500 +Subject: jfs: don't allow os2 xattr namespace overlap with others + +From: Dave Kleikamp + +commit aca0fa34bdaba39bfddddba8ca70dba4782e8fe6 upstream. + +It's currently possible to bypass xattr namespace access rules by +prefixing valid xattr names with "os2.", since the os2 namespace stores +extended attributes in a legacy format with no prefix. + +This patch adds checking to deny access to any valid namespace prefix +following "os2.". + +Signed-off-by: Dave Kleikamp +Reported-by: Sergey Vlasov +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + fs/jfs/xattr.c | 87 ++++++++++++++++++++++++--------------------------------- + 1 file changed, 38 insertions(+), 49 deletions(-) + +--- a/fs/jfs/xattr.c ++++ b/fs/jfs/xattr.c +@@ -86,46 +86,25 @@ struct ea_buffer { + #define EA_MALLOC 0x0008 + + ++static int is_known_namespace(const char *name) ++{ ++ if (strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN) && ++ strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN) && ++ strncmp(name, XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN) && ++ strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN)) ++ return false; ++ ++ return true; ++} ++ + /* + * These three routines are used to recognize on-disk extended attributes + * that are in a recognized namespace. If the attribute is not recognized, + * "os2." is prepended to the name + */ +-static inline int is_os2_xattr(struct jfs_ea *ea) ++static int is_os2_xattr(struct jfs_ea *ea) + { +- /* +- * Check for "system." +- */ +- if ((ea->namelen >= XATTR_SYSTEM_PREFIX_LEN) && +- !strncmp(ea->name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN)) +- return false; +- /* +- * Check for "user." +- */ +- if ((ea->namelen >= XATTR_USER_PREFIX_LEN) && +- !strncmp(ea->name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN)) +- return false; +- /* +- * Check for "security." +- */ +- if ((ea->namelen >= XATTR_SECURITY_PREFIX_LEN) && +- !strncmp(ea->name, XATTR_SECURITY_PREFIX, +- XATTR_SECURITY_PREFIX_LEN)) +- return false; +- /* +- * Check for "trusted." +- */ +- if ((ea->namelen >= XATTR_TRUSTED_PREFIX_LEN) && +- !strncmp(ea->name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN)) +- return false; +- /* +- * Add any other valid namespace prefixes here +- */ +- +- /* +- * We assume it's OS/2's flat namespace +- */ +- return true; ++ return !is_known_namespace(ea->name); + } + + static inline int name_size(struct jfs_ea *ea) +@@ -764,13 +743,23 @@ static int can_set_xattr(struct inode *i + if (!strncmp(name, XATTR_SYSTEM_PREFIX, XATTR_SYSTEM_PREFIX_LEN)) + return can_set_system_xattr(inode, name, value, value_len); + ++ if (!strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN)) { ++ /* ++ * This makes sure that we aren't trying to set an ++ * attribute in a different namespace by prefixing it ++ * with "os2." ++ */ ++ if (is_known_namespace(name + XATTR_OS2_PREFIX_LEN)) ++ return -EOPNOTSUPP; ++ return 0; ++ } ++ + /* + * Don't allow setting an attribute in an unknown namespace. + */ + if (strncmp(name, XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN) && + strncmp(name, XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN) && +- strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN) && +- strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN)) ++ strncmp(name, XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN)) + return -EOPNOTSUPP; + + return 0; +@@ -952,19 +941,8 @@ ssize_t __jfs_getxattr(struct inode *ino + int xattr_size; + ssize_t size; + int namelen = strlen(name); +- char *os2name = NULL; + char *value; + +- if (strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN) == 0) { +- os2name = kmalloc(namelen - XATTR_OS2_PREFIX_LEN + 1, +- GFP_KERNEL); +- if (!os2name) +- return -ENOMEM; +- strcpy(os2name, name + XATTR_OS2_PREFIX_LEN); +- name = os2name; +- namelen -= XATTR_OS2_PREFIX_LEN; +- } +- + down_read(&JFS_IP(inode)->xattr_sem); + + xattr_size = ea_get(inode, &ea_buf, 0); +@@ -1002,8 +980,6 @@ ssize_t __jfs_getxattr(struct inode *ino + out: + up_read(&JFS_IP(inode)->xattr_sem); + +- kfree(os2name); +- + return size; + } + +@@ -1012,6 +988,19 @@ ssize_t jfs_getxattr(struct dentry *dent + { + int err; + ++ if (strncmp(name, XATTR_OS2_PREFIX, XATTR_OS2_PREFIX_LEN) == 0) { ++ /* ++ * skip past "os2." prefix ++ */ ++ name += XATTR_OS2_PREFIX_LEN; ++ /* ++ * Don't allow retrieving properly prefixed attributes ++ * by prepending them with "os2." ++ */ ++ if (is_known_namespace(name)) ++ return -EOPNOTSUPP; ++ } ++ + err = __jfs_getxattr(dentry->d_inode, name, data, buf_size); + + return err; diff --git a/queue-2.6.34/mtd-gen_nand-fix-support-for-multiple-chips.patch b/queue-2.6.34/mtd-gen_nand-fix-support-for-multiple-chips.patch new file mode 100644 index 00000000000..fa478224fbc --- /dev/null +++ b/queue-2.6.34/mtd-gen_nand-fix-support-for-multiple-chips.patch @@ -0,0 +1,32 @@ +From 81cbb0b17796d81cbd92defe113cf2a7c7a21fbb Mon Sep 17 00:00:00 2001 +From: Marek Vasut +Date: Wed, 28 Jul 2010 07:36:54 +0200 +Subject: mtd: gen_nand: fix support for multiple chips + +From: Marek Vasut + +commit 81cbb0b17796d81cbd92defe113cf2a7c7a21fbb upstream. + +This patch corrects a problem where gen_nand driver assumed there can be only +one chip and ignored the pdata->chip.nr_chips value. + +Signed-off-by: Marek Vasut +Signed-off-by: Artem Bityutskiy +Signed-off-by: David Woodhouse +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/mtd/nand/plat_nand.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/mtd/nand/plat_nand.c ++++ b/drivers/mtd/nand/plat_nand.c +@@ -91,7 +91,7 @@ static int __devinit plat_nand_probe(str + } + + /* Scan to find existance of the device */ +- if (nand_scan(&data->mtd, 1)) { ++ if (nand_scan(&data->mtd, pdata->chip.nr_chips)) { + err = -ENXIO; + goto out; + } diff --git a/queue-2.6.34/net-fix-netdev_notify_peers-to-not-conflict-with-netdev_bonding_deslave.patch b/queue-2.6.34/net-fix-netdev_notify_peers-to-not-conflict-with-netdev_bonding_deslave.patch new file mode 100644 index 00000000000..040b1b1a85d --- /dev/null +++ b/queue-2.6.34/net-fix-netdev_notify_peers-to-not-conflict-with-netdev_bonding_deslave.patch @@ -0,0 +1,27 @@ +From 38117d1495e587fbb10d6e55733139a27893cef5 Mon Sep 17 00:00:00 2001 +From: David S. Miller +Date: Mon, 31 May 2010 00:28:35 -0700 +Subject: net: Fix NETDEV_NOTIFY_PEERS to not conflict with NETDEV_BONDING_DESLAVE. + +From: David S. Miller + +commit 38117d1495e587fbb10d6e55733139a27893cef5 upstream. + +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/notifier.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/include/linux/notifier.h ++++ b/include/linux/notifier.h +@@ -203,7 +203,7 @@ static inline int notifier_to_errno(int + #define NETDEV_BONDING_NEWTYPE 0x000F + #define NETDEV_POST_INIT 0x0010 + #define NETDEV_UNREGISTER_BATCH 0x0011 +-#define NETDEV_NOTIFY_PEERS 0x0012 ++#define NETDEV_NOTIFY_PEERS 0x0013 + + #define SYS_DOWN 0x0001 /* Notify of system down */ + #define SYS_RESTART SYS_DOWN diff --git a/queue-2.6.34/pxa-cm-x300-fix-ffuart-registration.patch b/queue-2.6.34/pxa-cm-x300-fix-ffuart-registration.patch new file mode 100644 index 00000000000..2ef9aeca121 --- /dev/null +++ b/queue-2.6.34/pxa-cm-x300-fix-ffuart-registration.patch @@ -0,0 +1,33 @@ +From a6cd7eb374647b572ae9e7dbfe49871e6996e8e0 Mon Sep 17 00:00:00 2001 +From: Igor Grinberg +Date: Tue, 20 Jul 2010 10:58:52 +0300 +Subject: [ARM] pxa/cm-x300: fix ffuart registration + +From: Igor Grinberg + +commit a6cd7eb374647b572ae9e7dbfe49871e6996e8e0 upstream. + +ffuart is available on cm-x300 only with pxa300. + +Signed-off-by: Igor Grinberg +Signed-off-by: Eric Miao +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/mach-pxa/cm-x300.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/arch/arm/mach-pxa/cm-x300.c ++++ b/arch/arm/mach-pxa/cm-x300.c +@@ -667,9 +667,10 @@ static void __init cm_x300_init(void) + { + cm_x300_init_mfp(); + +- pxa_set_ffuart_info(NULL); + pxa_set_btuart_info(NULL); + pxa_set_stuart_info(NULL); ++ if (cpu_is_pxa300()) ++ pxa_set_ffuart_info(NULL); + + cm_x300_init_da9030(); + cm_x300_init_dm9000(); diff --git a/queue-2.6.34/series b/queue-2.6.34/series index c785dfdb06b..23888c4bb4f 100644 --- a/queue-2.6.34/series +++ b/queue-2.6.34/series @@ -18,3 +18,33 @@ drivers-video-w100fb.c-ignore-void-return-value-fix-build-failure.patch iwlwifi-fix-tx-tracer.patch ide-cd-do-not-access-completed-requests-in-the-irq-handler.patch md-raid10-fix-deadlock-with-unaligned-read-during-resync.patch +blkdev-cgroup-whitelist-permission-fix.patch +ecryptfs-handle-ioctl-calls-with-unlocked-and-compat-functions.patch +ecryptfs-release-reference-to-lower-mount-if-interpose-fails.patch +fs-ecryptfs-file.c-introduce-missing-free.patch +pxa-cm-x300-fix-ffuart-registration.patch +signalfd-fill-in-ssi_int-for-posix-timers-and-message-queues.patch +bio-fs-update-rwa_mask-reada-and-swrite-to-match-the-corresponding-bio_rw_-bits.patch +smsc911x-add-spinlocks-around-registers-access.patch +arm-6299-1-errata-tlbiasidis-and-tlbimvais-operations-can-broadcast-a-faulty-asid.patch +arm-6280-1-imx-fix-build-failure-when-including-mach-gpio.h-without-linux-spinlock.h.patch +usb-ehci-remove-pci-assumption.patch +usb-resizing-usbmon-binary-interface-buffer-causes-protection-faults.patch +usb-delay-init-quirk-for-logitech-harmony-700-series-devices.patch +usb-serial-enabling-support-for-segway-rmp-in-ftdi_sio.patch +usb-option-huawei-ets-1220-support-added.patch +usb-option-add-huawei-k3765-k4505-devices-to-work-properly.patch +usb-ftdi_sio-device-id-for-navitator.patch +usb-cp210x-add-four-new-device-ids.patch +usb-usbtest-avoid-to-free-coherent-buffer-in-atomic-context.patch +usb-fix-thread-unsafe-anchor-utiliy-routines.patch +drm-edid-fix-the-hdtv-hack-sync-adjustment.patch +bluetooth-added-support-for-controller-shipped-with-imac-i5.patch +mtd-gen_nand-fix-support-for-multiple-chips.patch +jfs-don-t-allow-os2-xattr-namespace-overlap-with-others.patch +arp_notify-allow-drivers-to-explicitly-request-a-notification-event.patch +xen-netfront-explicitly-generate-arp_notify-event-after-migration.patch +net-fix-netdev_notify_peers-to-not-conflict-with-netdev_bonding_deslave.patch +irq-add-new-irq-flag-irqf_no_suspend.patch +xen-do-not-suspend-ipi-irqs.patch +drm-i915-use-rsen-instead-of-htplg-for-tfp410-monitor-detection.patch diff --git a/queue-2.6.34/signalfd-fill-in-ssi_int-for-posix-timers-and-message-queues.patch b/queue-2.6.34/signalfd-fill-in-ssi_int-for-posix-timers-and-message-queues.patch new file mode 100644 index 00000000000..5523ced1f41 --- /dev/null +++ b/queue-2.6.34/signalfd-fill-in-ssi_int-for-posix-timers-and-message-queues.patch @@ -0,0 +1,53 @@ +From a2a20c412c86e0bb46a9ab0dd31bcfe6d201b913 Mon Sep 17 00:00:00 2001 +From: Nathan Lynch +Date: Tue, 10 Aug 2010 18:03:08 -0700 +Subject: signalfd: fill in ssi_int for posix timers and message queues + +From: Nathan Lynch + +commit a2a20c412c86e0bb46a9ab0dd31bcfe6d201b913 upstream. + +If signalfd is used to consume a signal generated by a POSIX interval +timer or POSIX message queue, the ssi_int field does not reflect the data +(sigevent->sigev_value) supplied to timer_create(2) or mq_notify(3). (The +ssi_ptr field, however, is filled in.) + +This behavior differs from signalfd's treatment of sigqueue-generated +signals -- see the default case in signalfd_copyinfo. It also gives +results that differ from the case when a signal is handled conventionally +via a sigaction-registered handler. + +So, set signalfd_siginfo->ssi_int in the remaining cases (__SI_TIMER, +__SI_MESGQ) where ssi_ptr is set. + +akpm: a non-back-compatible change. Merge into -stable to minimise the +number of kernels which are in the field and which miss this feature. + +Signed-off-by: Nathan Lynch +Acked-by: Davide Libenzi +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + fs/signalfd.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/fs/signalfd.c ++++ b/fs/signalfd.c +@@ -88,6 +88,7 @@ static int signalfd_copyinfo(struct sign + err |= __put_user(kinfo->si_tid, &uinfo->ssi_tid); + err |= __put_user(kinfo->si_overrun, &uinfo->ssi_overrun); + err |= __put_user((long) kinfo->si_ptr, &uinfo->ssi_ptr); ++ err |= __put_user(kinfo->si_int, &uinfo->ssi_int); + break; + case __SI_POLL: + err |= __put_user(kinfo->si_band, &uinfo->ssi_band); +@@ -111,6 +112,7 @@ static int signalfd_copyinfo(struct sign + err |= __put_user(kinfo->si_pid, &uinfo->ssi_pid); + err |= __put_user(kinfo->si_uid, &uinfo->ssi_uid); + err |= __put_user((long) kinfo->si_ptr, &uinfo->ssi_ptr); ++ err |= __put_user(kinfo->si_int, &uinfo->ssi_int); + break; + default: + /* diff --git a/queue-2.6.34/smsc911x-add-spinlocks-around-registers-access.patch b/queue-2.6.34/smsc911x-add-spinlocks-around-registers-access.patch new file mode 100644 index 00000000000..29f77ce54ad --- /dev/null +++ b/queue-2.6.34/smsc911x-add-spinlocks-around-registers-access.patch @@ -0,0 +1,193 @@ +From 492c5d943d6a04b124ba3a719dc746dc36b14cfb Mon Sep 17 00:00:00 2001 +From: Catalin Marinas +Date: Mon, 19 Jul 2010 13:36:21 -0700 +Subject: smsc911x: Add spinlocks around registers access + +From: Catalin Marinas + +commit 492c5d943d6a04b124ba3a719dc746dc36b14cfb upstream. + +On SMP systems, the SMSC911x registers may be accessed by multiple CPUs +and this seems to put the chip in an inconsistent state. The patch adds +spinlocks to the smsc911x_reg_read, smsc911x_reg_write, +smsc911x_rx_readfifo and smsc911x_tx_writefifo functions. + +Signed-off-by: Catalin Marinas +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/smsc911x.c | 92 +++++++++++++++++++++++++++---------------------- + 1 file changed, 52 insertions(+), 40 deletions(-) + +--- a/drivers/net/smsc911x.c ++++ b/drivers/net/smsc911x.c +@@ -84,8 +84,7 @@ struct smsc911x_data { + */ + spinlock_t mac_lock; + +- /* spinlock to ensure 16-bit accesses are serialised. +- * unused with a 32-bit bus */ ++ /* spinlock to ensure register accesses are serialised */ + spinlock_t dev_lock; + + struct phy_device *phy_dev; +@@ -118,37 +117,33 @@ struct smsc911x_data { + unsigned int hashlo; + }; + +-/* The 16-bit access functions are significantly slower, due to the locking +- * necessary. If your bus hardware can be configured to do this for you +- * (in response to a single 32-bit operation from software), you should use +- * the 32-bit access functions instead. */ +- +-static inline u32 smsc911x_reg_read(struct smsc911x_data *pdata, u32 reg) ++static inline u32 __smsc911x_reg_read(struct smsc911x_data *pdata, u32 reg) + { + if (pdata->config.flags & SMSC911X_USE_32BIT) + return readl(pdata->ioaddr + reg); + +- if (pdata->config.flags & SMSC911X_USE_16BIT) { +- u32 data; +- unsigned long flags; +- +- /* these two 16-bit reads must be performed consecutively, so +- * must not be interrupted by our own ISR (which would start +- * another read operation) */ +- spin_lock_irqsave(&pdata->dev_lock, flags); +- data = ((readw(pdata->ioaddr + reg) & 0xFFFF) | ++ if (pdata->config.flags & SMSC911X_USE_16BIT) ++ return ((readw(pdata->ioaddr + reg) & 0xFFFF) | + ((readw(pdata->ioaddr + reg + 2) & 0xFFFF) << 16)); +- spin_unlock_irqrestore(&pdata->dev_lock, flags); +- +- return data; +- } + + BUG(); + return 0; + } + +-static inline void smsc911x_reg_write(struct smsc911x_data *pdata, u32 reg, +- u32 val) ++static inline u32 smsc911x_reg_read(struct smsc911x_data *pdata, u32 reg) ++{ ++ u32 data; ++ unsigned long flags; ++ ++ spin_lock_irqsave(&pdata->dev_lock, flags); ++ data = __smsc911x_reg_read(pdata, reg); ++ spin_unlock_irqrestore(&pdata->dev_lock, flags); ++ ++ return data; ++} ++ ++static inline void __smsc911x_reg_write(struct smsc911x_data *pdata, u32 reg, ++ u32 val) + { + if (pdata->config.flags & SMSC911X_USE_32BIT) { + writel(val, pdata->ioaddr + reg); +@@ -156,44 +151,54 @@ static inline void smsc911x_reg_write(st + } + + if (pdata->config.flags & SMSC911X_USE_16BIT) { +- unsigned long flags; +- +- /* these two 16-bit writes must be performed consecutively, so +- * must not be interrupted by our own ISR (which would start +- * another read operation) */ +- spin_lock_irqsave(&pdata->dev_lock, flags); + writew(val & 0xFFFF, pdata->ioaddr + reg); + writew((val >> 16) & 0xFFFF, pdata->ioaddr + reg + 2); +- spin_unlock_irqrestore(&pdata->dev_lock, flags); + return; + } + + BUG(); + } + ++static inline void smsc911x_reg_write(struct smsc911x_data *pdata, u32 reg, ++ u32 val) ++{ ++ unsigned long flags; ++ ++ spin_lock_irqsave(&pdata->dev_lock, flags); ++ __smsc911x_reg_write(pdata, reg, val); ++ spin_unlock_irqrestore(&pdata->dev_lock, flags); ++} ++ + /* Writes a packet to the TX_DATA_FIFO */ + static inline void + smsc911x_tx_writefifo(struct smsc911x_data *pdata, unsigned int *buf, + unsigned int wordcount) + { ++ unsigned long flags; ++ ++ spin_lock_irqsave(&pdata->dev_lock, flags); ++ + if (pdata->config.flags & SMSC911X_SWAP_FIFO) { + while (wordcount--) +- smsc911x_reg_write(pdata, TX_DATA_FIFO, swab32(*buf++)); +- return; ++ __smsc911x_reg_write(pdata, TX_DATA_FIFO, ++ swab32(*buf++)); ++ goto out; + } + + if (pdata->config.flags & SMSC911X_USE_32BIT) { + writesl(pdata->ioaddr + TX_DATA_FIFO, buf, wordcount); +- return; ++ goto out; + } + + if (pdata->config.flags & SMSC911X_USE_16BIT) { + while (wordcount--) +- smsc911x_reg_write(pdata, TX_DATA_FIFO, *buf++); +- return; ++ __smsc911x_reg_write(pdata, TX_DATA_FIFO, *buf++); ++ goto out; + } + + BUG(); ++out: ++ spin_unlock_irqrestore(&pdata->dev_lock, flags); + } + + /* Reads a packet out of the RX_DATA_FIFO */ +@@ -201,24 +206,31 @@ static inline void + smsc911x_rx_readfifo(struct smsc911x_data *pdata, unsigned int *buf, + unsigned int wordcount) + { ++ unsigned long flags; ++ ++ spin_lock_irqsave(&pdata->dev_lock, flags); ++ + if (pdata->config.flags & SMSC911X_SWAP_FIFO) { + while (wordcount--) +- *buf++ = swab32(smsc911x_reg_read(pdata, RX_DATA_FIFO)); +- return; ++ *buf++ = swab32(__smsc911x_reg_read(pdata, ++ RX_DATA_FIFO)); ++ goto out; + } + + if (pdata->config.flags & SMSC911X_USE_32BIT) { + readsl(pdata->ioaddr + RX_DATA_FIFO, buf, wordcount); +- return; ++ goto out; + } + + if (pdata->config.flags & SMSC911X_USE_16BIT) { + while (wordcount--) +- *buf++ = smsc911x_reg_read(pdata, RX_DATA_FIFO); +- return; ++ *buf++ = __smsc911x_reg_read(pdata, RX_DATA_FIFO); ++ goto out; + } + + BUG(); ++out: ++ spin_unlock_irqrestore(&pdata->dev_lock, flags); + } + + /* waits for MAC not busy, with timeout. Only called by smsc911x_mac_read diff --git a/queue-2.6.34/usb-cp210x-add-four-new-device-ids.patch b/queue-2.6.34/usb-cp210x-add-four-new-device-ids.patch new file mode 100644 index 00000000000..f104d525ce2 --- /dev/null +++ b/queue-2.6.34/usb-cp210x-add-four-new-device-ids.patch @@ -0,0 +1,29 @@ +From 356c5a4834a74c621715f7a7f16ded914eecbd3c Mon Sep 17 00:00:00 2001 +From: Alessio Igor Bogani +Date: Tue, 27 Jul 2010 23:05:14 +0200 +Subject: USB: cp210x: Add four new device IDs + +From: Alessio Igor Bogani + +commit 356c5a4834a74c621715f7a7f16ded914eecbd3c upstream. + +Signed-off-by: Alessio Igor Bogani +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/cp210x.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/usb/serial/cp210x.c ++++ b/drivers/usb/serial/cp210x.c +@@ -128,6 +128,10 @@ static const struct usb_device_id id_tab + { USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */ + { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */ + { USB_DEVICE(0x413C, 0x9500) }, /* DW700 GPS USB interface */ ++ { USB_DEVICE(0x16DC, 0x0010) }, /* W-IE-NE-R Plein & Baus GmbH PL512 Power Supply */ ++ { USB_DEVICE(0x16DC, 0x0011) }, /* W-IE-NE-R Plein & Baus GmbH RCM Remote Control for MARATON Power Supply */ ++ { USB_DEVICE(0x16DC, 0x0012) }, /* W-IE-NE-R Plein & Baus GmbH MPOD Multi Channel Power Supply */ ++ { USB_DEVICE(0x16DC, 0x0015) }, /* W-IE-NE-R Plein & Baus GmbH CML Control, Monitoring and Data Logger */ + { } /* Terminating Entry */ + }; + diff --git a/queue-2.6.34/usb-delay-init-quirk-for-logitech-harmony-700-series-devices.patch b/queue-2.6.34/usb-delay-init-quirk-for-logitech-harmony-700-series-devices.patch new file mode 100644 index 00000000000..a78175261b5 --- /dev/null +++ b/queue-2.6.34/usb-delay-init-quirk-for-logitech-harmony-700-series-devices.patch @@ -0,0 +1,74 @@ +From 93362a875fc69881ae69299efaf19a55a1f57db0 Mon Sep 17 00:00:00 2001 +From: Phil Dibowitz +Date: Thu, 22 Jul 2010 00:05:01 +0200 +Subject: USB delay init quirk for logitech Harmony 700-series devices + +From: Phil Dibowitz + +commit 93362a875fc69881ae69299efaf19a55a1f57db0 upstream. + +The Logitech Harmony 700 series needs an extra delay during +initialization. This patch adds a USB quirk which enables such a delay +and adds the device to the quirks list. + +Signed-off-by: Phil Dibowitz +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/core/hub.c | 6 +++++- + drivers/usb/core/quirks.c | 3 +++ + include/linux/usb/quirks.h | 4 ++++ + 3 files changed, 12 insertions(+), 1 deletion(-) + +--- a/drivers/usb/core/hub.c ++++ b/drivers/usb/core/hub.c +@@ -23,6 +23,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -1790,7 +1791,6 @@ int usb_new_device(struct usb_device *ud + pm_runtime_set_active(&udev->dev); + pm_runtime_enable(&udev->dev); + +- usb_detect_quirks(udev); + err = usb_enumerate_device(udev); /* Read descriptors */ + if (err < 0) + goto fail; +@@ -3100,6 +3100,10 @@ static void hub_port_connect_change(stru + if (status < 0) + goto loop; + ++ usb_detect_quirks(udev); ++ if (udev->quirks & USB_QUIRK_DELAY_INIT) ++ msleep(1000); ++ + /* consecutive bus-powered hubs aren't reliable; they can + * violate the voltage drop budget. if the new child has + * a "powered" LED, users should notice we didn't enable it +--- a/drivers/usb/core/quirks.c ++++ b/drivers/usb/core/quirks.c +@@ -38,6 +38,9 @@ static const struct usb_device_id usb_qu + /* Creative SB Audigy 2 NX */ + { USB_DEVICE(0x041e, 0x3020), .driver_info = USB_QUIRK_RESET_RESUME }, + ++ /* Logitech Harmony 700-series */ ++ { USB_DEVICE(0x046d, 0xc122), .driver_info = USB_QUIRK_DELAY_INIT }, ++ + /* Philips PSC805 audio device */ + { USB_DEVICE(0x0471, 0x0155), .driver_info = USB_QUIRK_RESET_RESUME }, + +--- a/include/linux/usb/quirks.h ++++ b/include/linux/usb/quirks.h +@@ -22,4 +22,8 @@ + /*device will morph if reset, don't use reset for handling errors */ + #define USB_QUIRK_RESET_MORPHS 0x00000010 + ++/* device needs a pause during initialization, after we read the device ++ descriptor */ ++#define USB_QUIRK_DELAY_INIT 0x00000040 ++ + #endif /* __LINUX_USB_QUIRKS_H */ diff --git a/queue-2.6.34/usb-ehci-remove-pci-assumption.patch b/queue-2.6.34/usb-ehci-remove-pci-assumption.patch new file mode 100644 index 00000000000..d3df54a82c2 --- /dev/null +++ b/queue-2.6.34/usb-ehci-remove-pci-assumption.patch @@ -0,0 +1,77 @@ +From ae68a83bdc1971cb02fefc7a686ba6d077065e71 Mon Sep 17 00:00:00 2001 +From: Alan Stern +Date: Wed, 14 Jul 2010 11:03:23 -0400 +Subject: USB: EHCI: remove PCI assumption + +From: Alan Stern + +commit ae68a83bdc1971cb02fefc7a686ba6d077065e71 upstream. + +This patch (as1405) fixes a small bug in ehci-hcd's isochronous +scheduler. Not all EHCI controllers are PCI, and the code shouldn't +assume that they are. Instead, introduce a special flag for +controllers which need to delay iso scheduling for full-speed devices +beyond the scheduling threshold. + +Signed-off-by: Alan Stern +CC: Sarah Sharp +CC: David Brownell +Acked-by: Sarah Sharp +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/host/ehci-pci.c | 1 + + drivers/usb/host/ehci-sched.c | 10 ++++------ + drivers/usb/host/ehci.h | 1 + + 3 files changed, 6 insertions(+), 6 deletions(-) + +--- a/drivers/usb/host/ehci-pci.c ++++ b/drivers/usb/host/ehci-pci.c +@@ -111,6 +111,7 @@ static int ehci_pci_setup(struct usb_hcd + switch (pdev->vendor) { + case PCI_VENDOR_ID_INTEL: + ehci->need_io_watchdog = 0; ++ ehci->fs_i_thresh = 1; + if (pdev->device == 0x27cc) { + ehci->broken_periodic = 1; + ehci_info(ehci, "using broken periodic workaround\n"); +--- a/drivers/usb/host/ehci-sched.c ++++ b/drivers/usb/host/ehci-sched.c +@@ -1400,7 +1400,6 @@ iso_stream_schedule ( + int status; + unsigned mod = ehci->periodic_size << 3; + struct ehci_iso_sched *sched = urb->hcpriv; +- struct pci_dev *pdev; + + if (sched->span > (mod - SCHEDULE_SLOP)) { + ehci_dbg (ehci, "iso request %p too long\n", urb); +@@ -1427,15 +1426,14 @@ iso_stream_schedule ( + * slot in the schedule, implicitly assuming URB_ISO_ASAP. + */ + if (likely (!list_empty (&stream->td_list))) { +- pdev = to_pci_dev(ehci_to_hcd(ehci)->self.controller); + start = stream->next_uframe; + + /* For high speed devices, allow scheduling within the +- * isochronous scheduling threshold. For full speed devices, +- * don't. (Work around for Intel ICH9 bug.) ++ * isochronous scheduling threshold. For full speed devices ++ * and Intel PCI-based controllers, don't (work around for ++ * Intel ICH9 bug). + */ +- if (!stream->highspeed && +- pdev->vendor == PCI_VENDOR_ID_INTEL) ++ if (!stream->highspeed && ehci->fs_i_thresh) + next = now + ehci->i_thresh; + else + next = now; +--- a/drivers/usb/host/ehci.h ++++ b/drivers/usb/host/ehci.h +@@ -130,6 +130,7 @@ struct ehci_hcd { /* one per controlle + unsigned has_amcc_usb23:1; + unsigned need_io_watchdog:1; + unsigned broken_periodic:1; ++ unsigned fs_i_thresh:1; /* Intel iso scheduling */ + + /* required for usb32 quirk */ + #define OHCI_CTRL_HCFS (3 << 6) diff --git a/queue-2.6.34/usb-fix-thread-unsafe-anchor-utiliy-routines.patch b/queue-2.6.34/usb-fix-thread-unsafe-anchor-utiliy-routines.patch new file mode 100644 index 00000000000..fca0d6f0780 --- /dev/null +++ b/queue-2.6.34/usb-fix-thread-unsafe-anchor-utiliy-routines.patch @@ -0,0 +1,130 @@ +From b3e670443b7fb8a2d29831b62b44a039c283e351 Mon Sep 17 00:00:00 2001 +From: Christian Lamparter +Date: Tue, 3 Aug 2010 02:32:28 +0200 +Subject: USB: fix thread-unsafe anchor utiliy routines + +From: Christian Lamparter + +commit b3e670443b7fb8a2d29831b62b44a039c283e351 upstream. + +This patch fixes a race condition in two utility routines +related to the removal/unlinking of urbs from an anchor. + +If two threads are concurrently accessing the same anchor, +both could end up with the same urb - thinking they are +the exclusive owner. + +Alan Stern pointed out a related issue in +usb_unlink_anchored_urbs: + +"The URB isn't removed from the anchor until it completes + (as a by-product of completion, in fact), which might not + be for quite some time after the unlink call returns. + In the meantime, the subroutine will keep trying to unlink + it, over and over again." + +Cc: Oliver Neukum +Cc: Greg Kroah-Hartman +Acked-by: Alan Stern +Signed-off-by: Christian Lamparter +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/core/urb.c | 50 ++++++++++++++++++++----------------------------- + 1 file changed, 21 insertions(+), 29 deletions(-) + +--- a/drivers/usb/core/urb.c ++++ b/drivers/usb/core/urb.c +@@ -137,6 +137,16 @@ void usb_anchor_urb(struct urb *urb, str + } + EXPORT_SYMBOL_GPL(usb_anchor_urb); + ++/* Callers must hold anchor->lock */ ++static void __usb_unanchor_urb(struct urb *urb, struct usb_anchor *anchor) ++{ ++ urb->anchor = NULL; ++ list_del(&urb->anchor_list); ++ usb_put_urb(urb); ++ if (list_empty(&anchor->urb_list)) ++ wake_up(&anchor->wait); ++} ++ + /** + * usb_unanchor_urb - unanchors an URB + * @urb: pointer to the urb to anchor +@@ -156,17 +166,14 @@ void usb_unanchor_urb(struct urb *urb) + return; + + spin_lock_irqsave(&anchor->lock, flags); +- if (unlikely(anchor != urb->anchor)) { +- /* we've lost the race to another thread */ +- spin_unlock_irqrestore(&anchor->lock, flags); +- return; +- } +- urb->anchor = NULL; +- list_del(&urb->anchor_list); ++ /* ++ * At this point, we could be competing with another thread which ++ * has the same intention. To protect the urb from being unanchored ++ * twice, only the winner of the race gets the job. ++ */ ++ if (likely(anchor == urb->anchor)) ++ __usb_unanchor_urb(urb, anchor); + spin_unlock_irqrestore(&anchor->lock, flags); +- usb_put_urb(urb); +- if (list_empty(&anchor->urb_list)) +- wake_up(&anchor->wait); + } + EXPORT_SYMBOL_GPL(usb_unanchor_urb); + +@@ -750,20 +757,11 @@ EXPORT_SYMBOL_GPL(usb_unpoison_anchored_ + void usb_unlink_anchored_urbs(struct usb_anchor *anchor) + { + struct urb *victim; +- unsigned long flags; + +- spin_lock_irqsave(&anchor->lock, flags); +- while (!list_empty(&anchor->urb_list)) { +- victim = list_entry(anchor->urb_list.prev, struct urb, +- anchor_list); +- usb_get_urb(victim); +- spin_unlock_irqrestore(&anchor->lock, flags); +- /* this will unanchor the URB */ ++ while ((victim = usb_get_from_anchor(anchor)) != NULL) { + usb_unlink_urb(victim); + usb_put_urb(victim); +- spin_lock_irqsave(&anchor->lock, flags); + } +- spin_unlock_irqrestore(&anchor->lock, flags); + } + EXPORT_SYMBOL_GPL(usb_unlink_anchored_urbs); + +@@ -800,12 +798,11 @@ struct urb *usb_get_from_anchor(struct u + victim = list_entry(anchor->urb_list.next, struct urb, + anchor_list); + usb_get_urb(victim); +- spin_unlock_irqrestore(&anchor->lock, flags); +- usb_unanchor_urb(victim); ++ __usb_unanchor_urb(victim, anchor); + } else { +- spin_unlock_irqrestore(&anchor->lock, flags); + victim = NULL; + } ++ spin_unlock_irqrestore(&anchor->lock, flags); + + return victim; + } +@@ -827,12 +824,7 @@ void usb_scuttle_anchored_urbs(struct us + while (!list_empty(&anchor->urb_list)) { + victim = list_entry(anchor->urb_list.prev, struct urb, + anchor_list); +- usb_get_urb(victim); +- spin_unlock_irqrestore(&anchor->lock, flags); +- /* this may free the URB */ +- usb_unanchor_urb(victim); +- usb_put_urb(victim); +- spin_lock_irqsave(&anchor->lock, flags); ++ __usb_unanchor_urb(victim, anchor); + } + spin_unlock_irqrestore(&anchor->lock, flags); + } diff --git a/queue-2.6.34/usb-ftdi_sio-device-id-for-navitator.patch b/queue-2.6.34/usb-ftdi_sio-device-id-for-navitator.patch new file mode 100644 index 00000000000..0934ea1e496 --- /dev/null +++ b/queue-2.6.34/usb-ftdi_sio-device-id-for-navitator.patch @@ -0,0 +1,50 @@ +From b6180ef7c99574c3350bbffa2a3a9d675321543d Mon Sep 17 00:00:00 2001 +From: dranch@trinnet.net +Date: Mon, 26 Jul 2010 19:44:33 -0700 +Subject: USB: ftdi_sio: device id for Navitator + +From: dranch@trinnet.net + +commit b6180ef7c99574c3350bbffa2a3a9d675321543d upstream. + +This patch is to add a US Interface, Inc. "Navigator" USB device. +Specifically, it's a HAM Radio USB sound modem that also +incorporates three pairs of unique FTDI serial ports. The standard +Linux FTDI serial driver will only recognize the first two serial +ports of an unknown FDTI derived device and this patch adds in +recognition to these specific new IDs. + +Signed-off-by: David A. Ranch +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/ftdi_sio.c | 3 +++ + drivers/usb/serial/ftdi_sio_ids.h | 5 +++++ + 2 files changed, 8 insertions(+) + +--- a/drivers/usb/serial/ftdi_sio.c ++++ b/drivers/usb/serial/ftdi_sio.c +@@ -162,6 +162,9 @@ static struct usb_device_id id_table_com + { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_5_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_6_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_7_PID) }, ++ { USB_DEVICE(FTDI_VID, FTDI_USINT_CAT_PID) }, ++ { USB_DEVICE(FTDI_VID, FTDI_USINT_WKEY_PID) }, ++ { USB_DEVICE(FTDI_VID, FTDI_USINT_RS232_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_ACTZWAVE_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_IRTRANS_PID) }, + { USB_DEVICE(FTDI_VID, FTDI_IPLUS_PID) }, +--- a/drivers/usb/serial/ftdi_sio_ids.h ++++ b/drivers/usb/serial/ftdi_sio_ids.h +@@ -40,6 +40,11 @@ + + #define FTDI_NXTCAM_PID 0xABB8 /* NXTCam for Mindstorms NXT */ + ++/* US Interface Navigator (http://www.usinterface.com/) */ ++#define FTDI_USINT_CAT_PID 0xb810 /* Navigator CAT and 2nd PTT lines */ ++#define FTDI_USINT_WKEY_PID 0xb811 /* Navigator WKEY and FSK lines */ ++#define FTDI_USINT_RS232_PID 0xb812 /* Navigator RS232 and CONFIG lines */ ++ + /* OOCDlink by Joern Kaipf + * (http://www.joernonline.de/dw/doku.php?id=start&idx=projects:oocdlink) */ + #define FTDI_OOCDLINK_PID 0xbaf8 /* Amontec JTAGkey */ diff --git a/queue-2.6.34/usb-option-add-huawei-k3765-k4505-devices-to-work-properly.patch b/queue-2.6.34/usb-option-add-huawei-k3765-k4505-devices-to-work-properly.patch new file mode 100644 index 00000000000..8a4e21d82d4 --- /dev/null +++ b/queue-2.6.34/usb-option-add-huawei-k3765-k4505-devices-to-work-properly.patch @@ -0,0 +1,57 @@ +From 0372a754be9aa43e19fd86c9bc04796d43b55e38 Mon Sep 17 00:00:00 2001 +From: Andrew Bird +Date: Fri, 23 Jul 2010 16:04:41 +0100 +Subject: USB: option: add huawei k3765 k4505 devices to work properly + +From: Andrew Bird + +commit 0372a754be9aa43e19fd86c9bc04796d43b55e38 upstream. + +This patch adds the product IDs of Huawei's K3765 and K4505 mobile +broadband usb modems to option.c. It also adds a quirk to the option +probe function so that binding to the device's network interface(class +0xff) is avoided. This is necessary to allow another driver to bind to +that, and to avoid programs like wvdial opening a nonfunctioning tty +during modem discovery. + +Signed-off-by: Andrew Bird +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -166,6 +166,8 @@ static int option_resume(struct usb_ser + #define HUAWEI_PRODUCT_E143D 0x143D + #define HUAWEI_PRODUCT_E143E 0x143E + #define HUAWEI_PRODUCT_E143F 0x143F ++#define HUAWEI_PRODUCT_K4505 0x1464 ++#define HUAWEI_PRODUCT_K3765 0x1465 + #define HUAWEI_PRODUCT_E14AC 0x14AC + #define HUAWEI_PRODUCT_ETS1220 0x1803 + +@@ -504,6 +506,8 @@ static const struct usb_device_id option + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143D, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143E, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143F, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4505, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ETS1220, 0xff, 0xff, 0xff) }, + { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC) }, + { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) }, +@@ -1048,6 +1052,13 @@ static int option_probe(struct usb_seria + serial->interface->cur_altsetting->desc.bInterfaceClass != 0xff) + return -ENODEV; + ++ /* Don't bind network interfaces on Huawei K3765 & K4505 */ ++ if (serial->dev->descriptor.idVendor == HUAWEI_VENDOR_ID && ++ (serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K3765 || ++ serial->dev->descriptor.idProduct == HUAWEI_PRODUCT_K4505) && ++ serial->interface->cur_altsetting->desc.bInterfaceNumber == 1) ++ return -ENODEV; ++ + data = serial->private = kzalloc(sizeof(struct option_intf_private), GFP_KERNEL); + if (!data) + return -ENOMEM; diff --git a/queue-2.6.34/usb-option-huawei-ets-1220-support-added.patch b/queue-2.6.34/usb-option-huawei-ets-1220-support-added.patch new file mode 100644 index 00000000000..7ed320378bd --- /dev/null +++ b/queue-2.6.34/usb-option-huawei-ets-1220-support-added.patch @@ -0,0 +1,37 @@ +From b972302b0a13aaddc9e90da2b4b52722e5d0e776 Mon Sep 17 00:00:00 2001 +From: Pavel Kazlou +Date: Thu, 22 Jul 2010 03:22:20 +0300 +Subject: USB: option: Huawei ETS 1220 support added + +From: Pavel Kazlou + +commit b972302b0a13aaddc9e90da2b4b52722e5d0e776 upstream. + +The patch adds Huawei ETS 1220 product id into the list of supported +devices in 'option' usb serial driver. + +Signed-off-by: Pavel Kazlou +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/option.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/usb/serial/option.c ++++ b/drivers/usb/serial/option.c +@@ -167,6 +167,7 @@ static int option_resume(struct usb_ser + #define HUAWEI_PRODUCT_E143E 0x143E + #define HUAWEI_PRODUCT_E143F 0x143F + #define HUAWEI_PRODUCT_E14AC 0x14AC ++#define HUAWEI_PRODUCT_ETS1220 0x1803 + + #define QUANTA_VENDOR_ID 0x0408 + #define QUANTA_PRODUCT_Q101 0xEA02 +@@ -503,6 +504,7 @@ static const struct usb_device_id option + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143D, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143E, 0xff, 0xff, 0xff) }, + { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E143F, 0xff, 0xff, 0xff) }, ++ { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ETS1220, 0xff, 0xff, 0xff) }, + { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC) }, + { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) }, + { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */ diff --git a/queue-2.6.34/usb-resizing-usbmon-binary-interface-buffer-causes-protection-faults.patch b/queue-2.6.34/usb-resizing-usbmon-binary-interface-buffer-causes-protection-faults.patch new file mode 100644 index 00000000000..fc1bb22507e --- /dev/null +++ b/queue-2.6.34/usb-resizing-usbmon-binary-interface-buffer-causes-protection-faults.patch @@ -0,0 +1,36 @@ +From 33d973ad88ceb83ed1449592b7574b5b5bb33ac6 Mon Sep 17 00:00:00 2001 +From: Steven Robertson +Date: Wed, 21 Jul 2010 16:38:44 -0400 +Subject: USB: resizing usbmon binary interface buffer causes protection faults + +From: Steven Robertson + +commit 33d973ad88ceb83ed1449592b7574b5b5bb33ac6 upstream. + +Enlarging the buffer size via the MON_IOCT_RING_SIZE ioctl causes +general protection faults. It appears the culprit is an incorrect +argument to mon_free_buff: instead of passing the size of the current +buffer being freed, the size of the new buffer is passed. + +Use the correct size argument to mon_free_buff when changing the size of +the buffer. + +Signed-off-by: Steven Robertson +Acked-by: Pete Zaitcev +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/mon/mon_bin.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/mon/mon_bin.c ++++ b/drivers/usb/mon/mon_bin.c +@@ -1010,7 +1010,7 @@ static int mon_bin_ioctl(struct inode *i + + mutex_lock(&rp->fetch_lock); + spin_lock_irqsave(&rp->b_lock, flags); +- mon_free_buff(rp->b_vec, size/CHUNK_SIZE); ++ mon_free_buff(rp->b_vec, rp->b_size/CHUNK_SIZE); + kfree(rp->b_vec); + rp->b_vec = vec; + rp->b_size = size; diff --git a/queue-2.6.34/usb-serial-enabling-support-for-segway-rmp-in-ftdi_sio.patch b/queue-2.6.34/usb-serial-enabling-support-for-segway-rmp-in-ftdi_sio.patch new file mode 100644 index 00000000000..aeeb543e4d4 --- /dev/null +++ b/queue-2.6.34/usb-serial-enabling-support-for-segway-rmp-in-ftdi_sio.patch @@ -0,0 +1,47 @@ +From afad19648f70c6493193e0a774bd754b7790b4a0 Mon Sep 17 00:00:00 2001 +From: John G. Rogers +Date: Sat, 24 Jul 2010 09:50:52 -0400 +Subject: USB: serial: enabling support for Segway RMP in ftdi_sio + +From: John G. Rogers + +commit afad19648f70c6493193e0a774bd754b7790b4a0 upstream. + +I have added the ProductID=0xe729 VendorID=FTDI_VID=0x0403 which will +enable support for the Segway Robotic Mobility Platform (RMP200) in the +ftdi_sio kernel module. Currently, users of the Segway RMP200 must use +a RUN+="/sbin/modprobe -q ftdi-sio product=0xe729 vendor=0x0403 in a +udev rule to get the ftdi_sio module to handle the usb interface and +mount it on /dev/ttyXXX. This is not a good solution because some users +will have multiple USB to Serial converters which will use the ftdi_sio +module. + +Signed-off-by: John Rogers +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/serial/ftdi_sio.c | 1 + + drivers/usb/serial/ftdi_sio_ids.h | 5 +++++ + 2 files changed, 6 insertions(+) + +--- a/drivers/usb/serial/ftdi_sio.c ++++ b/drivers/usb/serial/ftdi_sio.c +@@ -752,6 +752,7 @@ static struct usb_device_id id_table_com + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, + { USB_DEVICE(FTDI_VID, XVERVE_SIGNALYZER_SH4_PID), + .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, ++ { USB_DEVICE(FTDI_VID, SEGWAY_RMP200_PID) }, + { }, /* Optional parameter entry */ + { } /* Terminating entry */ + }; +--- a/drivers/usb/serial/ftdi_sio_ids.h ++++ b/drivers/usb/serial/ftdi_sio_ids.h +@@ -1039,3 +1039,8 @@ + #define XVERVE_SIGNALYZER_SH2_PID 0xBCA2 + #define XVERVE_SIGNALYZER_SH4_PID 0xBCA4 + ++/* ++ * Segway Robotic Mobility Platform USB interface (using VID 0x0403) ++ * Submitted by John G. Rogers ++ */ ++#define SEGWAY_RMP200_PID 0xe729 diff --git a/queue-2.6.34/usb-usbtest-avoid-to-free-coherent-buffer-in-atomic-context.patch b/queue-2.6.34/usb-usbtest-avoid-to-free-coherent-buffer-in-atomic-context.patch new file mode 100644 index 00000000000..8b293b1d76e --- /dev/null +++ b/queue-2.6.34/usb-usbtest-avoid-to-free-coherent-buffer-in-atomic-context.patch @@ -0,0 +1,80 @@ +From e10e1bec8e6654de4591ef45ddd6a6d1e5b2591c Mon Sep 17 00:00:00 2001 +From: Ming Lei +Date: Mon, 2 Aug 2010 22:09:01 +0800 +Subject: USB: usbtest: avoid to free coherent buffer in atomic context + +From: Ming Lei + +commit e10e1bec8e6654de4591ef45ddd6a6d1e5b2591c upstream. + +This patch fixes the warning below: +[30753.755998] ------------[ cut here ]------------ +[30753.755998] WARNING: at /home/tom/git/linux-2.6/linux-2.6-next/arch/x86/include/asm/dma-mapping.h:155 hcd_buffer_free+0xb1/0xd4 [usbcore]() +[30753.755998] Hardware name: 6475EK2 +[30753.755998] Modules linked in: uvcvideo ehci_hcd usbtest cdc_ether usbnet vfat fat usb_storage nfsd lockd nfs_acl auth_rpcgss exportfs mii tun videodev v4l1_compat v4l2_compat_ioctl32 fuse bridge stp llc sunrpc ipv6 cpufreq_ondemand acpi_cpufreq freq_table mperf kvm_intel kvm arc4 ecb ath5k usbhid mac80211 snd_hda_codec_conexant ch341 usbserial ath cfg80211 thinkpad_acpi snd_hda_intel pcspkr wmi hwmon yenta_socket iTCO_wdt iTCO_vendor_support i2c_i801 e1000e snd_hda_codec snd_hwdep snd_pcm snd_timer snd soundcore snd_page_alloc pata_acpi uhci_hcd ohci_hcd usbcore i915 drm_kms_helper drm i2c_algo_bit i2c_core video output [last unloaded: uvcvideo] +[30753.755998] Pid: 0, comm: swapper Tainted: G W 2.6.35-rc6-gkh-wl+ #49 +[30753.755998] Call Trace: +[30753.755998] [] warn_slowpath_common+0x80/0x98 +[30753.755998] [] warn_slowpath_null+0x15/0x17 +[30753.755998] [] hcd_buffer_free+0xb1/0xd4 [usbcore] +[30753.755998] [] usb_free_coherent+0x1c/0x1e [usbcore] +[30753.755998] [] simple_free_urb+0x23/0x2f [usbtest] +[30753.755998] [] iso_callback+0xbb/0x10f [usbtest] +[30753.755998] [] usb_hcd_giveback_urb+0x8c/0xc0 [usbcore] +[30753.755998] [] ehci_urb_done+0x84/0x95 [ehci_hcd] +[30753.755998] [] ehci_work+0x41a/0x7dd [ehci_hcd] +[30753.755998] [] ehci_irq+0x33b/0x370 [ehci_hcd] +[30753.755998] [] ? sched_clock+0x9/0xd +[30753.755998] [] ? sched_clock_local+0x1c/0x82 +[30753.755998] [] ? sched_clock_cpu+0xc3/0xce +[30753.755998] [] ? trace_hardirqs_off+0xd/0xf +[30753.755998] [] ? cpu_clock+0x43/0x5e +[30753.755998] [] usb_hcd_irq+0x45/0xa1 [usbcore] +[30753.755998] [] handle_IRQ_event+0x20/0xa5 +[30753.755998] [] handle_fasteoi_irq+0x92/0xd2 +[30753.755998] [] handle_irq+0x1f/0x2a +[30753.755998] [] do_IRQ+0x57/0xbe +[30753.755998] [] ret_from_intr+0x0/0x16 +[30753.755998] [] ? acpi_idle_enter_bm+0x231/0x269 +[30753.755998] [] ? acpi_idle_enter_bm+0x22a/0x269 +[30753.755998] [] cpuidle_idle_call+0x99/0xce +[30753.755998] [] cpu_idle+0x61/0xaa +[30753.755998] [] start_secondary+0x1c2/0x1c6 +[30753.755998] ---[ end trace 904cfaf7ab4cb1a2 ]--- + +Signed-off-by: Ming Lei +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/usb/misc/usbtest.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +--- a/drivers/usb/misc/usbtest.c ++++ b/drivers/usb/misc/usbtest.c +@@ -1383,7 +1383,6 @@ static void iso_callback (struct urb *ur + break; + } + } +- simple_free_urb (urb); + + ctx->pending--; + if (ctx->pending == 0) { +@@ -1500,6 +1499,7 @@ test_iso_queue (struct usbtest_dev *dev, + } + + simple_free_urb (urbs [i]); ++ urbs[i] = NULL; + context.pending--; + context.submit_error = 1; + break; +@@ -1509,6 +1509,10 @@ test_iso_queue (struct usbtest_dev *dev, + + wait_for_completion (&context.done); + ++ for (i = 0; i < param->sglen; i++) { ++ if (urbs[i]) ++ simple_free_urb(urbs[i]); ++ } + /* + * Isochronous transfers are expected to fail sometimes. As an + * arbitrary limit, we will report an error if any submissions diff --git a/queue-2.6.34/xen-do-not-suspend-ipi-irqs.patch b/queue-2.6.34/xen-do-not-suspend-ipi-irqs.patch new file mode 100644 index 00000000000..39aba0c2eea --- /dev/null +++ b/queue-2.6.34/xen-do-not-suspend-ipi-irqs.patch @@ -0,0 +1,42 @@ +From 4877c737283813bdb4bebfa3168c1585f6e3a8ca Mon Sep 17 00:00:00 2001 +From: Ian Campbell +Date: Thu, 29 Jul 2010 11:16:35 +0100 +Subject: xen: Do not suspend IPI IRQs. + +From: Ian Campbell + +commit 4877c737283813bdb4bebfa3168c1585f6e3a8ca upstream. + +In general the semantics of IPIs are that they are are expected to +continue functioning after dpm_suspend_noirq(). + +Specifically I have seen a deadlock between the callfunc IPI and the +stop machine used by xen's do_suspend() routine. If one CPU has already +called dpm_suspend_noirq() then there is a window where it can be sent +a callfunc IPI before all the other CPUs have entered stop_cpu(). + +If this happens then the first CPU ends up spinning in stop_cpu() +waiting for the other to rendezvous in state STOPMACHINE_PREPARE while +the other is spinning in csd_lock_wait(). + +Signed-off-by: Ian Campbell +Cc: Jeremy Fitzhardinge +Cc: xen-devel@lists.xensource.com +LKML-Reference: <1280398595-29708-4-git-send-email-ian.campbell@citrix.com> +Signed-off-by: Thomas Gleixner +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/xen/events.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/xen/events.c ++++ b/drivers/xen/events.c +@@ -536,6 +536,7 @@ int bind_ipi_to_irqhandler(enum ipi_vect + if (irq < 0) + return irq; + ++ irqflags |= IRQF_NO_SUSPEND; + retval = request_irq(irq, handler, irqflags, devname, dev_id); + if (retval != 0) { + unbind_from_irq(irq); diff --git a/queue-2.6.34/xen-netfront-explicitly-generate-arp_notify-event-after-migration.patch b/queue-2.6.34/xen-netfront-explicitly-generate-arp_notify-event-after-migration.patch new file mode 100644 index 00000000000..e2d6e877a93 --- /dev/null +++ b/queue-2.6.34/xen-netfront-explicitly-generate-arp_notify-event-after-migration.patch @@ -0,0 +1,35 @@ +From 592970675c9522bde588b945388c7995c8b51328 Mon Sep 17 00:00:00 2001 +From: Ian Campbell +Date: Wed, 26 May 2010 00:09:43 +0000 +Subject: xen: netfront: explicitly generate arp_notify event after migration. + +From: Ian Campbell + +commit 592970675c9522bde588b945388c7995c8b51328 upstream. + +Use newly introduced netif_notify_peers() method to ensure a gratuitous ARP is +generated after a migration. + +Signed-off-by: Ian Campbell +Cc: Stephen Hemminger +Cc: Jeremy Fitzhardinge +Cc: David S. Miller +Cc: netdev@vger.kernel.org +Cc: xen-devel@lists.xensource.com +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/xen-netfront.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/net/xen-netfront.c ++++ b/drivers/net/xen-netfront.c +@@ -1621,6 +1621,7 @@ static void backend_changed(struct xenbu + if (xennet_connect(netdev) != 0) + break; + xenbus_switch_state(dev, XenbusStateConnected); ++ netif_notify_peers(netdev); + break; + + case XenbusStateClosing: