--- /dev/null
+From 868003ca7ad17ac6c1606dc36101f10a7825b399 Mon Sep 17 00:00:00 2001
+From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
+Date: Mon, 2 Aug 2010 08:32:22 +0100
+Subject: ARM: 6280/1: imx: Fix build failure when including <mach/gpio.h> without <linux/spinlock.h>
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
+
+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 <u.kleine-koenig@pengutronix.de>
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+
+---
+ 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 <linux/spinlock.h>
+ #include <mach/hardware.h>
+ #include <asm-generic/gpio.h>
+
--- /dev/null
+From cdf357f1e13a08a11261edacb3083746f65c1ed9 Mon Sep 17 00:00:00 2001
+From: Will Deacon <will.deacon@arm.com>
+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 <will.deacon@arm.com>
+
+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 <rob@ti.com>
+Acked-by: Catalin Marinas <catalin.marinas@arm.com>
+Signed-off-by: Will Deacon <will.deacon@arm.com>
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ arch/arm/Kconfig | 12 ++++++++++++
+ arch/arm/include/asm/tlbflush.h | 8 ++++++++
+ 2 files changed, 20 insertions(+)
+
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -887,6 +887,18 @@ config ARM_ERRATA_460075
+ ACTLR register. Note that setting specific bits in the ACTLR register
+ may not be available in non-secure mode.
+
++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
+@@ -369,7 +369,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 */
+@@ -409,7 +413,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 */
--- /dev/null
+From 06c4648d46d1b757d6b9591a86810be79818b60c Mon Sep 17 00:00:00 2001
+From: Ian Campbell <Ian.Campbell@citrix.com>
+Date: Wed, 26 May 2010 00:09:42 +0000
+Subject: arp_notify: allow drivers to explicitly request a notification event.
+
+From: Ian Campbell <Ian.Campbell@citrix.com>
+
+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 <ian.campbell@citrix.com>
+Cc: Stephen Hemminger <shemminger@linux-foundation.org>
+Cc: Jeremy Fitzhardinge <jeremy@goop.org>
+Cc: David S. Miller <davem@davemloft.net>
+Cc: netdev@vger.kernel.org
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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
+@@ -1560,6 +1560,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
+@@ -201,6 +201,7 @@ static inline int notifier_to_errno(int
+ #define NETDEV_PRE_UP 0x000D
+ #define NETDEV_BONDING_OLDTYPE 0x000E
+ #define NETDEV_BONDING_NEWTYPE 0x000F
++#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
+@@ -1076,6 +1076,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
+@@ -330,6 +330,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.
--- /dev/null
+From aca27ba9618276dd2f777bcd5a1419589ccf1ca8 Mon Sep 17 00:00:00 2001
+From: Tejun Heo <tj@kernel.org>
+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 <tj@kernel.org>
+
+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 <tj@kernel.org>
+Reported-and-bisected-by: Vladislav Bolkhovitin <vst@vlnb.net>
+Root-caused-by: Neil Brown <neilb@suse.de>
+Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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))
--- /dev/null
+From b7300b78d1a87625975a799a109a2f98d77757c8 Mon Sep 17 00:00:00 2001
+From: Chris Wright <chrisw@sous-sol.org>
+Date: Tue, 10 Aug 2010 18:02:55 -0700
+Subject: blkdev: cgroup whitelist permission fix
+
+From: Chris Wright <chrisw@sous-sol.org>
+
+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 <chrisw@sous-sol.org>
+Acked-by: Serge E. Hallyn <serue@us.ibm.com>
+Tested-by: Serge E. Hallyn <serue@us.ibm.com>
+Reported-by: Vivek Goyal <vgoyal@redhat.com>
+Cc: Al Viro <viro@ZenIV.linux.org.uk>
+Cc: Christoph Hellwig <hch@infradead.org>
+Cc: "Daniel P. Berrange" <berrange@redhat.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/block_dev.c | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+--- a/fs/block_dev.c
++++ b/fs/block_dev.c
+@@ -1175,10 +1175,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();
--- /dev/null
+From 0a79f67445de50ca0a8dc1d34f3cc406d89c28b2 Mon Sep 17 00:00:00 2001
+From: Cyril Lacoux <clacoux@ifeelgood.org>
+Date: Wed, 14 Jul 2010 10:29:27 +0400
+Subject: Bluetooth: Added support for controller shipped with iMac i5
+
+From: Cyril Lacoux <clacoux@ifeelgood.org>
+
+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 <clacoux@ifeelgood.org>
+Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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) },
+
--- /dev/null
+From a4967de6cbb260ad0f6612a1d2035e119ef1578f Mon Sep 17 00:00:00 2001
+From: Adam Jackson <ajax@redhat.com>
+Date: Wed, 28 Jul 2010 07:40:32 +1000
+Subject: drm/edid: Fix the HDTV hack sync adjustment
+
+From: Adam Jackson <ajax@redhat.com>
+
+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 <ajax@redhat.com>
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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
+@@ -565,8 +565,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;
--- /dev/null
+From f458823b864c6def488f951a79986fa205aba4f1 Mon Sep 17 00:00:00 2001
+From: Dave Müller <dave.mueller@gmx.ch>
+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 <dave.mueller@gmx.ch>
+
+commit f458823b864c6def488f951a79986fa205aba4f1 upstream.
+
+Presence detection of a digital monitor seems not to be reliable using
+the HTPLG bit.
+
+Dave Müller <dave.mueller@gmx.ch>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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
+@@ -214,7 +214,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;
--- /dev/null
+From c43f7b8fb03be8bcc579bfc4e6ab70eac887ab55 Mon Sep 17 00:00:00 2001
+From: Tyler Hicks <tyhicks@linux.vnet.ibm.com>
+Date: Tue, 3 Nov 2009 11:45:11 -0600
+Subject: eCryptfs: Handle ioctl calls with unlocked and compat functions
+
+From: Tyler Hicks <tyhicks@linux.vnet.ibm.com>
+
+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 <james.dupin@gmail.com>
+Signed-off-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/ecryptfs/file.c | 56 +++++++++++++++++++++++++++++++++--------------------
+ 1 file changed, 35 insertions(+), 21 deletions(-)
+
+--- a/fs/ecryptfs/file.c
++++ b/fs/ecryptfs/file.c
+@@ -293,12 +293,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
+ .mmap = generic_file_mmap,
+ .open = ecryptfs_open,
+ .flush = ecryptfs_flush,
+@@ -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;
+-}
--- /dev/null
+From 31f73bee3e170b7cabb35db9e2f4bf7919b9d036 Mon Sep 17 00:00:00 2001
+From: Lino Sanfilippo <LinoSanfilippo@gmx.de>
+Date: Thu, 29 Jul 2010 13:01:36 +0200
+Subject: ecryptfs: release reference to lower mount if interpose fails
+
+From: Lino Sanfilippo <LinoSanfilippo@gmx.de>
+
+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 <LinoSanfilippo@gmx.de>
+Signed-off-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/ecryptfs/inode.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+--- a/fs/ecryptfs/inode.c
++++ b/fs/ecryptfs/inode.c
+@@ -272,7 +272,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);
+@@ -345,8 +345,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;
--- /dev/null
+From 437f88cc031ffe7f37f3e705367f4fe1f4be8b0f Mon Sep 17 00:00:00 2001
+From: Eric Sandeen <sandeen@sandeen.net>
+Date: Sun, 1 Aug 2010 17:33:29 -0400
+Subject: ext4: fix freeze deadlock under IO
+
+From: Eric Sandeen <sandeen@sandeen.net>
+
+commit 437f88cc031ffe7f37f3e705367f4fe1f4be8b0f upstream.
+
+Commit 6b0310fbf087ad6 caused a regression resulting in deadlocks
+when freezing a filesystem which had active IO; the vfs_check_frozen
+level (SB_FREEZE_WRITE) did not let the freeze-related IO syncing
+through. Duh.
+
+Changing the test to FREEZE_TRANS should let the normal freeze
+syncing get through the fs, but still block any transactions from
+starting once the fs is completely frozen.
+
+I tested this by running fsstress in the background while periodically
+snapshotting the fs and running fsck on the result. I ran into
+occasional deadlocks, but different ones. I think this is a
+fine fix for the problem at hand, and the other deadlocky things
+will need more investigation.
+
+Reported-by: Phillip Susi <psusi@cfl.rr.com>
+Signed-off-by: Eric Sandeen <sandeen@redhat.com>
+Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/ext4/super.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -227,7 +227,7 @@ handle_t *ext4_journal_start_sb(struct s
+ if (sb->s_flags & MS_RDONLY)
+ return ERR_PTR(-EROFS);
+
+- vfs_check_frozen(sb, SB_FREEZE_WRITE);
++ vfs_check_frozen(sb, SB_FREEZE_TRANS);
+ /* Special case here: if the journal has aborted behind our
+ * backs (eg. EIO in the commit thread), then we still need to
+ * take the FS itself readonly cleanly. */
+@@ -3390,7 +3390,7 @@ int ext4_force_commit(struct super_block
+
+ journal = EXT4_SB(sb)->s_journal;
+ if (journal) {
+- vfs_check_frozen(sb, SB_FREEZE_WRITE);
++ vfs_check_frozen(sb, SB_FREEZE_TRANS);
+ ret = ext4_journal_force_commit(journal);
+ }
+
--- /dev/null
+From ceeab92971e8af05c1e81a4ff2c271124b55bb9b Mon Sep 17 00:00:00 2001
+From: Julia Lawall <julia@diku.dk>
+Date: Fri, 6 Aug 2010 22:58:49 +0200
+Subject: fs/ecryptfs/file.c: introduce missing free
+
+From: Julia Lawall <julia@diku.dk>
+
+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/)
+
+// <smpl>
+@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)
+// </smpl>
+
+Signed-off-by: Julia Lawall <julia@diku.dk>
+Signed-off-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/ecryptfs/file.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/fs/ecryptfs/file.c
++++ b/fs/ecryptfs/file.c
+@@ -198,7 +198,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)
+@@ -206,7 +206,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);
--- /dev/null
+From 685fd0b4ea3f0f1d5385610b0d5b57775a8d5842 Mon Sep 17 00:00:00 2001
+From: Ian Campbell <ian.campbell@citrix.com>
+Date: Thu, 29 Jul 2010 11:16:32 +0100
+Subject: irq: Add new IRQ flag IRQF_NO_SUSPEND
+
+From: Ian Campbell <ian.campbell@citrix.com>
+
+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 <ian.campbell@citrix.com>
+Cc: Jeremy Fitzhardinge <jeremy@goop.org>
+Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
+Cc: Paul Mackerras <paulus@samba.org>
+Cc: Grant Likely <grant.likely@secretlab.ca>
+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 <tglx@linutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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;
+ }
--- /dev/null
+From aca0fa34bdaba39bfddddba8ca70dba4782e8fe6 Mon Sep 17 00:00:00 2001
+From: Dave Kleikamp <shaggy@linux.vnet.ibm.com>
+Date: Mon, 9 Aug 2010 15:57:38 -0500
+Subject: jfs: don't allow os2 xattr namespace overlap with others
+
+From: Dave Kleikamp <shaggy@linux.vnet.ibm.com>
+
+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 <shaggy@linux.vnet.ibm.com>
+Reported-by: Sergey Vlasov <vsu@altlinux.ru>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/jfs/xattr.c | 87 ++++++++++++++++++++++++---------------------------------
+ 1 file changed, 38 insertions(+), 49 deletions(-)
+
+--- a/fs/jfs/xattr.c
++++ b/fs/jfs/xattr.c
+@@ -85,46 +85,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)
+@@ -762,13 +741,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;
+@@ -950,19 +939,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);
+@@ -1000,8 +978,6 @@ ssize_t __jfs_getxattr(struct inode *ino
+ out:
+ up_read(&JFS_IP(inode)->xattr_sem);
+
+- kfree(os2name);
+-
+ return size;
+ }
+
+@@ -1010,6 +986,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;
+++ /dev/null
-From 966cca029f739716fbcc8068b8c6dfe381f86fc3 Mon Sep 17 00:00:00 2001
-From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
-Date: Mon, 9 Aug 2010 17:20:09 -0700
-Subject: mm: fix corruption of hibernation caused by reusing swap during image saving
-
-From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
-
-commit 966cca029f739716fbcc8068b8c6dfe381f86fc3 upstream.
-
-Since 2.6.31, swap_map[]'s refcounting was changed to show that a used
-swap entry is just for swap-cache, can be reused. Then, while scanning
-free entry in swap_map[], a swap entry may be able to be reclaimed and
-reused. It was caused by commit c9e444103b5e7a5 ("mm: reuse unused swap
-entry if necessary").
-
-But this caused deta corruption at resume. The scenario is
-
-- Assume a clean-swap cache, but mapped.
-
-- at hibernation_snapshot[], clean-swap-cache is saved as
- clean-swap-cache and swap_map[] is marked as SWAP_HAS_CACHE.
-
-- then, save_image() is called. And reuse SWAP_HAS_CACHE entry to save
- image, and break the contents.
-
-After resume:
-
-- the memory reclaim runs and finds clean-not-referenced-swap-cache and
- discards it because it's marked as clean. But here, the contents on
- disk and swap-cache is inconsistent.
-
-Hance memory is corrupted.
-
-This patch avoids the bug by not reclaiming swap-entry during hibernation.
-This is a quick fix for backporting.
-
-Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
-Cc: Rafael J. Wysocki <rjw@sisk.pl>
-Reported-by: Ondreg Zary <linux@rainbow-software.org>
-Tested-by: Ondreg Zary <linux@rainbow-software.org>
-Tested-by: Andrea Gelmini <andrea.gelmini@gmail.com>
-Acked-by: Hugh Dickins <hughd@google.com>
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- mm/swapfile.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
---- a/mm/swapfile.c
-+++ b/mm/swapfile.c
-@@ -330,8 +330,10 @@ checks:
- if (offset > si->highest_bit)
- scan_base = offset = si->lowest_bit;
-
-- /* reuse swap entry of cache-only swap if not busy. */
-- if (vm_swap_full() && si->swap_map[offset] == SWAP_HAS_CACHE) {
-+ /* reuse swap entry of cache-only swap if not hibernation. */
-+ if (vm_swap_full()
-+ && usage == SWAP_HAS_CACHE
-+ && si->swap_map[offset] == SWAP_HAS_CACHE) {
- int swap_was_freed;
- spin_unlock(&swap_lock);
- swap_was_freed = __try_to_reclaim_swap(si, offset);
--- /dev/null
+From 38117d1495e587fbb10d6e55733139a27893cef5 Mon Sep 17 00:00:00 2001
+From: David S. Miller <davem@davemloft.net>
+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 <davem@davemloft.net>
+
+commit 38117d1495e587fbb10d6e55733139a27893cef5 upstream.
+
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/linux/notifier.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/include/linux/notifier.h
++++ b/include/linux/notifier.h
+@@ -201,7 +201,7 @@ static inline int notifier_to_errno(int
+ #define NETDEV_PRE_UP 0x000D
+ #define NETDEV_BONDING_OLDTYPE 0x000E
+ #define NETDEV_BONDING_NEWTYPE 0x000F
+-#define NETDEV_NOTIFY_PEERS 0x0012
++#define NETDEV_NOTIFY_PEERS 0x0013
+
+ #define SYS_DOWN 0x0001 /* Notify of system down */
+ #define SYS_RESTART SYS_DOWN
pci-disable-msi-on-via-k8m800.patch
solos-pci-fix-race-condition-in-tasklet-rx-handling.patch
splice-fix-misuse-of-splice_f_nonblock.patch
-mm-fix-corruption-of-hibernation-caused-by-reusing-swap-during-image-saving.patch
drivers-video-w100fb.c-ignore-void-return-value-fix-build-failure.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
+bio-fs-update-rwa_mask-reada-and-swrite-to-match-the-corresponding-bio_rw_-bits.patch
+signalfd-fill-in-ssi_int-for-posix-timers-and-message-queues.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-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
+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
+ext4-fix-freeze-deadlock-under-io.patch
+drm-i915-use-rsen-instead-of-htplg-for-tfp410-monitor-detection.patch
--- /dev/null
+From a2a20c412c86e0bb46a9ab0dd31bcfe6d201b913 Mon Sep 17 00:00:00 2001
+From: Nathan Lynch <ntl@pobox.com>
+Date: Tue, 10 Aug 2010 18:03:08 -0700
+Subject: signalfd: fill in ssi_int for posix timers and message queues
+
+From: Nathan Lynch <ntl@pobox.com>
+
+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 <ntl@pobox.com>
+Acked-by: Davide Libenzi <davidel@xmailserver.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ fs/signalfd.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/fs/signalfd.c
++++ b/fs/signalfd.c
+@@ -87,6 +87,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);
+@@ -110,6 +111,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:
+ /*
--- /dev/null
+From 492c5d943d6a04b124ba3a719dc746dc36b14cfb Mon Sep 17 00:00:00 2001
+From: Catalin Marinas <catalin.marinas@arm.com>
+Date: Mon, 19 Jul 2010 13:36:21 -0700
+Subject: smsc911x: Add spinlocks around registers access
+
+From: Catalin Marinas <catalin.marinas@arm.com>
+
+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 <catalin.marinas@arm.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/smsc911x.c | 92 +++++++++++++++++++++++++++----------------------
+ 1 file changed, 52 insertions(+), 40 deletions(-)
+
+--- a/drivers/net/smsc911x.c
++++ b/drivers/net/smsc911x.c
+@@ -85,8 +85,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;
+@@ -119,37 +118,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);
+@@ -157,44 +152,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 */
+@@ -202,24 +207,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
--- /dev/null
+From 356c5a4834a74c621715f7a7f16ded914eecbd3c Mon Sep 17 00:00:00 2001
+From: Alessio Igor Bogani <abogani@texware.it>
+Date: Tue, 27 Jul 2010 23:05:14 +0200
+Subject: USB: cp210x: Add four new device IDs
+
+From: Alessio Igor Bogani <abogani@texware.it>
+
+commit 356c5a4834a74c621715f7a7f16ded914eecbd3c upstream.
+
+Signed-off-by: Alessio Igor Bogani <abogani@texware.it>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 struct usb_device_id id_table []
+ { 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 */
+ };
+
--- /dev/null
+From 93362a875fc69881ae69299efaf19a55a1f57db0 Mon Sep 17 00:00:00 2001
+From: Phil Dibowitz <phil@ipom.com>
+Date: Thu, 22 Jul 2010 00:05:01 +0200
+Subject: USB delay init quirk for logitech Harmony 700-series devices
+
+From: Phil Dibowitz <phil@ipom.com>
+
+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 <phil@ipom.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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
+@@ -22,6 +22,7 @@
+ #include <linux/kthread.h>
+ #include <linux/mutex.h>
+ #include <linux/freezer.h>
++#include <linux/usb/quirks.h>
+
+ #include <asm/uaccess.h>
+ #include <asm/byteorder.h>
+@@ -1768,7 +1769,6 @@ int usb_new_device(struct usb_device *ud
+ if (udev->parent)
+ usb_autoresume_device(udev->parent);
+
+- usb_detect_quirks(udev);
+ err = usb_enumerate_device(udev); /* Read descriptors */
+ if (err < 0)
+ goto fail;
+@@ -3063,6 +3063,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
+@@ -19,4 +19,8 @@
+ /* device can't handle its Configuration or Interface strings */
+ #define USB_QUIRK_CONFIG_INTF_STRINGS 0x00000008
+
++/* device needs a pause during initialization, after we read the device
++ descriptor */
++#define USB_QUIRK_DELAY_INIT 0x00000040
++
+ #endif /* __LINUX_USB_QUIRKS_H */
--- /dev/null
+From b3e670443b7fb8a2d29831b62b44a039c283e351 Mon Sep 17 00:00:00 2001
+From: Christian Lamparter <chunkeey@googlemail.com>
+Date: Tue, 3 Aug 2010 02:32:28 +0200
+Subject: USB: fix thread-unsafe anchor utiliy routines
+
+From: Christian Lamparter <chunkeey@googlemail.com>
+
+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 <oneukum@suse.de>
+Cc: Greg Kroah-Hartman <greg@kroah.com>
+Acked-by: Alan Stern <stern@rowland.harvard.edu>
+Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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);
+
+@@ -725,20 +732,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);
+
+@@ -775,12 +773,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;
+ }
+@@ -802,12 +799,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);
+ }
--- /dev/null
+From b6180ef7c99574c3350bbffa2a3a9d675321543d Mon Sep 17 00:00:00 2001
+From: dranch@trinnet.net <dranch@trinnet.net>
+Date: Mon, 26 Jul 2010 19:44:33 -0700
+Subject: USB: ftdi_sio: device id for Navitator
+
+From: dranch@trinnet.net <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 <dranch@trinnet.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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 <joernk@web.de>
+ * (http://www.joernonline.de/dw/doku.php?id=start&idx=projects:oocdlink) */
+ #define FTDI_OOCDLINK_PID 0xbaf8 /* Amontec JTAGkey */
--- /dev/null
+From 0372a754be9aa43e19fd86c9bc04796d43b55e38 Mon Sep 17 00:00:00 2001
+From: Andrew Bird <ajb@spheresystems.co.uk>
+Date: Fri, 23 Jul 2010 16:04:41 +0100
+Subject: USB: option: add huawei k3765 k4505 devices to work properly
+
+From: Andrew Bird <ajb@spheresystems.co.uk>
+
+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 <ajb@spheresystems.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/option.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -165,6 +165,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
+
+@@ -470,6 +472,8 @@ static struct usb_device_id option_ids[]
+ { 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) },
+@@ -1009,6 +1013,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;
--- /dev/null
+From b972302b0a13aaddc9e90da2b4b52722e5d0e776 Mon Sep 17 00:00:00 2001
+From: Pavel Kazlou <p.i.kazlou@gmail.com>
+Date: Thu, 22 Jul 2010 03:22:20 +0300
+Subject: USB: option: Huawei ETS 1220 support added
+
+From: Pavel Kazlou <p.i.kazlou@gmail.com>
+
+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 <p.i.kazlou@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/usb/serial/option.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/usb/serial/option.c
++++ b/drivers/usb/serial/option.c
+@@ -166,6 +166,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
+@@ -469,6 +470,7 @@ static struct usb_device_id option_ids[]
+ { 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 */
--- /dev/null
+From 33d973ad88ceb83ed1449592b7574b5b5bb33ac6 Mon Sep 17 00:00:00 2001
+From: Steven Robertson <steven@strobe.cc>
+Date: Wed, 21 Jul 2010 16:38:44 -0400
+Subject: USB: resizing usbmon binary interface buffer causes protection faults
+
+From: Steven Robertson <steven@strobe.cc>
+
+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 <steven@strobe.cc>
+Acked-by: Pete Zaitcev <zaitcev@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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
+@@ -971,7 +971,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;
--- /dev/null
+From afad19648f70c6493193e0a774bd754b7790b4a0 Mon Sep 17 00:00:00 2001
+From: John G. Rogers <jgrogers@gmail.com>
+Date: Sat, 24 Jul 2010 09:50:52 -0400
+Subject: USB: serial: enabling support for Segway RMP in ftdi_sio
+
+From: John G. Rogers <jgrogers@gmail.com>
+
+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 <jgrogers@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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
--- /dev/null
+From e10e1bec8e6654de4591ef45ddd6a6d1e5b2591c Mon Sep 17 00:00:00 2001
+From: Ming Lei <tom.leiming@gmail.com>
+Date: Mon, 2 Aug 2010 22:09:01 +0800
+Subject: USB: usbtest: avoid to free coherent buffer in atomic context
+
+From: Ming Lei <tom.leiming@gmail.com>
+
+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] <IRQ> [<ffffffff8104478a>] warn_slowpath_common+0x80/0x98
+[30753.755998] [<ffffffff810447b7>] warn_slowpath_null+0x15/0x17
+[30753.755998] [<ffffffffa00ce02d>] hcd_buffer_free+0xb1/0xd4 [usbcore]
+[30753.755998] [<ffffffffa00c1345>] usb_free_coherent+0x1c/0x1e [usbcore]
+[30753.755998] [<ffffffffa00b13e4>] simple_free_urb+0x23/0x2f [usbtest]
+[30753.755998] [<ffffffffa00b210b>] iso_callback+0xbb/0x10f [usbtest]
+[30753.755998] [<ffffffffa00c7390>] usb_hcd_giveback_urb+0x8c/0xc0 [usbcore]
+[30753.755998] [<ffffffffa0449b35>] ehci_urb_done+0x84/0x95 [ehci_hcd]
+[30753.755998] [<ffffffffa044b5a5>] ehci_work+0x41a/0x7dd [ehci_hcd]
+[30753.755998] [<ffffffffa044e298>] ehci_irq+0x33b/0x370 [ehci_hcd]
+[30753.755998] [<ffffffff8100fb05>] ? sched_clock+0x9/0xd
+[30753.755998] [<ffffffff8105e641>] ? sched_clock_local+0x1c/0x82
+[30753.755998] [<ffffffff8105e76a>] ? sched_clock_cpu+0xc3/0xce
+[30753.755998] [<ffffffff81067c7e>] ? trace_hardirqs_off+0xd/0xf
+[30753.755998] [<ffffffff8105e7b8>] ? cpu_clock+0x43/0x5e
+[30753.755998] [<ffffffffa00c6999>] usb_hcd_irq+0x45/0xa1 [usbcore]
+[30753.755998] [<ffffffff81092e02>] handle_IRQ_event+0x20/0xa5
+[30753.755998] [<ffffffff81094cea>] handle_fasteoi_irq+0x92/0xd2
+[30753.755998] [<ffffffff8100c0ed>] handle_irq+0x1f/0x2a
+[30753.755998] [<ffffffff8100b75d>] do_IRQ+0x57/0xbe
+[30753.755998] [<ffffffff8136a693>] ret_from_intr+0x0/0x16
+[30753.755998] <EOI> [<ffffffff81223baa>] ? acpi_idle_enter_bm+0x231/0x269
+[30753.755998] [<ffffffff81223ba3>] ? acpi_idle_enter_bm+0x22a/0x269
+[30753.755998] [<ffffffff812c4b6b>] cpuidle_idle_call+0x99/0xce
+[30753.755998] [<ffffffff81008dd5>] cpu_idle+0x61/0xaa
+[30753.755998] [<ffffffff8136374b>] start_secondary+0x1c2/0x1c6
+[30753.755998] ---[ end trace 904cfaf7ab4cb1a2 ]---
+
+Signed-off-by: Ming Lei <tom.leiming@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ 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
+@@ -1382,7 +1382,6 @@ static void iso_callback (struct urb *ur
+ break;
+ }
+ }
+- simple_free_urb (urb);
+
+ ctx->pending--;
+ if (ctx->pending == 0) {
+@@ -1499,6 +1498,7 @@ test_iso_queue (struct usbtest_dev *dev,
+ }
+
+ simple_free_urb (urbs [i]);
++ urbs[i] = NULL;
+ context.pending--;
+ context.submit_error = 1;
+ break;
+@@ -1508,6 +1508,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
--- /dev/null
+From 4877c737283813bdb4bebfa3168c1585f6e3a8ca Mon Sep 17 00:00:00 2001
+From: Ian Campbell <ian.campbell@citrix.com>
+Date: Thu, 29 Jul 2010 11:16:35 +0100
+Subject: xen: Do not suspend IPI IRQs.
+
+From: Ian Campbell <ian.campbell@citrix.com>
+
+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 <ian.campbell@citrix.com>
+Cc: Jeremy Fitzhardinge <jeremy@goop.org>
+Cc: xen-devel@lists.xensource.com
+LKML-Reference: <1280398595-29708-4-git-send-email-ian.campbell@citrix.com>
+Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/xen/events.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/xen/events.c
++++ b/drivers/xen/events.c
+@@ -535,6 +535,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);
--- /dev/null
+From 592970675c9522bde588b945388c7995c8b51328 Mon Sep 17 00:00:00 2001
+From: Ian Campbell <Ian.Campbell@citrix.com>
+Date: Wed, 26 May 2010 00:09:43 +0000
+Subject: xen: netfront: explicitly generate arp_notify event after migration.
+
+From: Ian Campbell <Ian.Campbell@citrix.com>
+
+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 <ian.campbell@citrix.com>
+Cc: Stephen Hemminger <shemminger@linux-foundation.org>
+Cc: Jeremy Fitzhardinge <jeremy@goop.org>
+Cc: David S. Miller <davem@davemloft.net>
+Cc: netdev@vger.kernel.org
+Cc: xen-devel@lists.xensource.com
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/net/xen-netfront.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/net/xen-netfront.c
++++ b/drivers/net/xen-netfront.c
+@@ -1619,6 +1619,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: