<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/drivers/usb, branch v2.6.37.2</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>Revert "USB: prevent buggy hubs from crashing the USB stack"</title>
<updated>2011-02-24T18:18:04+00:00</updated>
<author>
<name>Greg Kroah-Hartman</name>
<email>gregkh@suse.de</email>
</author>
<published>2011-02-24T18:17:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=af9a4eb329e0f6cf580218205d2f0c2d76587c62'/>
<id>af9a4eb329e0f6cf580218205d2f0c2d76587c62</id>
<content type='text'>
This reverts commit de3e365127bc56dd0b1f8d684b184d43efcd50b4 as it
breaks the musb host controller.  This patch will come back after the
musb fix goes upstream to Linus's tree.

Cc: Alan Stern &lt;stern@rowland.harvard.edu&gt;
Cc: Perry Neben &lt;neben@vmware.com&gt;
Cc: Felipe Balbi &lt;balbi@ti.com&gt;
Cc: Alexander Holler &lt;holler@ahsoftware.de&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This reverts commit de3e365127bc56dd0b1f8d684b184d43efcd50b4 as it
breaks the musb host controller.  This patch will come back after the
musb fix goes upstream to Linus's tree.

Cc: Alan Stern &lt;stern@rowland.harvard.edu&gt;
Cc: Perry Neben &lt;neben@vmware.com&gt;
Cc: Felipe Balbi &lt;balbi@ti.com&gt;
Cc: Alexander Holler &lt;holler@ahsoftware.de&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>xhci: Use GFP_NOIO during device reset.</title>
<updated>2011-02-17T23:15:22+00:00</updated>
<author>
<name>Sarah Sharp</name>
<email>sarah.a.sharp@linux.intel.com</email>
</author>
<published>2010-12-28T21:08:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=61e1444816df473bb5648541ab6e5d8897972053'/>
<id>61e1444816df473bb5648541ab6e5d8897972053</id>
<content type='text'>
commit a6d940dd759bf240d28624198660ed34582a327b upstream.

When xhci_discover_or_reset_device() is called after a host controller
power loss, the virtual device may need to be reallocated.  Make sure
xhci_alloc_dev() uses GFP_NOIO.  This avoid causing a deadlock by allowing
the kernel to flush pending I/O while reallocating memory for a virtual
device for a USB mass storage device that's holding the backing store for
dirty memory buffers.

This patch should be queued for the 2.6.37 stable tree.

Signed-off-by: Sarah Sharp &lt;sarah.a.sharp@linux.intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit a6d940dd759bf240d28624198660ed34582a327b upstream.

When xhci_discover_or_reset_device() is called after a host controller
power loss, the virtual device may need to be reallocated.  Make sure
xhci_alloc_dev() uses GFP_NOIO.  This avoid causing a deadlock by allowing
the kernel to flush pending I/O while reallocating memory for a virtual
device for a USB mass storage device that's holding the backing store for
dirty memory buffers.

This patch should be queued for the 2.6.37 stable tree.

Signed-off-by: Sarah Sharp &lt;sarah.a.sharp@linux.intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>usb: Realloc xHCI structures after a hub is verified.</title>
<updated>2011-02-17T23:15:22+00:00</updated>
<author>
<name>Sarah Sharp</name>
<email>sarah.a.sharp@linux.intel.com</email>
</author>
<published>2010-12-23T19:12:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=1baa45caa1c0a5aa2075b0be7f8dea1ba35d59ea'/>
<id>1baa45caa1c0a5aa2075b0be7f8dea1ba35d59ea</id>
<content type='text'>
commit 653a39d1f61bdc9f277766736d21d2e9be0391cb upstream.

When there's an xHCI host power loss after a suspend from memory, the USB
core attempts to reset and verify the USB devices that are attached to the
system.  The xHCI driver has to reallocate those devices, since the
hardware lost all knowledge of them during the power loss.

When a hub is plugged in, and the host loses power, the xHCI hardware
structures are not updated to say the device is a hub.  This is usually
done in hub_configure() when the USB hub is detected.  That function is
skipped during a reset and verify by the USB core, since the core restores
the old configuration and alternate settings, and the hub driver has no
idea this happened.  This bug makes the xHCI host controller reject the
enumeration of low speed devices under the resumed hub.

