[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v7 for-next 00/12] vpci: PCI config space emulation
Hello, The following series contain an implementation of handlers for the PCI configuration space inside of Xen. This allows Xen to detect accesses to the PCI configuration space and react accordingly. Why is this needed? IMHO, there are two main points of doing all this emulation inside of Xen, the first one is to prevent adding a bunch of duplicated Xen PV specific code to each OS we want to support in PVH mode. This just promotes Xen code duplication amongst OSes, which leads to a higher maintainership burden. The second reason would be that this code (or it's functionality to be more precise) already exists in QEMU (and pciback to a degree), and it's code that we already support and maintain. By moving it into the hypervisor itself every guest type can make use of it, and should be shared between them all. I know that the code in this series is not yet suitable for DomU HVM guests in it's current state, but it should be in due time. As usual, each patch contains a changeset summary between versions, I'm not going to copy the list of changes here. Patch 1 is a pre-patch to allow internal PIO handlers return RETRY. Patch 2 modifies a function to decode a PCI IO port access into pci_sbdf_t and register (which is shared with the ioreq code). Patch 3 implements the generic handlers for accesses to the PCI configuration space together with a minimal user-space test harness that I've used during development. Currently a per-device linked list is used in order to store the list of handlers, and they are sorted based on their offset inside of the configuration space. Patch 2 also adds the x86 port IO traps and wires them into the newly introduced vPCI dispatchers. Patch 4 and 5 adds handlers for the MMCFG areas (as found on the MMCFG ACPI table). Patches 6, 7 and 8 are mostly code moment/refactoring in order to implement support for BAR mapping in patch 9. Finally patches 10 and 12 add support for trapping accesses to the MSI and MSI-X capabilities respectively, so that interrupts are properly setup on behalf of Dom0. The branch containing the patches can be found at: git://xenbits.xen.org/people/royger/xen.git vpci_v7 Note that this is only safe to use for the hardware domain (that's trusted), any non-trusted domain will need a lot more of traps before it can freely access the PCI configuration space. Thanks, Roger. Roger Pau Monne (12): x86/pio: allow internal PIO handlers to return RETRY pci: introduce a type to store a SBDF vpci: introduce basic handlers to trap accesses to the PCI config space x86/mmcfg: add handlers for the PVH Dom0 MMCFG areas x86/physdev: enable PHYSDEVOP_pci_mmcfg_reserved for PVH Dom0 pci: split code to size BARs from pci_add_device pci: add support to size ROM BARs to pci_size_mem_bar xen: introduce rangeset_consume_ranges vpci/bars: add handlers to map the BARs vpci/msi: add MSI handlers vpci: add a priority parameter to the vPCI register initializer vpci/msix: add MSI-X handlers .gitignore | 3 + tools/libxl/libxl_x86.c | 2 +- tools/tests/Makefile | 1 + tools/tests/vpci/Makefile | 37 +++ tools/tests/vpci/emul.h | 134 ++++++++++ tools/tests/vpci/main.c | 309 ++++++++++++++++++++++ xen/arch/arm/xen.lds.S | 14 + xen/arch/x86/domain.c | 18 +- xen/arch/x86/hvm/dom0_build.c | 23 +- xen/arch/x86/hvm/hvm.c | 7 + xen/arch/x86/hvm/hypercall.c | 4 + xen/arch/x86/hvm/io.c | 299 ++++++++++++++++++++- xen/arch/x86/hvm/ioreq.c | 16 +- xen/arch/x86/hvm/vmsi.c | 219 ++++++++++++++++ xen/arch/x86/msi.c | 3 + xen/arch/x86/physdev.c | 11 + xen/arch/x86/setup.c | 3 +- xen/arch/x86/x86_64/mmconfig.h | 4 - xen/arch/x86/xen.lds.S | 14 + xen/common/rangeset.c | 28 ++ xen/drivers/Makefile | 2 +- xen/drivers/passthrough/pci.c | 108 +++++--- xen/drivers/vpci/Makefile | 1 + xen/drivers/vpci/header.c | 533 ++++++++++++++++++++++++++++++++++++++ xen/drivers/vpci/msi.c | 363 ++++++++++++++++++++++++++ xen/drivers/vpci/msix.c | 479 ++++++++++++++++++++++++++++++++++ xen/drivers/vpci/vpci.c | 466 +++++++++++++++++++++++++++++++++ xen/include/asm-x86/domain.h | 1 + xen/include/asm-x86/hvm/domain.h | 7 + xen/include/asm-x86/hvm/io.h | 24 +- xen/include/asm-x86/msi.h | 3 + xen/include/asm-x86/pci.h | 6 + xen/include/public/arch-x86/xen.h | 5 +- xen/include/xen/irq.h | 1 + xen/include/xen/pci.h | 28 ++ xen/include/xen/pci_regs.h | 8 + xen/include/xen/rangeset.h | 10 + xen/include/xen/sched.h | 6 + xen/include/xen/vpci.h | 208 +++++++++++++++ 39 files changed, 3340 insertions(+), 68 deletions(-) create mode 100644 tools/tests/vpci/Makefile create mode 100644 tools/tests/vpci/emul.h create mode 100644 tools/tests/vpci/main.c create mode 100644 xen/drivers/vpci/Makefile create mode 100644 xen/drivers/vpci/header.c create mode 100644 xen/drivers/vpci/msi.c create mode 100644 xen/drivers/vpci/msix.c create mode 100644 xen/drivers/vpci/vpci.c create mode 100644 xen/include/xen/vpci.h -- 2.13.5 (Apple Git-94) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |