From: Alex Williamson <alex.williamson@redhat.com>
To: Eric Auger <eric.auger@linaro.org>
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 10:04:26 -0700 [thread overview]
Message-ID: <1418058266.1095.124.camel@bling.home> (raw)
In-Reply-To: <1417372524-12936-1-git-send-email-eric.auger@linaro.org>
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. 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. 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%)
>
next prev parent reply other threads:[~2014-12-08 17:29 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 ` Alex Williamson [this message]
2014-12-08 17:35 ` [Qemu-devel] [PATCH v8 00/19] KVM platform device passthrough Eric Auger
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=1418058266.1095.124.camel@bling.home \
--to=alex.williamson@redhat.com \
--cc=Bharat.Bhushan@freescale.com \
--cc=a.motakis@virtualopensystems.com \
--cc=a.rigo@virtualopensystems.com \
--cc=agraf@suse.de \
--cc=ard.biesheuvel@linaro.org \
--cc=christoffer.dall@linaro.org \
--cc=eric.auger@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).