Therefore, make the USB core re-setup the internal xHCI hub device
information by calling update_hub_device() when hub_activate() is called
for a hub reset resume.  After a host power loss, all devices under the
roothub get a reset-resume or a disconnect.

This patch should be queued for the 2.6.37 stable tree.

Signed-off-by: Sarah Sharp &lt;sarah.a.sharp@linux.intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 653a39d1f61bdc9f277766736d21d2e9be0391cb upstream.

When there's an xHCI host power loss after a suspend from memory, the USB
core attempts to reset and verify the USB devices that are attached to the
system.  The xHCI driver has to reallocate those devices, since the
hardware lost all knowledge of them during the power loss.

When a hub is plugged in, and the host loses power, the xHCI hardware
structures are not updated to say the device is a hub.  This is usually
done in hub_configure() when the USB hub is detected.  That function is
skipped during a reset and verify by the USB core, since the core restores
the old configuration and alternate settings, and the hub driver has no
idea this happened.  This bug makes the xHCI host controller reject the
enumeration of low speed devices under the resumed hub.

Therefore, make the USB core re-setup the internal xHCI hub device
information by calling update_hub_device() when hub_activate() is called
for a hub reset resume.  After a host power loss, all devices under the
roothub get a reset-resume or a disconnect.

This patch should be queued for the 2.6.37 stable tree.

Signed-off-by: Sarah Sharp &lt;sarah.a.sharp@linux.intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>xhci: Do not run xhci_cleanup_msix with irq disabled</title>
<updated>2011-02-17T23:15:22+00:00</updated>
<author>
<name>Zhang Rui</name>
<email>rui.zhang@intel.com</email>
</author>
<published>2010-12-17T21:17:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=25b1bef99bf388dec1127f43865600be40b4df05'/>
<id>25b1bef99bf388dec1127f43865600be40b4df05</id>
<content type='text'>
commit 40a9fb17f32dbe54de3d636142a59288544deed7 upstream.

when unloading xhci_hcd, I got:
[  134.856813] xhci_hcd 0000:02:00.0: remove, state 4
[  134.858140] usb usb3: USB disconnect, address 1
[  134.874956] xhci_hcd 0000:02:00.0: Host controller not halted, aborting reset.
[  134.876351] BUG: sleeping function called from invalid context at kernel/mutex.c:85
[  134.877657] in_atomic(): 0, irqs_disabled(): 1, pid: 1451, name: modprobe
[  134.878975] Pid: 1451, comm: modprobe Not tainted 2.6.37-rc5+ #162
[  134.880298] Call Trace:
[  134.881602]  [&lt;ffffffff8104156a&gt;] __might_sleep+0xeb/0xf0
[  134.882921]  [&lt;ffffffff814763dc&gt;] mutex_lock+0x24/0x50
[  134.884229]  [&lt;ffffffff810a745c&gt;] free_desc+0x2e/0x5f
[  134.885538]  [&lt;ffffffff810a74c8&gt;] irq_free_descs+0x3b/0x71
[  134.886853]  [&lt;ffffffff8102584d&gt;] free_irq_at+0x31/0x36
[  134.888167]  [&lt;ffffffff8102723f&gt;] destroy_irq+0x69/0x71
[  134.889486]  [&lt;ffffffff8102747a&gt;] native_teardown_msi_irq+0xe/0x10
[  134.890820]  [&lt;ffffffff8124c382&gt;] default_teardown_msi_irqs+0x57/0x80
[  134.892158]  [&lt;ffffffff8124be46&gt;] free_msi_irqs+0x8b/0xe9
[  134.893504]  [&lt;ffffffff8124cd46&gt;] pci_disable_msix+0x35/0x39
[  134.894844]  [&lt;ffffffffa01b444a&gt;] xhci_cleanup_msix+0x31/0x51 [xhci_hcd]
[  134.896186]  [&lt;ffffffffa01b4b3a&gt;] xhci_stop+0x3a/0x80 [xhci_hcd]
[  134.897521]  [&lt;ffffffff81341dd4&gt;] usb_remove_hcd+0xfd/0x14a
[  134.898859]  [&lt;ffffffff813500ae&gt;] usb_hcd_pci_remove+0x5c/0xc6
[  134.900193]  [&lt;ffffffff8123c606&gt;] pci_device_remove+0x3f/0x91
[  134.901535]  [&lt;ffffffff812e7ea4&gt;] __device_release_driver+0x83/0xd9
[  134.902899]  [&lt;ffffffff812e8571&gt;] driver_detach+0x86/0xad
[  134.904222]  [&lt;ffffffff812e7d56&gt;] bus_remove_driver+0xb2/0xd8
[  134.905540]  [&lt;ffffffff812e8633&gt;] driver_unregister+0x6c/0x74
[  134.906839]  [&lt;ffffffff8123c8e4&gt;] pci_unregister_driver+0x44/0x89
[  134.908121]  [&lt;ffffffffa01b940e&gt;] xhci_unregister_pci+0x15/0x17 [xhci_hcd]
[  134.909396]  [&lt;ffffffffa01bd7d2&gt;] xhci_hcd_cleanup+0xe/0x10 [xhci_hcd]
[  134.910652]  [&lt;ffffffff8107fcd1&gt;] sys_delete_module+0x1ca/0x23b
[  134.911882]  [&lt;ffffffff81123932&gt;] ? path_put+0x22/0x26
[  134.913104]  [&lt;ffffffff8109a800&gt;] ? audit_syscall_entry+0x2c/0x148
[  134.914333]  [&lt;ffffffff8100ac82&gt;] system_call_fastpath+0x16/0x1b
[  134.915658] xhci_hcd 0000:02:00.0: USB bus 3 deregistered
[  134.916465] xhci_hcd 0000:02:00.0: PCI INT A disabled

