Patch "ohci-pci: add qemu quirk" has been added to the 4.11-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
ohci-pci: add qemu quirk
to the 4.11-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
ohci-pci-add-qemu-quirk.patch
and it can be found in the queue-4.11 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
21a60f6e65181cad64fd66ccc8080d413721ba27Mon Sep 17 00:00:00 2001
From: Gerd Hoffmann <[email protected]>
Date: Mon, 20 Mar 2017 09:11:49 +0100
Subject: ohci-pci: add qemu quirk
From: Gerd Hoffmann <[email protected]>
commit 21a60f6e65181cad64fd66ccc8080d413721ba27 upstream.
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.
--- drivers/usb/host/ohci-hcd.c | 3 ++- drivers/usb/host/ohci-pci.c | 16 ++++++++++++++++ drivers/usb/host/ohci.h | 1 + 3 files changed, 19 insertions(+), 1 deletion(-)
drivers/usb/host/ohci-hcd.c +2 -1
@@ -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 );
drivers/usb/host/ohci-pci.c +16 -0
@@ -164,6 +164,15 @@ static int ohci_quirk_amd700(struct usb_return 0 ; } +static int ohci_quirk_qemu (struct usb_hcd *hcd) +{ +struct ohci_hcd *ohci =hcd_to_ohci (hcd); + + ohci->flags |=OHCI_QUIRK_QEMU ; +ohci_dbg (ohci,"enabled qemu quirk\n" ); +return 0 ; +} +/* List of quirks for OHCI */ static const struct pci_device_id ohci_pci_quirks[] = { {
@@ -214,6 +223,13 @@ static const struct pci_device_id ohci_p PCI_DEVICE(PCI_VENDOR_ID_ATI, 0x4399), .driver_data = (unsigned long)ohci_quirk_amd700, }, + { + .vendor = PCI_VENDOR_ID_APPLE, + .device = 0x003f, + .subvendor = PCI_SUBVENDOR_ID_REDHAT_QUMRANET, + .subdevice = PCI_SUBDEVICE_ID_QEMU, + .driver_data = (unsigned long)ohci_quirk_qemu, + },/* FIXME for some of the early AMD 760 southbridges, OHCI * won't work at all. blacklist them.
drivers/usb/host/ohci.h +1 -0
@@ -418,6 +418,7 @@ struct ohci_hcd {#define OHCI_QUIRK_AMD_PLL 0x200/* AMD PLL quirk*/ #define OHCI_QUIRK_AMD_PREFETCH 0x400/* pre-fetch for ISO transfer */ #define OHCI_QUIRK_GLOBAL_SUSPEND 0x800/* must suspend ports */ +#define OHCI_QUIRK_QEMU 0x1000/* relax timing expectations */ // there are also chip quirks/bugs in init logic
Patches currently in stable-queue which might be from [email protected] are
queue-4.11/ohci-pci-add-qemu-quirk.patch