qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v8 00/19] KVM platform device passthrough


From: Eric Auger
Subject: Re: [Qemu-devel] [PATCH v8 00/19] KVM platform device passthrough
Date: Mon, 08 Dec 2014 18:35:36 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0

On 12/08/2014 06:04 PM, Alex Williamson wrote:
> On Sun, 2014-11-30 at 18:35 +0000, Eric Auger wrote:
>> This RFC series aims at enabling KVM platform device passthrough.
>> It implements a VFIO platform device, derived from VFIO PCI device.
>>
>> The VFIO platform device uses the host VFIO platform driver which must
>> be bound to the assigned device prior to the QEMU system start.
>>
>> - the guest can directly access the device register space
>> - assigned device IRQs are transparently routed to the guest by
>>   QEMU/KVM (3 methods currently are supported: user-level eventfd
>>   handling, irqfd, forwarded IRQs)
>> - iommu is transparently programmed to prevent the device from
>>   accessing physical pages outside of the guest address space
>>
>> This patch series is made of the following patch file groups:
>>
>> 1-11) PCI modifications to prepare for platform device introduction
> 
> Hi Eric,
> 
> Sorry for the delay, I've only been able to make a serious review of
> 1-11 and it looks good.  I think we should start trying to pull these in
> after QEMU2.2.

That's a great news!

  Looking beyond patch 11/19, I'm surprised that the very
> first next patch isn't a linux header sync so that the platform
> populate_device routine can test the device info to make sure it's
> operating on a vfio platform device.

Yes you're fully right. Currently I do not test it and it's a mistake. I
will add this linux header sync.

Thanks

Eric

  Thanks,