and the same issue when xhci_suspend is invoked.  (Note from Sarah: That's
fixed by Andiry's patch before this, by synchronizing the irqs rather than
freeing them on suspend.)

Do not run xhci_cleanup_msix with irq disabled.

This patch should be queued for the 2.6.37 stable tree.

Signed-off-by: Zhang Rui &lt;rui.zhang@intel.com&gt;
Signed-off-by: Sarah Sharp &lt;sarah.a.sharp@linux.intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 40a9fb17f32dbe54de3d636142a59288544deed7 upstream.

when unloading xhci_hcd, I got:
[  134.856813] xhci_hcd 0000:02:00.0: remove, state 4
[  134.858140] usb usb3: USB disconnect, address 1
[  134.874956] xhci_hcd 0000:02:00.0: Host controller not halted, aborting reset.
[  134.876351] BUG: sleeping function called from invalid context at kernel/mutex.c:85
[  134.877657] in_atomic(): 0, irqs_disabled(): 1, pid: 1451, name: modprobe
[  134.878975] Pid: 1451, comm: modprobe Not tainted 2.6.37-rc5+ #162
[  134.880298] Call Trace:
[  134.881602]  [&lt;ffffffff8104156a&gt;] __might_sleep+0xeb/0xf0
[  134.882921]  [&lt;ffffffff814763dc&gt;] mutex_lock+0x24/0x50
[  134.884229]  [&lt;ffffffff810a745c&gt;] free_desc+0x2e/0x5f
[  134.885538]  [&lt;ffffffff810a74c8&gt;] irq_free_descs+0x3b/0x71
[  134.886853]  [&lt;ffffffff8102584d&gt;] free_irq_at+0x31/0x36
[  134.888167]  [&lt;ffffffff8102723f&gt;] destroy_irq+0x69/0x71
[  134.889486]  [&lt;ffffffff8102747a&gt;] native_teardown_msi_irq+0xe/0x10
[  134.890820]  [&lt;ffffffff8124c382&gt;] default_teardown_msi_irqs+0x57/0x80
[  134.892158]  [&lt;ffffffff8124be46&gt;] free_msi_irqs+0x8b/0xe9
[  134.893504]  [&lt;ffffffff8124cd46&gt;] pci_disable_msix+0x35/0x39
[  134.894844]  [&lt;ffffffffa01b444a&gt;] xhci_cleanup_msix+0x31/0x51 [xhci_hcd]
[  134.896186]  [&lt;ffffffffa01b4b3a&gt;] xhci_stop+0x3a/0x80 [xhci_hcd]
[  134.897521]  [&lt;ffffffff81341dd4&gt;] usb_remove_hcd+0xfd/0x14a
[  134.898859]  [&lt;ffffffff813500ae&gt;] usb_hcd_pci_remove+0x5c/0xc6
[  134.900193]  [&lt;ffffffff8123c606&gt;] pci_device_remove+0x3f/0x91
[  134.901535]  [&lt;ffffffff812e7ea4&gt;] __device_release_driver+0x83/0xd9
[  134.902899]  [&lt;ffffffff812e8571&gt;] driver_detach+0x86/0xad
[  134.904222]  [&lt;ffffffff812e7d56&gt;] bus_remove_driver+0xb2/0xd8
[  134.905540]  [&lt;ffffffff812e8633&gt;] driver_unregister+0x6c/0x74
[  134.906839]  [&lt;ffffffff8123c8e4&gt;] pci_unregister_driver+0x44/0x89
[  134.908121]  [&lt;ffffffffa01b940e&gt;] xhci_unregister_pci+0x15/0x17 [xhci_hcd]
[  134.909396]  [&lt;ffffffffa01bd7d2&gt;] xhci_hcd_cleanup+0xe/0x10 [xhci_hcd]
[  134.910652]  [&lt;ffffffff8107fcd1&gt;] sys_delete_module+0x1ca/0x23b
[  134.911882]  [&lt;ffffffff81123932&gt;] ? path_put+0x22/0x26
[  134.913104]  [&lt;ffffffff8109a800&gt;] ? audit_syscall_entry+0x2c/0x148
[  134.914333]  [&lt;ffffffff8100ac82&gt;] system_call_fastpath+0x16/0x1b
[  134.915658] xhci_hcd 0000:02:00.0: USB bus 3 deregistered
[  134.916465] xhci_hcd 0000:02:00.0: PCI INT A disabled

