aboutsummaryrefslogtreecommitdiffstats
diff options
authorGreg Kroah-Hartman <gregkh@suse.de>2010-08-05 11:22:30 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2010-08-05 11:22:30 -0700
commita7c6d4fb3ad0fde884f9a83d33cae3bcb55a30e5 (patch)
treed10b7a023d1b667098fbb7e1ffe33a4d863c2040
parent147c7b894ea67c33a6524f8ce14a47288d0ac371 (diff)
downloadpatches-a7c6d4fb3ad0fde884f9a83d33cae3bcb55a30e5.tar.gz
2.6.35-git2
-rw-r--r--driver-core/cgroupfs-create-sys-fs-cgroup-to-mount-cgroupfs-on.patch8
-rw-r--r--driver-core/driver-core-device_rename-s-new_name-can-be-const.patch40
-rw-r--r--driver-core/scsi-remove-owner-field-from-attribute-initialization-in-lpfc-driver.patch2
-rw-r--r--series3
-rw-r--r--tty/8250-fix-set_ldisc-operation.patch2
-rw-r--r--tty/hsu-driver-for-medfield-high-speed-uart-device.patch2
-rw-r--r--tty/mrst_max3110-add-uart-driver-for-max3110-on-moorestown.patch2
-rw-r--r--tty/serial-max3107-abstract-out-the-platform-specific-bits.patch2
-rw-r--r--tty/serial-max3107-introduce-a-max3107-driver.patch2
-rw-r--r--tty/serial-mmio32-support-for-8250_early.c.patch2
-rw-r--r--tty/tty-add-extproc-support-for-linemode.patch2
-rw-r--r--tty/u6715-16550a-serial-driver-support.patch12
-rw-r--r--usb/pci-change-device-runtime-pm-settings-for-probe-and-remove-do-not-send.patch6
-rw-r--r--usb/usb-fix-stuck-usb-generic-serial-driver.patch62
-rw-r--r--usb/usb-fix-thread-unsafe-anchor-utiliy-routines.patch133
-rw-r--r--usb/usb-gadget-g_ether-updated-inf-file.patch2
-rw-r--r--usb/usb-otg-ulpi-extend-the-generic-ulpi-driver.patch35
-rw-r--r--usb/usb-throw-away-custom-hex-digit-methods.patch4
-rw-r--r--version2
19 files changed, 210 insertions, 113 deletions
diff --git a/driver-core/cgroupfs-create-sys-fs-cgroup-to-mount-cgroupfs-on.patch b/driver-core/cgroupfs-create-sys-fs-cgroup-to-mount-cgroupfs-on.patch
index 4d41d5284cec30..55e03cd1c40010 100644
--- a/driver-core/cgroupfs-create-sys-fs-cgroup-to-mount-cgroupfs-on.patch
+++ b/driver-core/cgroupfs-create-sys-fs-cgroup-to-mount-cgroupfs-on.patch
@@ -22,9 +22,13 @@ Cc: Lennart Poettering <lennart@poettering.net>
Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+---
+ kernel/cgroup.c | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
--- a/kernel/cgroup.c
+++ b/kernel/cgroup.c
-@@ -1623,6 +1623,8 @@ static struct file_system_type cgroup_fs_type = {
+@@ -1623,6 +1623,8 @@ static struct file_system_type cgroup_fs
.kill_sb = cgroup_kill_sb,
};
@@ -33,7 +37,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
static inline struct cgroup *__d_cgrp(struct dentry *dentry)
{
return dentry->d_fsdata;
-@@ -3871,9 +3873,18 @@ int __init cgroup_init(void)
+@@ -3894,9 +3896,18 @@ int __init cgroup_init(void)
hhead = css_set_hash(init_css_set.subsys);
hlist_add_head(&init_css_set.hlist, hhead);
BUG_ON(!init_root_id(&rootnode));
diff --git a/driver-core/driver-core-device_rename-s-new_name-can-be-const.patch b/driver-core/driver-core-device_rename-s-new_name-can-be-const.patch
new file mode 100644
index 00000000000000..8d1b07c5feae81
--- /dev/null
+++ b/driver-core/driver-core-device_rename-s-new_name-can-be-const.patch
@@ -0,0 +1,40 @@
+From johannes@sipsolutions.net Thu Aug 5 11:02:37 2010
+Subject: driver core: device_rename's new_name can be const
+From: Johannes Berg <johannes@sipsolutions.net>
+To: Greg Kroah-Hartman <gregkh@suse.de>
+Date: Thu, 05 Aug 2010 17:38:18 +0200
+Message-ID: <1281022698.4058.9.camel@jlt3.sipsolutions.net>
+
+The new_name argument to device_rename() can be
+const as kobject_rename's new_name argument is.
+
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/base/core.c | 2 +-
+ include/linux/device.h | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/base/core.c
++++ b/drivers/base/core.c
+@@ -1599,7 +1599,7 @@ EXPORT_SYMBOL_GPL(device_destroy);
+ * on the same device to ensure that new_name is valid and
+ * won't conflict with other devices.
+ */
+-int device_rename(struct device *dev, char *new_name)
++int device_rename(struct device *dev, const char *new_name)
+ {
+ char *old_class_name = NULL;
+ char *new_class_name = NULL;
+--- a/include/linux/device.h
++++ b/include/linux/device.h
+@@ -552,7 +552,7 @@ extern int device_for_each_child(struct
+ int (*fn)(struct device *dev, void *data));
+ extern struct device *device_find_child(struct device *dev, void *data,
+ int (*match)(struct device *dev, void *data));
+-extern int device_rename(struct device *dev, char *new_name);
++extern int device_rename(struct device *dev, const char *new_name);
+ extern int device_move(struct device *dev, struct device *new_parent,
+ enum dpm_order dpm_order);
+ extern const char *device_get_devnode(struct device *dev,
diff --git a/driver-core/scsi-remove-owner-field-from-attribute-initialization-in-lpfc-driver.patch b/driver-core/scsi-remove-owner-field-from-attribute-initialization-in-lpfc-driver.patch
index 5c057d976b5b0d..0629eef2f9c6a1 100644
--- a/driver-core/scsi-remove-owner-field-from-attribute-initialization-in-lpfc-driver.patch
+++ b/driver-core/scsi-remove-owner-field-from-attribute-initialization-in-lpfc-driver.patch
@@ -32,7 +32,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
--- a/drivers/scsi/lpfc/lpfc_attr.c
+++ b/drivers/scsi/lpfc/lpfc_attr.c
-@@ -2720,7 +2720,6 @@ static struct bin_attribute sysfs_drvr_s
+@@ -2778,7 +2778,6 @@ static struct bin_attribute sysfs_drvr_s
.attr = {
.name = "lpfc_drvr_stat_data",
.mode = S_IRUSR,
diff --git a/series b/series
index 71e90aae183027..cb480aedaceb66 100644
--- a/series
+++ b/series
@@ -56,6 +56,7 @@ driver-core/leds-remove-owner-field-from-attribute-initialization-in-bd2802-driv
driver-core/regulator-remove-owner-field-from-attribute-initialization-in-regulator-core-driver.patch
driver-core/powerpc-pci-remove-owner-field-from-attribute-initialization-in-pci-bridge-init.patch
driver-core/sysfs-remove-owner-field-from-sysfs-struct-attribute.patch
+driver-core/driver-core-device_rename-s-new_name-can-be-const.patch
# can we really drop it? (nope, not yet...)
#driver-core/driver-core-remove-config_sysfs_deprecated.patch
@@ -285,7 +286,7 @@ usb/usb-xhci-don-t-flush-doorbell-writes.patch
usb/usb-xhci-set-dma-mask-for-host.patch
usb/usb-usbtest-avoid-to-free-coherent-buffer-in-atomic-context.patch
usb/usb-usbtest-support-test-device-with-only-one-iso-in-or-iso-out-endpoint.patch
-usb/usb-fix-stuck-usb-generic-serial-driver.patch
+usb/usb-fix-thread-unsafe-anchor-utiliy-routines.patch
# staging stuff is now in the staging-next tree on git.kernel.org
diff --git a/tty/8250-fix-set_ldisc-operation.patch b/tty/8250-fix-set_ldisc-operation.patch
index fee1599e8cbe0f..2b4c51832b28f9 100644
--- a/tty/8250-fix-set_ldisc-operation.patch
+++ b/tty/8250-fix-set_ldisc-operation.patch
@@ -20,7 +20,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
--- a/drivers/serial/8250.c
+++ b/drivers/serial/8250.c
-@@ -2409,14 +2409,9 @@ serial8250_set_termios(struct uart_port
+@@ -2404,14 +2404,9 @@ serial8250_set_termios(struct uart_port
}
static void
diff --git a/tty/hsu-driver-for-medfield-high-speed-uart-device.patch b/tty/hsu-driver-for-medfield-high-speed-uart-device.patch
index f59ba02f2aa726..ca4569543b5ba8 100644
--- a/tty/hsu-driver-for-medfield-high-speed-uart-device.patch
+++ b/tty/hsu-driver-for-medfield-high-speed-uart-device.patch
@@ -42,7 +42,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
-@@ -732,6 +732,16 @@ config MRST_MAX3110_IRQ
+@@ -724,6 +724,16 @@ config MRST_MAX3110_IRQ
help
This has to be enabled after Moorestown GPIO driver is loaded
diff --git a/tty/mrst_max3110-add-uart-driver-for-max3110-on-moorestown.patch b/tty/mrst_max3110-add-uart-driver-for-max3110-on-moorestown.patch
index 011a3d5aa18780..bc3a4535c2fc7a 100644
--- a/tty/mrst_max3110-add-uart-driver-for-max3110-on-moorestown.patch
+++ b/tty/mrst_max3110-add-uart-driver-for-max3110-on-moorestown.patch
@@ -27,7 +27,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
-@@ -698,6 +698,23 @@ config SERIAL_SA1100_CONSOLE
+@@ -690,6 +690,23 @@ config SERIAL_SA1100_CONSOLE
your boot loader (lilo or loadlin) about how to pass options to the
kernel at boot time.)
diff --git a/tty/serial-max3107-abstract-out-the-platform-specific-bits.patch b/tty/serial-max3107-abstract-out-the-platform-specific-bits.patch
index 1bdce1ea0c6422..26d1a43f7d3e00 100644
--- a/tty/serial-max3107-abstract-out-the-platform-specific-bits.patch
+++ b/tty/serial-max3107-abstract-out-the-platform-specific-bits.patch
@@ -24,7 +24,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
-@@ -550,20 +550,29 @@ config SERIAL_S5PV210
+@@ -542,20 +542,29 @@ config SERIAL_S5PV210
help
Serial port support for Samsung's S5P Family of SoC's
diff --git a/tty/serial-max3107-introduce-a-max3107-driver.patch b/tty/serial-max3107-introduce-a-max3107-driver.patch
index 56b648f6d3850f..405d8ca4abc6d4 100644
--- a/tty/serial-max3107-introduce-a-max3107-driver.patch
+++ b/tty/serial-max3107-introduce-a-max3107-driver.patch
@@ -27,7 +27,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
--- a/drivers/serial/Kconfig
+++ b/drivers/serial/Kconfig
-@@ -550,6 +550,14 @@ config SERIAL_S5PV210
+@@ -542,6 +542,14 @@ config SERIAL_S5PV210
help
Serial port support for Samsung's S5P Family of SoC's
diff --git a/tty/serial-mmio32-support-for-8250_early.c.patch b/tty/serial-mmio32-support-for-8250_early.c.patch
index 541cbe1379c14a..b7adeb909112da 100644
--- a/tty/serial-mmio32-support-for-8250_early.c.patch
+++ b/tty/serial-mmio32-support-for-8250_early.c.patch
@@ -27,7 +27,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
-@@ -686,8 +686,11 @@ and is between 256 and 4096 characters.
+@@ -687,8 +687,11 @@ and is between 256 and 4096 characters.
earlycon= [KNL] Output early console device and options.
uart[8250],io,<addr>[,options]
uart[8250],mmio,<addr>[,options]
diff --git a/tty/tty-add-extproc-support-for-linemode.patch b/tty/tty-add-extproc-support-for-linemode.patch
index 5a63b09fe23c85..3ca0ab0112b060 100644
--- a/tty/tty-add-extproc-support-for-linemode.patch
+++ b/tty/tty-add-extproc-support-for-linemode.patch
@@ -680,7 +680,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
}
--- a/fs/compat_ioctl.c
+++ b/fs/compat_ioctl.c
-@@ -966,6 +966,7 @@ COMPATIBLE_IOCTL(TIOCGPGRP)
+@@ -969,6 +969,7 @@ COMPATIBLE_IOCTL(TIOCGPGRP)
COMPATIBLE_IOCTL(TIOCGPTN)
COMPATIBLE_IOCTL(TIOCSPTLCK)
COMPATIBLE_IOCTL(TIOCSERGETLSR)
diff --git a/tty/u6715-16550a-serial-driver-support.patch b/tty/u6715-16550a-serial-driver-support.patch
index 6208e0d5e5f2f8..ccf40957280b37 100644
--- a/tty/u6715-16550a-serial-driver-support.patch
+++ b/tty/u6715-16550a-serial-driver-support.patch
@@ -57,8 +57,8 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+ },
};
- #if defined (CONFIG_SERIAL_8250_AU1X00)
-@@ -1075,6 +1082,15 @@ static void autoconfig_16550a(struct uar
+ #if defined(CONFIG_MIPS_ALCHEMY)
+@@ -1070,6 +1077,15 @@ static void autoconfig_16550a(struct uar
DEBUG_AUTOCONF("Couldn't force IER_UUE to 0 ");
}
serial_outp(up, UART_IER, iersave);
@@ -74,7 +74,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
}
/*
-@@ -2229,9 +2245,9 @@ static unsigned int serial8250_get_divis
+@@ -2224,9 +2240,9 @@ static unsigned int serial8250_get_divis
return quot;
}
@@ -87,7 +87,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
{
struct uart_8250_port *up = (struct uart_8250_port *)port;
unsigned char cval, fcr = 0;
-@@ -2407,6 +2423,17 @@ serial8250_set_termios(struct uart_port
+@@ -2402,6 +2418,17 @@ serial8250_set_termios(struct uart_port
if (tty_termios_baud_rate(termios))
tty_termios_encode_baud_rate(termios, baud, baud);
}
@@ -105,7 +105,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
static void
serial8250_set_ldisc(struct uart_port *port, int new)
-@@ -2989,6 +3016,7 @@ static int __devinit serial8250_probe(st
+@@ -2982,6 +3009,7 @@ static int __devinit serial8250_probe(st
port.type = p->type;
port.serial_in = p->serial_in;
port.serial_out = p->serial_out;
@@ -113,7 +113,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
port.dev = &dev->dev;
port.irqflags |= irqflag;
ret = serial8250_register_port(&port);
-@@ -3152,6 +3180,9 @@ int serial8250_register_port(struct uart
+@@ -3145,6 +3173,9 @@ int serial8250_register_port(struct uart
uart->port.serial_in = port->serial_in;
if (port->serial_out)
uart->port.serial_out = port->serial_out;
diff --git a/usb/pci-change-device-runtime-pm-settings-for-probe-and-remove-do-not-send.patch b/usb/pci-change-device-runtime-pm-settings-for-probe-and-remove-do-not-send.patch
index 3e61171f4e4b16..33cad51817144d 100644
--- a/usb/pci-change-device-runtime-pm-settings-for-probe-and-remove-do-not-send.patch
+++ b/usb/pci-change-device-runtime-pm-settings-for-probe-and-remove-do-not-send.patch
@@ -34,7 +34,7 @@ Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
-@@ -5721,11 +5721,8 @@ static int __devinit e1000_probe(struct
+@@ -5825,11 +5825,8 @@ static int __devinit e1000_probe(struct
e1000_print_device_info(adapter);
@@ -48,7 +48,7 @@ Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
return 0;
-@@ -5771,8 +5768,6 @@ static void __devexit e1000_remove(struc
+@@ -5875,8 +5872,6 @@ static void __devexit e1000_remove(struc
struct e1000_adapter *adapter = netdev_priv(netdev);
bool down = test_bit(__E1000_DOWN, &adapter->state);
@@ -57,7 +57,7 @@ Acked-by: Rafael J. Wysocki <rjw@sisk.pl>
/*
* flush_scheduled work may reschedule our watchdog task, so
* explicitly disable watchdog tasks from being rescheduled
-@@ -5797,11 +5792,8 @@ static void __devexit e1000_remove(struc
+@@ -5901,11 +5896,8 @@ static void __devexit e1000_remove(struc
clear_bit(__E1000_DOWN, &adapter->state);
unregister_netdev(netdev);
diff --git a/usb/usb-fix-stuck-usb-generic-serial-driver.patch b/usb/usb-fix-stuck-usb-generic-serial-driver.patch
deleted file mode 100644
index 5beecacc94c3bc..00000000000000
--- a/usb/usb-fix-stuck-usb-generic-serial-driver.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From dvomlehn@cisco.com Mon Aug 2 16:13:11 2010
-Date: Mon, 2 Aug 2010 10:46:00 -0700
-From: David VomLehn <dvomlehn@cisco.com>
-To: linux-usb@vger.kernel.org
-Cc: greg@kroah.com
-Subject: USB: Fix stuck USB generic serial driver
-Message-ID: <20100802174600.GA6845@dvomlehn-lnx2.corp.sa.net>
-Content-Disposition: inline
-
-Fix USB console hang due to non-atomic URB allocation
-
-This is intended to fix a problem seen with the Amtel sam-ba tool by
-Alexander Stein (alexander.stein@systec-electronic.com). It appears
-when using an A91 controller. He bisected it to commit:
-
- 8e8dce065088833fc418bfa5fbf035cb0726c04c: USB: use kfifo to buffer usb-generic serial writes
-
-The current patch fixes a problem when using a USB serial device as the
-kernel console and as /dev/console. The URB allocation is not atomic and
-an URB can be doubly allocated, leading to a continual rejection of URB
-submissions. The fix puts all pieces of the URB allocation in the same
-spinlock-protected section of code.
-
-Having said that...
-
-This fix was developed because, after Alexander's email, I took a look
-at my USB console and found that it, too, was experiencing a hang. I
-assumed that this hang was the same as the one Alexander is seeing and
-developed this fix. It's a good fix for *a* hang, but after thinking
-about this a bit, I'm not sure this is a fix for *Alexander's* hang.
-
-Signed-off-by: David VomLehn <dvomlehn@cisco.com>
-Cc: stable <stable@kernel.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-
----
- drivers/usb/serial/generic.c | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
---- a/drivers/usb/serial/generic.c
-+++ b/drivers/usb/serial/generic.c
-@@ -199,6 +199,9 @@ retry:
- }
- i = (int)find_first_bit(&port->write_urbs_free,
- ARRAY_SIZE(port->write_urbs));
-+ if (i == ARRAY_SIZE(port->write_urbs))
-+ return 0;
-+ clear_bit(i, &port->write_urbs_free);
- spin_unlock_irqrestore(&port->lock, flags);
-
- urb = port->write_urbs[i];
-@@ -213,9 +216,9 @@ retry:
- dev_err(&port->dev, "%s - error submitting urb: %d\n",
- __func__, result);
- clear_bit_unlock(USB_SERIAL_WRITE_BUSY, &port->flags);
-+ set_bit(i, &port->write_urbs_free);
- return result;
- }
-- clear_bit(i, &port->write_urbs_free);
-
- spin_lock_irqsave(&port->lock, flags);
- port->tx_bytes += count;
diff --git a/usb/usb-fix-thread-unsafe-anchor-utiliy-routines.patch b/usb/usb-fix-thread-unsafe-anchor-utiliy-routines.patch
new file mode 100644
index 00000000000000..a6e99552b7fa64
--- /dev/null
+++ b/usb/usb-fix-thread-unsafe-anchor-utiliy-routines.patch
@@ -0,0 +1,133 @@
+From chunkeey@googlemail.com Thu Aug 5 11:04:16 2010
+From: Christian Lamparter <chunkeey@googlemail.com>
+To: USB list <linux-usb@vger.kernel.org>
+Subject: [PATCH v3] USB: fix thread-unsafe anchor utiliy routines
+Date: Tue, 3 Aug 2010 02:32:28 +0200
+Cc: Alan Stern <stern@rowland.harvard.edu>,
+ Greg KH <greg@kroah.com>,
+ Oliver Neukum <oneukum@suse.de>
+Message-Id: <201008030232.29005.chunkeey@googlemail.com>
+
+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: stable <stable@kernel.org>
+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);
+
+@@ -749,20 +756,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);
+
+@@ -799,12 +797,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;
+ }
+@@ -826,12 +823,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/usb/usb-gadget-g_ether-updated-inf-file.patch b/usb/usb-gadget-g_ether-updated-inf-file.patch
index fffb821e8efd77..b6138d65afefc6 100644
--- a/usb/usb-gadget-g_ether-updated-inf-file.patch
+++ b/usb/usb-gadget-g_ether-updated-inf-file.patch
@@ -32,7 +32,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-;
-; Microsoft only directly supports RNDIS drivers, and bundled them into XP.
-; The Microsoft "Remote NDIS USB Driver Kit" is currently found at:
--; http://www.microsoft.com/whdc/hwdev/resources/HWservices/rndis.mspx
+-; http://www.microsoft.com/whdc/device/network/ndis/rmndis.mspx
-
+; Based on template INF file found at
+; <http://msdn.microsoft.com/en-us/library/ff570620.aspx>
diff --git a/usb/usb-otg-ulpi-extend-the-generic-ulpi-driver.patch b/usb/usb-otg-ulpi-extend-the-generic-ulpi-driver.patch
index 558d41bf0ed445..6ecdad59244d69 100644
--- a/usb/usb-otg-ulpi-extend-the-generic-ulpi-driver.patch
+++ b/usb/usb-otg-ulpi-extend-the-generic-ulpi-driver.patch
@@ -22,7 +22,6 @@ Signed-off-by: Mike Rapoport <mike@compulab.co.il>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
- arch/arm/mach-mx2/mach-pca100.c | 4
arch/arm/mach-mx3/mach-armadillo5x0.c | 4
arch/arm/mach-mx3/mach-mx31lilly.c | 4
arch/arm/mach-mx3/mach-mx31lite.c | 2
@@ -33,29 +32,11 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/otg/ulpi.c | 127 ++++++++++++++++++++++++++++---
include/linux/usb/otg.h | 7 -
include/linux/usb/ulpi.h | 39 +++++++++
- 11 files changed, 168 insertions(+), 29 deletions(-)
+ 10 files changed, 166 insertions(+), 27 deletions(-)
---- a/arch/arm/mach-mx2/mach-pca100.c
-+++ b/arch/arm/mach-mx2/mach-pca100.c
-@@ -357,13 +357,13 @@ static void __init pca100_init(void)
- #if defined(CONFIG_USB_ULPI)
- if (otg_mode_host) {
- otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
-- USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT);
-+ ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT);
-
- mxc_register_device(&mxc_otg_host, &otg_pdata);
- }
-
- usbh2_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
-- USB_OTG_DRV_VBUS | USB_OTG_DRV_VBUS_EXT);
-+ ULPI_OTG_DRVVBUS | ULPI_OTG_DRVVBUS_EXT);
-
- mxc_register_device(&mxc_usbh2, &usbh2_pdata);
- #endif
--- a/arch/arm/mach-mx3/mach-armadillo5x0.c
+++ b/arch/arm/mach-mx3/mach-armadillo5x0.c
-@@ -552,9 +552,9 @@ static void __init armadillo5x0_init(voi
+@@ -551,9 +551,9 @@ static void __init armadillo5x0_init(voi
/* USB */
#if defined(CONFIG_USB_ULPI)
usbotg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
@@ -69,7 +50,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
mxc_register_device(&mxc_usbh2, &usbh2_pdata);
--- a/arch/arm/mach-mx3/mach-mx31lilly.c
+++ b/arch/arm/mach-mx3/mach-mx31lilly.c
-@@ -249,9 +249,9 @@ static struct mxc_usbh_platform_data usb
+@@ -245,9 +245,9 @@ static struct mxc_usbh_platform_data usb
static void lilly1131_usb_init(void)
{
usbotg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
@@ -83,7 +64,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
mxc_register_device(&mxc_usbh2, &usbh2_pdata);
--- a/arch/arm/mach-mx3/mach-mx31lite.c
+++ b/arch/arm/mach-mx3/mach-mx31lite.c
-@@ -261,7 +261,7 @@ static void __init mxc_board_init(void)
+@@ -256,7 +256,7 @@ static void __init mxc_board_init(void)
#if defined(CONFIG_USB_ULPI)
/* USB */
usbh2_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
@@ -94,7 +75,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
#endif
--- a/arch/arm/mach-mx3/mach-mx31moboard.c
+++ b/arch/arm/mach-mx3/mach-mx31moboard.c
-@@ -405,7 +405,7 @@ static struct mxc_usbh_platform_data usb
+@@ -412,7 +412,7 @@ static struct mxc_usbh_platform_data usb
static int __init moboard_usbh2_init(void)
{
usbh2_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
@@ -105,7 +86,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
}
--- a/arch/arm/mach-mx3/mach-pcm037.c
+++ b/arch/arm/mach-mx3/mach-pcm037.c
-@@ -658,13 +658,13 @@ static void __init mxc_board_init(void)
+@@ -654,13 +654,13 @@ static void __init mxc_board_init(void)
#if defined(CONFIG_USB_ULPI)
if (otg_mode_host) {
otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
@@ -123,7 +104,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
#endif
--- a/arch/arm/mach-mx3/mach-pcm043.c
+++ b/arch/arm/mach-mx3/mach-pcm043.c
-@@ -380,7 +380,7 @@ static void __init mxc_board_init(void)
+@@ -378,7 +378,7 @@ static void __init mxc_board_init(void)
#if defined(CONFIG_USB_ULPI)
if (otg_mode_host) {
otg_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
@@ -134,7 +115,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
}
--- a/arch/arm/mach-mx3/mx31moboard-smartbot.c
+++ b/arch/arm/mach-mx3/mx31moboard-smartbot.c
-@@ -138,7 +138,7 @@ static struct mxc_usbh_platform_data otg
+@@ -134,7 +134,7 @@ static struct mxc_usbh_platform_data otg
static int __init smartbot_otg_host_init(void)
{
otg_host_pdata.otg = otg_ulpi_create(&mxc_ulpi_access_ops,
diff --git a/usb/usb-throw-away-custom-hex-digit-methods.patch b/usb/usb-throw-away-custom-hex-digit-methods.patch
index 8738f9fba0667e..eadc442c0b2ddb 100644
--- a/usb/usb-throw-away-custom-hex-digit-methods.patch
+++ b/usb/usb-throw-away-custom-hex-digit-methods.patch
@@ -30,7 +30,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
#include <asm/unaligned.h>
-@@ -2429,7 +2430,6 @@ UEA_ATTR(firmid, 0);
+@@ -2436,7 +2437,6 @@ UEA_ATTR(firmid, 0);
/* Retrieve the device End System Identifier (MAC) */
@@ -38,7 +38,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
static int uea_getesi(struct uea_softc *sc, u_char * esi)
{
unsigned char mac_str[2 * ETH_ALEN + 1];
-@@ -2440,7 +2440,8 @@ static int uea_getesi(struct uea_softc *
+@@ -2447,7 +2447,8 @@ static int uea_getesi(struct uea_softc *
return 1;
for (i = 0; i < ETH_ALEN; i++)
diff --git a/version b/version
index 8f23ebb3e3892f..5138f8d54f8ffc 100644
--- a/version
+++ b/version
@@ -1 +1 @@
-2.6.35
+2.6.35-git2