|
|
357786 |
From 273826f0427e0e62be20ea42349dfb591dbcdf14 Mon Sep 17 00:00:00 2001
|
|
|
9bac43 |
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
|
|
|
9bac43 |
Date: Fri, 5 May 2017 19:06:14 +0200
|
|
|
9bac43 |
Subject: usb-xhci: Fix PCI capability order
|
|
|
9bac43 |
|
|
|
9bac43 |
RH-Author: Dr. David Alan Gilbert <dgilbert@redhat.com>
|
|
|
9bac43 |
Message-id: <20170505190614.15987-2-dgilbert@redhat.com>
|
|
|
9bac43 |
Patchwork-id: 75038
|
|
|
9bac43 |
O-Subject: [RHEL-7.4 qemu-kvm-rhev PATCH 1/1] usb-xhci: Fix PCI capability order
|
|
|
9bac43 |
Bugzilla: 1447874
|
|
|
9bac43 |
RH-Acked-by: Laszlo Ersek <lersek@redhat.com>
|
|
|
9bac43 |
RH-Acked-by: Michael S. Tsirkin <mst@redhat.com>
|
|
|
9bac43 |
RH-Acked-by: Gerd Hoffmann <kraxel@redhat.com>
|
|
|
9bac43 |
RH-Acked-by: Juan Quintela <quintela@redhat.com>
|
|
|
9bac43 |
|
|
|
9bac43 |
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
|
|
|
9bac43 |
|
|
|
9bac43 |
Upstream commit 1108b2f8a9 in 2.7.0 changed the order
|
|
|
9bac43 |
of the PCI capability chain in the XHCI pci device in the case
|
|
|
9bac43 |
where the device has the PCIe endpoint capability (i.e. only
|
|
|
9bac43 |
older machine types, pc-i440fx-2.0 upstream, pc-i440fx-rhel7.0.0
|
|
|
9bac43 |
apparently for us).
|
|
|
9bac43 |
|
|
|
9bac43 |
Changing the order breaks migration compatibility; fixing this
|
|
|
9bac43 |
upstream would mean breaking the same case going from 2.7.0->current
|
|
|
9bac43 |
that currently works 2.7.0->2.9.0 - so upstream it's a choice
|
|
|
9bac43 |
of two breakages.
|
|
|
9bac43 |
|
|
|
9bac43 |
Since we never released 2.7.0/2.8.0 we can fix this downstream.
|
|
|
9bac43 |
|
|
|
9bac43 |
This reverts the order so that we create the capabilities in the
|
|
|
9bac43 |
order:
|
|
|
9bac43 |
PCIe
|
|
|
9bac43 |
MSI
|
|
|
9bac43 |
MSI-X
|
|
|
9bac43 |
|
|
|
9bac43 |
The symptom is:
|
|
|
9bac43 |
qemu-kvm: get_pci_config_device: Bad config data: i=0x71 read: a0 device: 0 cmask: ff wmask: 0 w1cmask:0
|
|
|
9bac43 |
qemu-kvm: Failed to load PCIDevice:config
|
|
|
9bac43 |
qemu-kvm: Failed to load xhci:parent_obj
|
|
|
9bac43 |
qemu-kvm: error while loading state for instance 0x0 of device '0000:00:0d.0/xhci'
|
|
|
9bac43 |
qemu-kvm: load of migration failed: Invalid argument
|
|
|
9bac43 |
|
|
|
9bac43 |
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
|
|
|
9bac43 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
9bac43 |
|
|
|
9bac43 |
--
|
|
|
9bac43 |
Rebase notes (2.9.0):
|
|
|
9bac43 |
- Change in assert condition (upstream)
|
|
|
9bac43 |
|
|
|
9bac43 |
(cherry picked from commit aad727a5ecde1ad4935eb8427604d4df5a1f1f35)
|
|
|
357786 |
(cherry picked from commit 2dd7402227e77d748a7375233ac9e7feab244bda)
|
|
|
357786 |
|
|
|
357786 |
Conflicts:
|
|
|
357786 |
hw/usb/hcd-xhci.c
|
|
|
357786 |
|
|
|
357786 |
(cherry picked from commit a42f86dc906cc7d2c16d02bf125ed76847b469cb)
|
|
|
357786 |
(cherry picked from commit 992ab2e4f6e15d3e51bc716763aa8d6f45c6d29d)
|
|
|
357786 |
(cherry picked from commit 5b7b0303b6dd70c32bd03a9d8facd7eb7cf72be8)
|
|
|
9bac43 |
---
|
|
|
9bac43 |
hw/usb/hcd-xhci.c | 12 ++++++------
|
|
|
9bac43 |
1 file changed, 6 insertions(+), 6 deletions(-)
|
|
|
9bac43 |
|
|
|
9bac43 |
diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
|
|
|
357786 |
index 883141f..181e803 100644
|
|
|
9bac43 |
--- a/hw/usb/hcd-xhci.c
|
|
|
9bac43 |
+++ b/hw/usb/hcd-xhci.c
|
|
|
9bac43 |
@@ -3368,6 +3368,12 @@ static void usb_xhci_realize(struct PCIDevice *dev, Error **errp)
|
|
|
9bac43 |
xhci->max_pstreams_mask = 0;
|
|
|
9bac43 |
}
|
|
|
9bac43 |
|
|
|
357786 |
+ if (pci_bus_is_express(pci_get_bus(dev)) ||
|
|
|
9bac43 |
+ xhci_get_flag(xhci, XHCI_FLAG_FORCE_PCIE_ENDCAP)) {
|
|
|
9bac43 |
+ ret = pcie_endpoint_cap_init(dev, 0xa0);
|
|
|
9bac43 |
+ assert(ret > 0);
|
|
|
9bac43 |
+ }
|
|
|
9bac43 |
+
|
|
|
9bac43 |
if (xhci->msi != ON_OFF_AUTO_OFF) {
|
|
|
9bac43 |
ret = msi_init(dev, 0x70, xhci->numintrs, true, false, &err;;
|
|
|
9bac43 |
/* Any error other than -ENOTSUP(board's MSI support is broken)
|
|
|
9bac43 |
@@ -3416,12 +3422,6 @@ static void usb_xhci_realize(struct PCIDevice *dev, Error **errp)
|
|
|
9bac43 |
PCI_BASE_ADDRESS_SPACE_MEMORY|PCI_BASE_ADDRESS_MEM_TYPE_64,
|
|
|
9bac43 |
&xhci->mem);
|
|
|
9bac43 |
|
|
|
357786 |
- if (pci_bus_is_express(pci_get_bus(dev)) ||
|
|
|
9bac43 |
- xhci_get_flag(xhci, XHCI_FLAG_FORCE_PCIE_ENDCAP)) {
|
|
|
9bac43 |
- ret = pcie_endpoint_cap_init(dev, 0xa0);
|
|
|
9bac43 |
- assert(ret > 0);
|
|
|
9bac43 |
- }
|
|
|
9bac43 |
-
|
|
|
9bac43 |
if (xhci->msix != ON_OFF_AUTO_OFF) {
|
|
|
9bac43 |
/* TODO check for errors, and should fail when msix=on */
|
|
|
9bac43 |
msix_init(dev, xhci->numintrs,
|
|
|
9bac43 |
--
|
|
|
9bac43 |
1.8.3.1
|
|
|
9bac43 |
|