linux/drivers/xen/xen-pciback
Konrad Rzeszutek Wilk c341ca45ce xen/pciback: Restore the PCI config space after an FLR.
When we do an FLR, or D0->D3_hot we may lose the BARs as the
device has turned itself off (and on). This means the device cannot
function unless the pci_restore_state is called - which it is
when the PCI device is unbound from the Xen PCI backend driver.
For PV guests it ends up calling pci_enable_device / pci_enable_msi[x]
which does the proper steps

That however is not happening if a HVM guest is run as QEMU
deals with PCI configuration space. QEMU also requires that the
device be "parked"  under the ownership of a pci-stub driver to
guarantee that the PCI device is not being used. Hence we
follow the same incantation as pci_reset_function does - by
doing an FLR, then restoring the PCI configuration space.

The result of this patch is that when you run lspci, you get
now this:

-       Region 0: [virtual] Memory at fe8c0000 (32-bit, non-prefetchable) [size=128K]
-       Region 1: [virtual] Memory at fe800000 (32-bit, non-prefetchable) [size=512K]
+       Region 0: Memory at fe8c0000 (32-bit, non-prefetchable) [size=128K]
+       Region 1: Memory at fe800000 (32-bit, non-prefetchable) [size=512K]
        Region 2: I/O ports at c000 [size=32]
-       Region 3: [virtual] Memory at fe8e0000 (32-bit, non-prefetchable) [size=16K]
+       Region 3: Memory at fe8e0000 (32-bit, non-prefetchable) [size=16K]

The [virtual] means that lspci read those entries from SysFS but when
it read them from the device it got a different value (0xfffffff).

CC: stable@vger.kernel.org #only for 3.5, 3.6
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
2012-09-25 17:26:28 -04:00
..
conf_space_capability.c xen/pciback: Drop two backends, squash and cleanup some code. 2011-07-19 20:58:35 -04:00
conf_space_header.c xen/pciback: miscellaneous adjustments 2011-09-21 18:17:59 -04:00
conf_space_quirks.c xen/pciback: miscellaneous adjustments 2011-09-21 18:17:59 -04:00
conf_space_quirks.h xen/pciback: Drop two backends, squash and cleanup some code. 2011-07-19 20:58:35 -04:00
conf_space.c PCI: create common pcibios_err_to_errno 2012-06-12 09:21:42 -06:00
conf_space.h xen/pciback: Drop two backends, squash and cleanup some code. 2011-07-19 20:58:35 -04:00
Makefile xen/pciback: Have 'passthrough' option instead of XEN_PCIDEV_BACKEND_PASS and XEN_PCIDEV_BACKEND_VPCI 2011-07-19 21:04:20 -04:00
passthrough.c xen/pciback: miscellaneous adjustments 2011-09-21 18:17:59 -04:00
pci_stub.c xen/pciback: Restore the PCI config space after an FLR. 2012-09-25 17:26:28 -04:00
pciback_ops.c xen/pciback: fix XEN_PCI_OP_enable_msix result 2012-04-06 12:13:55 -04:00
pciback.h xen/pciback: Support pci_reset_function, aka FLR or D3 support. 2012-01-12 12:00:19 -05:00
vpci.c xen/pciback: double lock typo 2011-09-29 10:50:26 -04:00
xenbus.c xen/pci[front|back]: Use %d instead of %1x for displaying PCI devfn. 2012-02-03 16:06:57 -05:00