[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH V11 0/8] Xen PCI Passthrough



Hi all,

This patch series introduces the PCI passthrough for Xen.


Please review patches number 1, 2, 3, 4 and 7.



First, we have XenHostPCIDevice that help to access one PCI device of the host.

Then, the PCI passthrough device himself. Cut in 3 parts (or file), there is
one to take care of the initialisation of a passthrough device. The second one
handle everything about the config address space, there are specifics functions
for every config register. The third one is to handle MSI.

There is a patch series on xen-devel (applied to xen-unstable) that add the
support of setting a PCI passthrough device through QMP from libxl (xen tool
stack). It is just a call to device_add, with the driver parametter
hostaddr="0000:07:00.1".


Change v10-v11:
  host-pci-device:
    - update api: remove IORESOURCE_* defines from header file.
    - address comment of Konrad.
  xen-pt:
    - fix memory mapping (Xen side) for a PCI BAR with a size under the size of
      a page.

Change v9-v10:
  host-pci-device:
    - rename to xen-host-pci-device.
    - suppress usage of scanf and use strtol instead.
    - add irq field
    - no more goto loop
  xen_pt:
    - take machine_irq value from XenHostPCIDevice instead of reading it from
      the pci config space
    - rename xen_pci_device to xen_pt
    - use xen_pt as prefix
      # this should fix namespace issue

Change v8-v9:
  - rename PCI_DEVICE_ID_INTEL_82599_VF to PCI_DEVICE_ID_INTEL_82599_SFP_VF to
    be consistant with Linux.
  - remove the patch about checking bar overlaps, the function is now in
    xen_pci_passthrough.c and uses pci_for_each_device.
  - Introduce an opaque argument to the function pci_for_each_device.
  - Fix the usage of memory listener: declare a stub function for every
    callback in the MemoryListener.

Change v7-v8:
  - rework of the memory mapping of BARs. We now use a memory_listener to update
    a xen memory_mapping when a memory_region is updated.
  - address few comment from Michael in the pci_check_overlap function.
  - fix the handling of the ROM slot.

Change v6-v7:
  - few fix and rebased on master
  - remove of the power management capability, keep the minimum like if it is
    always desactivated.
  - new patch: port of patch from the qemu-xen fork.

Change v5-v6:
  - msitraslate code have been removed.
  - code for the power management capability is removed, but will be re-added
    for the next version of the patch series as a separate patch.

  - new patch to remove a check in pci_parse_devaddr.
  - use pci_default_config_write, so no more hack to handle the BAR mapping in
    QEMU.
  - improve the code in general (a bit more comprehensible).
  - update to QOM.

Change v4-v5:
  - return -errno if there is an error in host_pci_get_*
  - rename internal function get_value to get_hex_value (and return the same
    error value has get_resource)

Change v3-v4:
  - host_pci_get_* can now return an error, and take an extra parameter, a
    pointer to store the wanted value.
  - The memory_region for the PCI BAR are handled "manualy" because calling
    pci_default_write_config was not possible, because the XenPT handle the
    PCIIORegion it self. This make possible to do a device_remove.
  - Introduction of PT_ERR and PT_WARN macro to print debug and error messages.
    Also, these macro as well as PT_LOG will always print the short BDF of the
    device in the guest point of view.
  - PT_ERR is print by default (for all error messages).
  - Some debug/error message have been improve and should be a bit more useful.
  - hw_error have been removed from the code, and have been replaced by either
    a call to qemu_system_shudown_request() (that lead to a domain destroy) or
    a failed in the initialisation of the device.
  - Now, every patchs should compile with no error.

Change v2-v3;
  - in host-pci-device.c:
    - Return more usefull error code in get_ressource().
    - Use macro in host_pci_find_ext_cap_offset instead of raw number. But I
      still not sure if PCI_MAX_EXT_CAP is right, it's result is 480 like it
      was before, so it's maybe ok.
  - All use of MSI stuff in two first pci passthrough patch have been removed
    and move to the last patch.

Change v1-v2:
  - fix style issue (checkpatch.pl)
  - set the original authors, add some missing copyright headers
  - HostPCIDevice:
    - introduce HostPCIIORegions (with base_addr, size, flags)
    - save all flags from ./resource and store it in a separate field.
    - fix endianess on write
    - new host_pci_dev_put function
    - use pci.c like interface host_pci_get/set_byte/word/long (instead of
      host_pci_read/write_)
  - compile HostPCIDevice only on linux (as well as xen_pci_passthrough)
  - introduce apic-msidef.h file.
  - no more run_one_timer, if a pci device is in the middle of a power
    transition, just "return an error" in config read/write
  - use a global var mapped_machine_irq (local to xen_pci_passthrough.c)
  - add msitranslate and power-mgmt ad qdev property




Allen Kay (2):
  Introduce Xen PCI Passthrough, qdevice (1/3)
  Introduce Xen PCI Passthrough, PCI config space helpers (2/3)

Anthony PERARD (5):
  pci_ids: Add INTEL_82599_SFP_VF id.
  configure: Introduce --enable-xen-pci-passthrough.
  Introduce XenHostPCIDevice to access a pci device on the host.
  pci.c: Add opaque argument to pci_for_each_device.
  Introduce apic-msidef.h

Jiang Yunhong (1):
  Introduce Xen PCI Passthrough, MSI (3/3)

 Makefile.target          |    6 +
 configure                |   25 +
 hw/apic-msidef.h         |   30 +
 hw/apic.c                |   11 +-
 hw/pci.c                 |   11 +-
 hw/pci.h                 |    4 +-
 hw/pci_ids.h             |    1 +
 hw/xen-host-pci-device.c |  393 ++++++++++
 hw/xen-host-pci-device.h |   55 ++
 hw/xen_common.h          |    3 +
 hw/xen_platform.c        |    8 +-
 hw/xen_pt.c              |  854 +++++++++++++++++++++
 hw/xen_pt.h              |  301 ++++++++
 hw/xen_pt_config_init.c  | 1869 ++++++++++++++++++++++++++++++++++++++++++++++
 hw/xen_pt_msi.c          |  620 +++++++++++++++
 xen-all.c                |   12 +
 16 files changed, 4184 insertions(+), 19 deletions(-)
 create mode 100644 hw/apic-msidef.h
 create mode 100644 hw/xen-host-pci-device.c
 create mode 100644 hw/xen-host-pci-device.h
 create mode 100644 hw/xen_pt.c
 create mode 100644 hw/xen_pt.h
 create mode 100644 hw/xen_pt_config_init.c
 create mode 100644 hw/xen_pt_msi.c

-- 
Anthony PERARD


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.