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