and the same issue when xhci_suspend is invoked.  (Note from Sarah: That's
fixed by Andiry's patch before this, by synchronizing the irqs rather than
freeing them on suspend.)

Do not run xhci_cleanup_msix with irq disabled.

This patch should be queued for the 2.6.37 stable tree.

Signed-off-by: Zhang Rui &lt;rui.zhang@intel.com&gt;
Signed-off-by: Sarah Sharp &lt;sarah.a.sharp@linux.intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>xHCI: synchronize irq in xhci_suspend()</title>
<updated>2011-02-17T23:15:22+00:00</updated>
<author>
<name>Andiry Xu</name>
<email>andiry.xu@amd.com</email>
</author>
<published>2010-12-27T09:39:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=09302e3286eb76d3d85d117e28bb0c3950163278'/>
<id>09302e3286eb76d3d85d117e28bb0c3950163278</id>
<content type='text'>
commit 0029227f1bc30b6c809ae751f9e7af6cef900997 upstream.

Synchronize the interrupts instead of free them in xhci_suspend(). This will
prevent a double free when the host is suspended and then the card removed.

Set the flag hcd-&gt;msix_enabled when using MSI-X, and check the flag in
suspend_common(). MSI-X synchronization will be handled by xhci_suspend(),
and MSI/INTx will be synchronized in suspend_common().

This patch should be queued for the 2.6.37 stable tree.

Reported-by: Matthew Garrett &lt;mjg@redhat.com&gt;
Signed-off-by: Andiry Xu &lt;andiry.xu@amd.com&gt;
Signed-off-by: Sarah Sharp &lt;sarah.a.sharp@linux.intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 0029227f1bc30b6c809ae751f9e7af6cef900997 upstream.

Synchronize the interrupts instead of free them in xhci_suspend(). This will
prevent a double free when the host is suspended and then the card removed.

Set the flag hcd-&gt;msix_enabled when using MSI-X, and check the flag in
suspend_common(). MSI-X synchronization will be handled by xhci_suspend(),
and MSI/INTx will be synchronized in suspend_common().

This patch should be queued for the 2.6.37 stable tree.

Reported-by: Matthew Garrett &lt;mjg@redhat.com&gt;
Signed-off-by: Andiry Xu &lt;andiry.xu@amd.com&gt;
Signed-off-by: Sarah Sharp &lt;sarah.a.sharp@linux.intel.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>xhci: Resume bus on any port status change.</title>
<updated>2011-02-17T23:15:21+00:00</updated>
<author>
<name>Sarah Sharp</name>
<email>sarah.a.sharp@linux.intel.com</email>
</author>
<published>2010-12-14T21:24:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=97347262562763e32da386600b3b9e69f7dd724c'/>
<id>97347262562763e32da386600b3b9e69f7dd724c</id>
<content type='text'>
commit 7111ebc97ed53a32314011c85a6f235f0dab8ae8 upstream.

