aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/drivers/usb/host/ohci-hcd.c
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2017-03-20 09:11:49 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-03-23 08:13:21 +0100
commit21a60f6e65181cad64fd66ccc8080d413721ba27 (patch)
treed28050eba5889bbfff01052dd4a88223de7db4c4 /drivers/usb/host/ohci-hcd.c
parentusb: host: ohci-platform: set hcd->phy to avoid phy_get() in usb_add_hcd() (diff)
downloadwireguard-linux-21a60f6e65181cad64fd66ccc8080d413721ba27.tar.xz
wireguard-linux-21a60f6e65181cad64fd66ccc8080d413721ba27.zip
ohci-pci: add qemu quirk
On a loaded virtualization host (dozen guests booting at the same time) it may happen that the ohci controller emulation doesn't manage to do timely frame processing, with the result that the io watchdog fires and considers the controller being dead, even though it's only the emulation being unusual slow due to the load peak. So, add a quirk for qemu and don't use the watchdog in case we figure we are running on emulated ohci. The virtual ohci controller masquerades as apple ohci controller, but we can identify it by subsystem id. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Cc: stable <stable@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/host/ohci-hcd.c')
-rw-r--r--drivers/usb/host/ohci-hcd.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
index da66ad57e370..44924824fa41 100644
--- a/drivers/usb/host/ohci-hcd.c
+++ b/drivers/usb/host/ohci-hcd.c
@@ -231,7 +231,8 @@ static int ohci_urb_enqueue (
/* Start up the I/O watchdog timer, if it's not running */
if (!timer_pending(&ohci->io_watchdog) &&
- list_empty(&ohci->eds_in_use)) {
+ list_empty(&ohci->eds_in_use) &&
+ !(ohci->flags & OHCI_QUIRK_QEMU)) {
ohci->prev_frame_no = ohci_frame_no(ohci);
mod_timer(&ohci->io_watchdog,
jiffies + IO_WATCHDOG_DELAY);