Blame SOURCES/0025-usb-xhci-Fix-PCI-capability-order.patch

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