The original code that resumed the USB bus on a port status change would
only do so when there was a device connected to the port.  If a device was
just disconnected, the event would be queued for khubd, but khubd wouldn't
run.  That would leave the connect status change (CSC) bit set.

If a USB device was plugged into that same port, the xHCI host controller
would set the current connect status (CCS) bit.  But since the CSC bit was
already set, it would not generate an interrupt for a port status change
event.  That would mean the user could "Safely Remove" a device, have the
bus suspend, disconnect the device, re-plug it in, and then the device
would never be enumerated.

Plugging in a different device on another port would cause the bus to
resume, and khubd would notice the re-connected device.  Running lsusb
would also resume the bus, leading users to report the problem "went away"
when using diagnostic tools.

The solution is to resume the bus when a port status change event is
received, regardless of the port status.

Thank you very much to Maddog for helping me track down this Heisenbug.

This patch should be queued for the 2.6.37 stable tree.

Signed-off-by: Sarah Sharp &lt;sarah.a.sharp@linux.intel.com&gt;
Reported-by: Jon 'maddog' Hall &lt;maddog@li.org&gt;
Tested-by: Andiry Xu &lt;andiry.xu@amd.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 7111ebc97ed53a32314011c85a6f235f0dab8ae8 upstream.

The original code that resumed the USB bus on a port status change would
only do so when there was a device connected to the port.  If a device was
just disconnected, the event would be queued for khubd, but khubd wouldn't
run.  That would leave the connect status change (CSC) bit set.

If a USB device was plugged into that same port, the xHCI host controller
would set the current connect status (CCS) bit.  But since the CSC bit was
already set, it would not generate an interrupt for a port status change
event.  That would mean the user could "Safely Remove" a device, have the
bus suspend, disconnect the device, re-plug it in, and then the device
would never be enumerated.

Plugging in a different device on another port would cause the bus to
resume, and khubd would notice the re-connected device.  Running lsusb
would also resume the bus, leading users to report the problem "went away"
when using diagnostic tools.

The solution is to resume the bus when a port status change event is
received, regardless of the port status.

Thank you very much to Maddog for helping me track down this Heisenbug.

This patch should be queued for the 2.6.37 stable tree.

Signed-off-by: Sarah Sharp &lt;sarah.a.sharp@linux.intel.com&gt;
Reported-by: Jon 'maddog' Hall &lt;maddog@li.org&gt;
Tested-by: Andiry Xu &lt;andiry.xu@amd.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>drivers: update to pl2303 usb-serial to support Motorola cables</title>
<updated>2011-02-17T23:14:32+00:00</updated>
<author>
<name>Dario Lombardo</name>
<email>dario.lombardo@libero.it</email>
</author>
<published>2011-01-21T14:35:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=4572634fff0e8ae1ae54077ae4afb9230189aaf2'/>
<id>4572634fff0e8ae1ae54077ae4afb9230189aaf2</id>
<content type='text'>
commit 96a3e79edff6f41b0f115a82f1a39d66218077a7 upstream.

Added 0x0307 device id to support Motorola cables to the pl2303 usb
serial driver. This cable has a modified chip that is a pl2303, but
declares itself as 0307. Fixed by adding the right device id to the
supported devices list, assigning it the code labeled
PL2303_PRODUCT_ID_MOTOROLA.

Signed-off-by: Dario Lombardo &lt;dario.lombardo@libero.it&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 96a3e79edff6f41b0f115a82f1a39d66218077a7 upstream.

Added 0x0307 device id to support Motorola cables to the pl2303 usb
serial driver. This cable has a modified chip that is a pl2303, but
declares itself as 0307. Fixed by adding the right device id to the
supported devices list, assigning it the code labeled
PL2303_PRODUCT_ID_MOTOROLA.

Signed-off-by: Dario Lombardo &lt;dario.lombardo@libero.it&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>USB: fix race between root-hub resume and wakeup requests</title>
<updated>2011-02-17T23:13:45+00:00</updated>
<author>
<name>Alan Stern</name>
<email>stern@rowland.harvard.edu</email>
</author>
<published>2011-02-02T18:59:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=9376557ec8907429e57c2607836d2078192a17ea'/>
<id>9376557ec8907429e57c2607836d2078192a17ea</id>
<content type='text'>
commit bf3d7d40e42a85ca73a34e1385ff34f092a384eb upstream.