> 
> Alex
> 
>> 12-15) VFIO & calxeda midway platform device without irqfd support
>> 16) VFIO platform device with irqfd support
>> 17-19) VFIO platform device with IRQ forwarding support
>>
>> Each group is independent and should be separately upstreamable.
>>
>> Dependency List:
>>
>> QEMU dependencies:
>> [1] [PATCH v5] machvirt dynamic sysbus device instantiation
>>     Eric Auger
>> [2] [PATCH v3 0/2] actual checks of KVM_CAP_IRQFD and KVM_CAP_IRQFD_RESAMPLE,
>>     Eric Auger
>>     http://lists.nongnu.org/archive/html/qemu-devel/2014-09/msg00589.html
>> [3] [PATCH v2] vfio: migration to trace points
>>     Eric Auger
>>     https://patchwork.ozlabs.org/patch/394785/
>>
>> Kernel Dependencies:
>> [1] [PATCH v10 00/20] VFIO support for platform and AMBA devices on ARM
>>     Antonios Motakis
>>     http://comments.gmane.org/gmane.linux.kernel.iommu/7096
>> [2] [PATCH v3 0/6] vfio: type1: support for ARM SMMUS with VFIO_IOMMU_TYPE1
>>     Antonios Motakis
>>     http://www.spinics.net/lists/kvm-arm/msg11738.html
>> [3] [PATCH v4] ARM: KVM: add irqfd support
>>     Eric Auger
>>     https://lkml.org/lkml/2014/9/1/141
>> [4] [RFC PATCH 0/9] ARM: Forwarding physical interrupts to a guest VM,
>>     Marc Zyngier
>>     http://lwn.net/Articles/603514/
>> [5] [PATCH v3 0/9] KVM-VFIO IRQ forward control
>>     Eric Auger
>>     https://lkml.org/lkml/2014/9/1/344
>>
>> - kernel pieces can be found at:
>>   http://git.linaro.org/people/eric.auger/linux.git (branch 3.18-rc6-v10)
>> - QEMU pieces can be found at:
>>   http://git.linaro.org/people/eric.auger/qemu.git (branch vfio_integ_v8)
>>
>> The patch series was tested on Calxeda Midway (ARMv7) where one xgmac
>> is assigned to KVM host while the second one is assigned to the guest.
>> Reworked PCI device is not tested.
>>
>> Wiki for Calxeda Midway setup:
>> https://wiki.linaro.org/LEG/Engineering/Virtualization/Platform_Device_Passthrough_on_Midway
>>
>> History:
>> v7->v8:
>> - rebase on v2.2.0-rc3 and integrate
>>   "Add skip_dump flag to ignore memory region during dump"
>> - KVM header evolution with subindex addition in kvm_arch_forwarded_irq
>> - split [PATCH v7 03/16] hw/vfio/pci: introduce VFIODevice into 4 patches
>> - vfio_compute_needs_reset does not return bool anymore
>> - add some comments about exposed MMIO region and IRQ in calxeda xgmac
>>   device
>> - vfio_[un]mask_irqindex renamed into vfio_[un]mask_single_irqindex
>> - rework IRQ startup: former machine init done notifier is replaced by a
>>   reset notifier. machine file passes the interrupt controller
>>   DeviceState handle (not the platform bus first irq parameter).
>> - sysbus-fdt:
>>   - move the add_fdt_node_functions array declaration between the device
>>     specific code and the generic code to avoid forward declarations of
>>     decice specific functions
>>   - rename add_basic_vfio_fdt_node into add_calxeda_midway_xgmac_fdt_node
>>     emphasizing the fact it is xgmac specific
>>
>> v6->v7:
>> - fake injection test modality removed
>> - VFIO_DEVICE_TYPE_PLATFORM only introduced with VFIO platform
>> - new helper functions to start VFIO IRQ on machine init done notifier
>>   (introduced in hw/vfio/platform: add vfio-platform support and notifier
>>   registration invoked in hw/arm/virt: add support for VFIO devices).
>>   vfio_start_irq_injection is replaced by vfio_register_irq_starter.
>>
>> v5->v6:
>> - rebase on 2.1rc5 PCI code
>> - forwarded IRQ first integraton
>> - vfio_device property renamed into host property
>> - split IRQ setup in different functions that match the 3 supported
>>   injection techniques (user handled eventfd, irqfd, forwarded IRQ):
>>   removes dynamic switch between injection methods
>> - introduce fake interrupts as a test modality:
>>   x makes possible to test multiple IRQ user-side handling.
>>   x this is a test feature only: enable to trigger a fd as if the
>>     real physical IRQ hit. No virtual IRQ is injected into the guest
>>     but handling is simulated so that the state machine can be tested
>> - user handled eventfd:
>>   x add mutex to protect IRQ state & list manipulation,
>>   x correct misleading comment in vfio_intp_interrupt.
>>   x Fix bugs using fake interrupt modality
>> - irqfd no more advertised in this patchset (handled in [3])
>> - VFIOPlatformDeviceClass becomes abstract and Calxeda xgmac device
>>   and class is re-introduced (as per v4)
>> - all DPRINTF removed in platform and replaced by trace-points
>> - corrects compilation with configure --disable-kvm
>> - simplifies the split for vfio_get_device and introduce a unique
>>   specialized function named vfio_populate_device
>> - group_list renamed into vfio_group_list
>> - hw/arm/dyn_sysbus_devtree.c currently only support vfio-calxeda-xgmac
>>   instantiation. Needs to be specialized for other VFIO devices
>> - fix 2 bugs in dyn_sysbus_devtree(reg_attr index and compat)
>>
>> v4->v5:
>> - rebase on v2.1.0 PCI code
>> - take into account Alex Williamson comments on PCI code rework
>>   - trace updates in vfio_region_write/read
>>   - remove fd from VFIORegion
>>   - get/put ckeanup
>> - bug fix: bar region's vbasedev field duly initialization
>> - misc cleanups in platform device
>> - device tree node generation removed from device and handled in
>>   hw/arm/dyn_sysbus_devtree.c
>> - remove "hw/vfio: add an example calxeda_xgmac": with removal of
>>   device tree node generation we do not have so many things to
>>   implement in that derived device yet. May be re-introduced later
>>   on if needed typically for reset/migration.
>> - no GSI routing table anymore
>>
>> v3->v4 changes (Eric Auger, Alvise Rigo)
>> - rebase on last VFIO PCI code (v2.1.0-rc0)
>> - full git history rework to ease PCI code change review
>> - mv include files in hw/vfio
>> - DPRINTF reformatting temporarily moved out
>> - support of VFIO virq (removal of resamplefd handler on user-side)
>> - integration with sysbus dynamic instantiation framwork
>> - removal of unrealize and cleanup routines until it is better
>>   understood what is really needed
>> - Support of VFIO for Amba devices should be handled in an inherited
>>   device to specialize the device tree generation (clock handle currently
>>   missing in framework however)
>> - "Always use eventfd as notifying mechanism" temporarily moved out
>> - static instantiation is not mainstream (although it remains possible)
>>   note if static instantiation is used, irqfd must be setup in machine file
>>   when virtual IRQ is known
>> - create the GSI routing table on qemu side
>>
>> v2->v3 changes (Alvise Rigo, Eric Auger):
>> - Following Alex W recommandations, further efforts to factorize the
>>   code between PCI:introduction of VFIODevice and VFIORegion
>>   as base classes
>> - unique reset handler for platform and PCI
>> - cleanup following Kim's comments
>> - multiple IRQ support mechanics should be in place although not
>>   tested
>> - Better handling of MMIO multiple regions
>> - New features and fixes by Alvise (multiple compat string, exec
>>   flag, force eventfd usage, amba device tree support)
>> - irqfd support
>>
>> v1->v2 changes (Kim Phillips, Eric Auger):
>> - IRQ initial support (legacy mode where eventfds are handled on
>>   user side)
>> - hacked dynamic instantiation
>>
>> v1 (Kim Phillips):
>> - initial split between PCI and platform
>> - MMIO support only
>> - static instantiation
>>
>> Best Regards
>>
>> Eric
>>
>>
>>
>>
>> Eric Auger (18):
>>   hw/vfio/pci: Rename VFIODevice into VFIOPCIDevice
>>   hw/vfio/pci: generalize mask/unmask to any IRQ index
>>   hw/vfio/pci: introduce minimalist VFIODevice with fd
>>   hw/vfio/pci: add type, name and group fields in VFIODevice
>>   hw/vfio/pci: handle reset at VFIODevice
>>   hw/vfio/pci: Introduce VFIORegion
>>   hw/vfio/pci: split vfio_get_device
>>   hw/vfio/pci: rename group_list into vfio_group_list
>>   hw/vfio/pci: use name field in format strings
>>   hw/vfio: create common module
>>   hw/vfio/platform: add vfio-platform support
>>   hw/vfio: calxeda xgmac device
>>   hw/arm/virt: add support for VFIO devices
>>   hw/arm/sysbus-fdt: enable vfio-calxeda-xgmac dynamic instantiation
>>   hw/vfio/platform: Add irqfd support
>>   linux-headers: Update KVM headers from linux-next tag ToBeFilled
>>   hw/vfio/common: vfio_kvm_device_fd moved in the common header
>>   hw/vfio/platform: add forwarded irq support
>>
>> Kim Phillips (1):
>>   vfio: move hw/misc/vfio.c to hw/vfio/pci.c     Move vfio.h into
>>     include/hw/vfio
>>
>>  LICENSE                              |    2 +-
>>  MAINTAINERS                          |    2 +-
>>  hw/Makefile.objs                     |    1 +
>>  hw/arm/sysbus-fdt.c                  |   88 ++
>>  hw/arm/virt.c                        |   15 +-
>>  hw/misc/Makefile.objs                |    1 -
>>  hw/ppc/spapr_pci_vfio.c              |    2 +-
>>  hw/vfio/Makefile.objs                |    6 +
>>  hw/vfio/calxeda_xgmac.c              |   54 ++
>>  hw/vfio/common.c                     |  960 +++++++++++++++++++
>>  hw/{misc/vfio.c => vfio/pci.c}       | 1671 
>> +++++++---------------------------
>>  hw/vfio/platform.c                   |  777 ++++++++++++++++
>>  include/hw/vfio/vfio-calxeda-xgmac.h |   46 +
>>  include/hw/vfio/vfio-common.h        |  157 ++++
>>  include/hw/vfio/vfio-platform.h      |   88 ++
>>  include/hw/{misc => vfio}/vfio.h     |    0
>>  linux-headers/linux/kvm.h            |   10 +
>>  trace-events                         |  137 +--
>>  18 files changed, 2599 insertions(+), 1418 deletions(-)
>>  create mode 100644 hw/vfio/Makefile.objs
>>  create mode 100644 hw/vfio/calxeda_xgmac.c
>>  create mode 100644 hw/vfio/common.c
>>  rename hw/{misc/vfio.c => vfio/pci.c} (65%)
>>  create mode 100644 hw/vfio/platform.c
>>  create mode 100644 include/hw/vfio/vfio-calxeda-xgmac.h
>>  create mode 100644 include/hw/vfio/vfio-common.h
>>  create mode 100644 include/hw/vfio/vfio-platform.h
>>  rename include/hw/{misc => vfio}/vfio.h (100%)
>>
> 
> 
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]