All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Auger <eric.auger@linaro.org>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: joel.schopp@amd.com, kim.phillips@freescale.com,
	eric.auger@st.com, a.motakis@virtualopensystems.com,
	a.rigo@virtualopensystems.com, peter.maydell@linaro.org,
	manish.jaggi@caviumnetworks.com, ard.biesheuvel@linaro.org,
	will.deacon@arm.com, qemu-devel@nongnu.org, agraf@suse.de,
	Bharat.Bhushan@freescale.com, stuart.yoder@freescale.com,
	patches@linaro.org, zhaoshenglong@huawei.com,
	pbonzini@redhat.com, kvmarm@lists.cs.columbia.edu,
	christoffer.dall@linaro.org
Subject: Re: [Qemu-devel] [PATCH v8 00/19] KVM platform device passthrough
Date: Mon, 08 Dec 2014 18:35:36 +0100	[thread overview]
Message-ID: <5485E168.1010708@linaro.org> (raw)
In-Reply-To: <1418058266.1095.124.camel@bling.home>

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	other threads:[~2014-12-08 17:37 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-30 18:35 [Qemu-devel] [PATCH v8 00/19] KVM platform device passthrough Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 01/19] vfio: move hw/misc/vfio.c to hw/vfio/pci.c Move vfio.h into include/hw/vfio Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 02/19] hw/vfio/pci: Rename VFIODevice into VFIOPCIDevice Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 03/19] hw/vfio/pci: generalize mask/unmask to any IRQ index Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 04/19] hw/vfio/pci: introduce minimalist VFIODevice with fd Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 05/19] hw/vfio/pci: add type, name and group fields in VFIODevice Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 06/19] hw/vfio/pci: handle reset at VFIODevice Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 07/19] hw/vfio/pci: Introduce VFIORegion Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 08/19] hw/vfio/pci: split vfio_get_device Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 09/19] hw/vfio/pci: rename group_list into vfio_group_list Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 10/19] hw/vfio/pci: use name field in format strings Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 11/19] hw/vfio: create common module Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 12/19] hw/vfio/platform: add vfio-platform support Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 13/19] hw/vfio: calxeda xgmac device Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 14/19] hw/arm/virt: add support for VFIO devices Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 15/19] hw/arm/sysbus-fdt: enable vfio-calxeda-xgmac dynamic instantiation Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 16/19] hw/vfio/platform: Add irqfd support Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 17/19] linux-headers: Update KVM headers from linux-next tag ToBeFilled Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 18/19] hw/vfio/common: vfio_kvm_device_fd moved in the common header Eric Auger
2014-11-30 18:35 ` [Qemu-devel] [PATCH v8 19/19] hw/vfio/platform: add forwarded irq support Eric Auger
2014-12-08 17:04 ` [Qemu-devel] [PATCH v8 00/19] KVM platform device passthrough Alex Williamson
2014-12-08 17:35   ` Eric Auger [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5485E168.1010708@linaro.org \
    --to=eric.auger@linaro.org \
    --cc=Bharat.Bhushan@freescale.com \
    --cc=a.motakis@virtualopensystems.com \
    --cc=a.rigo@virtualopensystems.com \
    --cc=agraf@suse.de \
    --cc=alex.williamson@redhat.com \
    --cc=ard.biesheuvel@linaro.org \
    --cc=christoffer.dall@linaro.org \
    --cc=eric.auger@st.com \
    --cc=joel.schopp@amd.com \
    --cc=kim.phillips@freescale.com \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=manish.jaggi@caviumnetworks.com \
    --cc=patches@linaro.org \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stuart.yoder@freescale.com \
    --cc=will.deacon@arm.com \
    --cc=zhaoshenglong@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.