The USB core keeps track of pending resume requests for root hubs, in
order to resolve races between wakeup requests and suspends.  However
the code that does this is subject to another race (between wakeup
requests and resumes) because the WAKEUP_PENDING flag is cleared
before the resume occurs, leaving a window in which another wakeup
request might arrive.

This patch (as1447) fixes the problem by clearing the WAKEUP_PENDING
flag after the resume instead of before it.

This fixes Bugzilla #24952.

Signed-off-by: Alan Stern &lt;stern@rowland.harvard.edu&gt;
Tested-by: Paul Bender &lt;pebender@san.rr.com&gt;
Tested-by: warpme &lt;warpme@o2.pl&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit bf3d7d40e42a85ca73a34e1385ff34f092a384eb upstream.

The USB core keeps track of pending resume requests for root hubs, in
order to resolve races between wakeup requests and suspends.  However
the code that does this is subject to another race (between wakeup
requests and resumes) because the WAKEUP_PENDING flag is cleared
before the resume occurs, leaving a window in which another wakeup
request might arrive.

This patch (as1447) fixes the problem by clearing the WAKEUP_PENDING
flag after the resume instead of before it.

This fixes Bugzilla #24952.

Signed-off-by: Alan Stern &lt;stern@rowland.harvard.edu&gt;
Tested-by: Paul Bender &lt;pebender@san.rr.com&gt;
Tested-by: warpme &lt;warpme@o2.pl&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>USB: prevent buggy hubs from crashing the USB stack</title>
<updated>2011-02-17T23:13:45+00:00</updated>
<author>
<name>Alan Stern</name>
<email>stern@rowland.harvard.edu</email>
</author>
<published>2011-01-31T15:56:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=de3e365127bc56dd0b1f8d684b184d43efcd50b4'/>
<id>de3e365127bc56dd0b1f8d684b184d43efcd50b4</id>
<content type='text'>
commit d199c96d41d80a567493e12b8e96ea056a1350c1 upstream.

If anyone comes across a high-speed hub that (by mistake or by design)
claims to have no Transaction Translators, plugging a full- or
low-speed device into it will cause the USB stack to crash.  This
patch (as1446) prevents the problem by ignoring such devices, since
the kernel has no way to communicate with them.

Signed-off-by: Alan Stern &lt;stern@rowland.harvard.edu&gt;
Tested-by: Perry Neben &lt;neben@vmware.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit d199c96d41d80a567493e12b8e96ea056a1350c1 upstream.

If anyone comes across a high-speed hub that (by mistake or by design)
claims to have no Transaction Translators, plugging a full- or
low-speed device into it will cause the USB stack to crash.  This
patch (as1446) prevents the problem by ignoring such devices, since
the kernel has no way to communicate with them.

Signed-off-by: Alan Stern &lt;stern@rowland.harvard.edu&gt;
Tested-by: Perry Neben &lt;neben@vmware.com&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>USB: EHCI: fix scheduling while atomic during suspend</title>
<updated>2011-02-17T23:13:44+00:00</updated>
<author>
<name>Yin Kangkai</name>
<email>kangkai.yin@intel.com</email>
</author>
<published>2011-01-28T04:04:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=f67b9afe61d12e770b44944dfbb96cd74d8da024'/>
<id>f67b9afe61d12e770b44944dfbb96cd74d8da024</id>
<content type='text'>
commit 148fc55fd0449683a1d15bf219ad8d8b6fa17545 upstream.

There is a msleep with spin lock held during ehci pci suspend, which will
cause kernel BUG: scheduling while atomic. Fix that.

