[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [Qemu-ppc] [PATCH] RFC: vfio-powerpc: added VFIO suppor
From: |
Alex Williamson |
Subject: |
Re: [Qemu-devel] [Qemu-ppc] [PATCH] RFC: vfio-powerpc: added VFIO support (v2) |
Date: |
Thu, 12 Jul 2012 15:37:20 -0600 |
On Thu, 2012-07-12 at 20:54 +0000, Blue Swirl wrote:
> On Thu, Jul 12, 2012 at 8:52 AM, Alexey Kardashevskiy <address@hidden> wrote:
> > It literally does the following:
> >
> > 1. POWERPC IOMMU support (the kernel counterpart is required)
> >
> > 2. The patch assumes that IOAPIC calls are going to be replaced
> > with something generic. I have something in my local git but it's
> > too early, we need to extend PCIINTxRoute first.
> >
> > 3. vfio_get_group() made public. I want to open IOMMU group from
> > the sPAPR code to have everything I need for VFIO on sPAPR and
> > avoid ugly workarounds with finilizing PHB setup on sPAPR.
> >
> > 4. Change sPAPR PHB to scan the PCI bus which is used for
> > the IOMMU-VFIO group. Now it is enough to add the following to
> > the QEMU command line to get VFIO up with all the devices from
> > IOMMU group with id=3:
> > -device spapr-pci-host-bridge,busname=E1000E,buid=0x3,iommu=3,\
> > mem_win_addr=0x230000000000,io_win_addr=0x240000000000,msi_win_addr=0x250000000000
> >
> > Signed-off-by: Alexey Kardashevskiy <address@hidden>
> > ---
> > hw/ppc/Makefile.objs | 3 ++
> > hw/spapr.h | 4 ++
> > hw/spapr_iommu.c | 87 ++++++++++++++++++++++++++++++++++++++
> > hw/spapr_pci.c | 115
> > +++++++++++++++++++++++++++++++++++++++++++++++---
> > hw/spapr_pci.h | 5 +++
> > hw/vfio_pci.c | 28 +++++++++++-
> > hw/vfio_pci.h | 2 +
> > 7 files changed, 237 insertions(+), 7 deletions(-)
> >
> > diff --git a/hw/ppc/Makefile.objs b/hw/ppc/Makefile.objs
> > index f573a95..c46a049 100644
> > --- a/hw/ppc/Makefile.objs
> > +++ b/hw/ppc/Makefile.objs
> > @@ -25,4 +25,7 @@ obj-$(CONFIG_FDT) += ../device_tree.o
> > # Xilinx PPC peripherals
> > obj-y += xilinx_ethlite.o
> >
> > +# VFIO PCI device assignment
> > +obj-$(CONFIG_VFIO_PCI) += vfio_pci.o
> > +
> > obj-y := $(addprefix ../,$(obj-y))
> > diff --git a/hw/spapr.h b/hw/spapr.h
> > index b37f337..9dca704 100644
> > --- a/hw/spapr.h
> > +++ b/hw/spapr.h
> > @@ -340,4 +340,8 @@ int spapr_dma_dt(void *fdt, int node_off, const char
> > *propname,
> > int spapr_tcet_dma_dt(void *fdt, int node_off, const char *propname,
> > DMAContext *dma);
> >
> > +void spapr_vfio_init_dma(int fd, uint32_t liobn,
> > + uint64_t *dma32_window_start,
> > + uint64_t *dma32_window_size);
> > +
> > #endif /* !defined (__HW_SPAPR_H__) */
> > diff --git a/hw/spapr_iommu.c b/hw/spapr_iommu.c
> > index 50c288d..0a194e8 100644
> > --- a/hw/spapr_iommu.c
> > +++ b/hw/spapr_iommu.c
> > @@ -16,6 +16,8 @@
> > * You should have received a copy of the GNU Lesser General Public
> > * License along with this library; if not, see
> > <http://www.gnu.org/licenses/>.
> > */
> > +#include <sys/ioctl.h>
> > +
> > #include "hw.h"
> > #include "kvm.h"
> > #include "qdev.h"
> > @@ -23,6 +25,7 @@
> > #include "dma.h"
> >
> > #include "hw/spapr.h"
> > +#include "hw/linux-vfio.h"
> >
> > #include <libfdt.h>
> >
> > @@ -183,6 +186,86 @@ static int put_tce_emu(target_ulong liobn,
> > target_ulong ioba, target_ulong tce)
> > return 0;
> > }
> >
> > +/* -------- API for POWERPC IOMMU -------- */
> > +
> > +#define POWERPC_IOMMU 2
> > +
> > +struct tce_iommu_info {
>
> CamelCase.
>
> > + __u32 argsz;
> > + __u32 dma32_window_start;
> > + __u32 dma32_window_size;
>
> Please use uint32_t.
These should eventually be included from a kernel header file. I assume
that's the reason for the non-qemu-isms.
> > +};
> > +
> > +#define POWERPC_IOMMU_GET_INFO _IO(VFIO_TYPE, VFIO_BASE + 12)
> > +
> > +struct tce_iommu_dma_map {
> > + __u32 argsz;
>
> The structure may or may not be padded here since there's no
> QEMU_PACKED attribute. If possible, just rearrange the fields.
I'm hoping Alexey adds a __u32 flags here, which solves that problem as
well. Thanks,
Alex
- Re: [Qemu-devel] [PATCH 0/2] RFC: powerpc-vfio: adding support, (continued)
- Re: [Qemu-devel] [PATCH 0/2] RFC: powerpc-vfio: adding support, Alex Williamson, 2012/07/11
- Re: [Qemu-devel] [PATCH 0/2] RFC: powerpc-vfio: adding support, Alexey Kardashevskiy, 2012/07/12
- Re: [Qemu-devel] [PATCH 0/2] RFC: powerpc-vfio: adding support, Alex Williamson, 2012/07/12
- Re: [Qemu-devel] [PATCH 0/2] RFC: powerpc-vfio: adding support, Alexey Kardashevskiy, 2012/07/12
- Re: [Qemu-devel] [PATCH 0/2] RFC: powerpc-vfio: adding support, Alex Williamson, 2012/07/12
- Re: [Qemu-devel] [PATCH 0/2] RFC: powerpc-vfio: adding support, Alexey Kardashevskiy, 2012/07/12
- Re: [Qemu-devel] [PATCH 0/2] RFC: powerpc-vfio: adding support, Alex Williamson, 2012/07/12
- Re: [Qemu-devel] [PATCH 0/2] RFC: powerpc-vfio: adding support, Alexey Kardashevskiy, 2012/07/12
[Qemu-devel] [PATCH] RFC: vfio-powerpc: added VFIO support (v2), Alexey Kardashevskiy, 2012/07/12
Re: [Qemu-devel] [Qemu-ppc] [PATCH] RFC: vfio-powerpc: added VFIO support (v2), Scott Wood, 2012/07/12
Re: [Qemu-devel] [PATCH] RFC: vfio-powerpc: added VFIO support (v2), Alex Williamson, 2012/07/12
[Qemu-devel] [PATCH] RFC: vfio-powerpc: added VFIO support (v3), Alexey Kardashevskiy, 2012/07/13