[  184.139620] BUG: scheduling while atomic: kworker/u:11/416/0x00000002
[  184.139632] 4 locks held by kworker/u:11/416:
[  184.139640]  #0:  (events_unbound){+.+.+.}, at: [&lt;c104ddd4&gt;] process_one_work+0x1b3/0x4cb
[  184.139669]  #1:  ((&amp;entry-&gt;work)){+.+.+.}, at: [&lt;c104ddd4&gt;] process_one_work+0x1b3/0x4cb
[  184.139686]  #2:  (&amp;__lockdep_no_validate__){+.+.+.}, at: [&lt;c127cde3&gt;] __device_suspend+0x2c/0x154
[  184.139706]  #3:  (&amp;(&amp;ehci-&gt;lock)-&gt;rlock){-.-...}, at: [&lt;c132f3d8&gt;] ehci_pci_suspend+0x35/0x7b
[  184.139725] Modules linked in: serio_raw pegasus joydev mrst_gfx(C) battery
[  184.139748] irq event stamp: 52
[  184.139753] hardirqs last  enabled at (51): [&lt;c14fdaac&gt;] mutex_lock_nested+0x258/0x293
[  184.139766] hardirqs last disabled at (52): [&lt;c14fe7b4&gt;] _raw_spin_lock_irqsave+0xf/0x3e
[  184.139777] softirqs last  enabled at (0): [&lt;c10371c1&gt;] copy_process+0x3d2/0x109d
[  184.139789] softirqs last disabled at (0): [&lt;  (null)&gt;]   (null)
[  184.139802] Pid: 416, comm: kworker/u:11 Tainted: G         C  2.6.37-6.3-adaptation-oaktrail #37
[  184.139809] Call Trace:
[  184.139820]  [&lt;c102eeff&gt;] __schedule_bug+0x5e/0x65
[  184.139829]  [&lt;c14fbca5&gt;] schedule+0xac/0xc4c
[  184.139840]  [&lt;c11d4845&gt;] ? string+0x37/0x8b
[  184.139853]  [&lt;c1044f21&gt;] ? lock_timer_base+0x1f/0x3e
[  184.139863]  [&lt;c14fe7da&gt;] ? _raw_spin_lock_irqsave+0x35/0x3e
[  184.139876]  [&lt;c1061590&gt;] ? trace_hardirqs_off+0xb/0xd
[  184.139885]  [&lt;c14fccdc&gt;] schedule_timeout+0x283/0x2d9
[  184.139896]  [&lt;c104516f&gt;] ? process_timeout+0x0/0xa
[  184.139906]  [&lt;c14fcd47&gt;] schedule_timeout_uninterruptible+0x15/0x17
[  184.139916]  [&lt;c104566a&gt;] msleep+0x10/0x16
[  184.139926]  [&lt;c132f316&gt;] ehci_adjust_port_wakeup_flags+0x69/0xf6
[  184.139937]  [&lt;c132f3eb&gt;] ehci_pci_suspend+0x48/0x7b
[  184.139946]  [&lt;c1326587&gt;] suspend_common+0x52/0xbb
[  184.139956]  [&lt;c1326625&gt;] hcd_pci_suspend+0x26/0x28
[  184.139967]  [&lt;c11e7182&gt;] pci_pm_suspend+0x5f/0xd0
[  184.139976]  [&lt;c127ca3a&gt;] pm_op+0x5d/0xf0
[  184.139986]  [&lt;c127ceac&gt;] __device_suspend+0xf5/0x154
[  184.139996]  [&lt;c127d2c8&gt;] async_suspend+0x16/0x3a
[  184.140006]  [&lt;c1058f54&gt;] async_run_entry_fn+0x89/0x111
[  184.140016]  [&lt;c104deb6&gt;] process_one_work+0x295/0x4cb
[  184.140026]  [&lt;c1058ecb&gt;] ? async_run_entry_fn+0x0/0x111
[  184.140036]  [&lt;c104e3d0&gt;] worker_thread+0x17f/0x298
[  184.140045]  [&lt;c104e251&gt;] ? worker_thread+0x0/0x298
[  184.140055]  [&lt;c105277f&gt;] kthread+0x64/0x69
[  184.140064]  [&lt;c105271b&gt;] ? kthread+0x0/0x69
[  184.140075]  [&lt;c1002efa&gt;] kernel_thread_helper+0x6/0x1a

Signed-off-by: Yin Kangkai &lt;kangkai.yin@intel.com&gt;
Acked-by: Alan Stern &lt;stern@rowland.harvard.edu&gt;
CC: David Brownell &lt;dbrownell@users.sourceforge.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 148fc55fd0449683a1d15bf219ad8d8b6fa17545 upstream.

There is a msleep with spin lock held during ehci pci suspend, which will
cause kernel BUG: scheduling while atomic. Fix that.

[  184.139620] BUG: scheduling while atomic: kworker/u:11/416/0x00000002
[  184.139632] 4 locks held by kworker/u:11/416:
[  184.139640]  #0:  (events_unbound){+.+.+.}, at: [&lt;c104ddd4&gt;] process_one_work+0x1b3/0x4cb
[  184.139669]  #1:  ((&amp;entry-&gt;work)){+.+.+.}, at: [&lt;c104ddd4&gt;] process_one_work+0x1b3/0x4cb
[  184.139686]  #2:  (&amp;__lockdep_no_validate__){+.+.+.}, at: [&lt;c127cde3&gt;] __device_suspend+0x2c/0x154
[  184.139706]  #3:  (&amp;(&amp;ehci-&gt;lock)-&gt;rlock){-.-...}, at: [&lt;c132f3d8&gt;] ehci_pci_suspend+0x35/0x7b
[  184.139725] Modules linked in: serio_raw pegasus joydev mrst_gfx(C) battery
[  184.139748] irq event stamp: 52
[  184.139753] hardirqs last  enabled at (51): [&lt;c14fdaac&gt;] mutex_lock_nested+0x258/0x293
[  184.139766] hardirqs last disabled at (52): [&lt;c14fe7b4&gt;] _raw_spin_lock_irqsave+0xf/0x3e
[  184.139777] softirqs last  enabled at (0): [&lt;c10371c1&gt;] copy_process+0x3d2/0x109d
[  184.139789] softirqs last disabled at (0): [&lt;  (null)&gt;]   (null)
[  184.139802] Pid: 416, comm: kworker/u:11 Tainted: G         C  2.6.37-6.3-adaptation-oaktrail #37
[  184.139809] Call Trace:
[  184.139820]  [&lt;c102eeff&gt;] __schedule_bug+0x5e/0x65
[  184.139829]  [&lt;c14fbca5&gt;] schedule+0xac/0xc4c
[  184.139840]  [&lt;c11d4845&gt;] ? string+0x37/0x8b
[  184.139853]  [&lt;c1044f21&gt;] ? lock_timer_base+0x1f/0x3e
[  184.139863]  [&lt;c14fe7da&gt;] ? _raw_spin_lock_irqsave+0x35/0x3e
[  184.139876]  [&lt;c1061590&gt;] ? trace_hardirqs_off+0xb/0xd
[  184.139885]  [&lt;c14fccdc&gt;] schedule_timeout+0x283/0x2d9
[  184.139896]  [&lt;c104516f&gt;] ? process_timeout+0x0/0xa
[  184.139906]  [&lt;c14fcd47&gt;] schedule_timeout_uninterruptible+0x15/0x17
[  184.139916]  [&lt;c104566a&gt;] msleep+0x10/0x16
[  184.139926]  [&lt;c132f316&gt;] ehci_adjust_port_wakeup_flags+0x69/0xf6
[  184.139937]  [&lt;c132f3eb&gt;] ehci_pci_suspend+0x48/0x7b
[  184.139946]  [&lt;c1326587&gt;] suspend_common+0x52/0xbb
[  184.139956]  [&lt;c1326625&gt;] hcd_pci_suspend+0x26/0x28
[  184.139967]  [&lt;c11e7182&gt;] pci_pm_suspend+0x5f/0xd0
[  184.139976]  [&lt;c127ca3a&gt;] pm_op+0x5d/0xf0
[  184.139986]  [&lt;c127ceac&gt;] __device_suspend+0xf5/0x154
[  184.139996]  [&lt;c127d2c8&gt;] async_suspend+0x16/0x3a
[  184.140006]  [&lt;c1058f54&gt;] async_run_entry_fn+0x89/0x111
[  184.140016]  [&lt;c104deb6&gt;] process_one_work+0x295/0x4cb
[  184.140026]  [&lt;c1058ecb&gt;] ? async_run_entry_fn+0x0/0x111
[  184.140036]  [&lt;c104e3d0&gt;] worker_thread+0x17f/0x298
[  184.140045]  [&lt;c104e251&gt;] ? worker_thread+0x0/0x298
[  184.140055]  [&lt;c105277f&gt;] kthread+0x64/0x69
[  184.140064]  [&lt;c105271b&gt;] ? kthread+0x0/0x69
[  184.140075]  [&lt;c1002efa&gt;] kernel_thread_helper+0x6/0x1a

Signed-off-by: Yin Kangkai &lt;kangkai.yin@intel.com&gt;
Acked-by: Alan Stern &lt;stern@rowland.harvard.edu&gt;
CC: David Brownell &lt;dbrownell@users.sourceforge.net&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@suse.de&gt;

</pre>
</div>
</content>
</entry>
</feed>
