All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexander Graf <agraf@suse.de>
To: Eric Auger <eric.auger@linaro.org>,
	eric.auger@st.com, christoffer.dall@linaro.org,
	qemu-devel@nongnu.org, a.rigo@virtualopensystems.com,
	kim.phillips@freescale.com, marc.zyngier@arm.com,
	manish.jaggi@caviumnetworks.com, joel.schopp@amd.com,
	peter.maydell@linaro.org, pbonzini@redhat.com, afaerber@suse.de
Cc: patches@linaro.org, Kim Phillips <kim.phillips@linaro.org>,
	will.deacon@arm.com, stuart.yoder@freescale.com,
	Bharat.Bhushan@freescale.com, alex.williamson@redhat.com,
	a.motakis@virtualopensystems.com, kvmarm@lists.cs.columbia.edu
Subject: Re: [Qemu-devel] [PATCH v6 08/16] hw/vfio: create common module
Date: Wed, 10 Sep 2014 15:09:40 +0200	[thread overview]
Message-ID: <54104D94.7040109@suse.de> (raw)
In-Reply-To: <1410247876-4967-9-git-send-email-eric.auger@linaro.org>



On 09.09.14 09:31, Eric Auger wrote:
> A new common module is created. It implements all functions
> that have no device specificity (PCI, Platform).
> 
> This patch only consists in move (no functional changes)
> 
> Signed-off-by: Kim Phillips <kim.phillips@linaro.org>
> Signed-off-by: Eric Auger <eric.auger@linaro.org>
> 
> ---
> v5 -> v6:
> - follow all evolutions of original PCI code from v5 to V6
> - move declaration of vfio_region_ops, vfio_memory_listener,
>   vfio_group_list, vfio_address_spaces into vfio-common.h
> 
> v4 -> v5:
> - integrate "sPAPR/IOMMU: Fix TCE entry permission"
> - VFIOdevice .name dealloc removed from vfio_put_base_device
> - add some includes according to vfio inclusion policy
> 
> v3 -> v4:
> [Eric Auger]
> move done after all PCI modifications to anticipate for
> VFIO Platform needs. Purpose is to alleviate the whole
> review process.
> 
> <= v3
> First split done by Kim Phillips
> ---
>  hw/vfio/Makefile.objs         |    1 +
>  hw/vfio/common.c              |  958 ++++++++++++++++++++++++++++++++++++++
>  hw/vfio/pci.c                 | 1028 +----------------------------------------
>  include/hw/vfio/vfio-common.h |  152 ++++++
>  trace-events                  |    1 +
>  5 files changed, 1113 insertions(+), 1027 deletions(-)
>  create mode 100644 hw/vfio/common.c
>  create mode 100644 include/hw/vfio/vfio-common.h
> 
> diff --git a/hw/vfio/Makefile.objs b/hw/vfio/Makefile.objs
> index 31c7dab..e31f30e 100644
> --- a/hw/vfio/Makefile.objs
> +++ b/hw/vfio/Makefile.objs
> @@ -1,3 +1,4 @@
>  ifeq ($(CONFIG_LINUX), y)
> +obj-$(CONFIG_SOFTMMU) += common.o
>  obj-$(CONFIG_PCI) += pci.o
>  endif
> diff --git a/hw/vfio/common.c b/hw/vfio/common.c
> new file mode 100644
> index 0000000..252c0b8
> --- /dev/null
> +++ b/hw/vfio/common.c
> @@ -0,0 +1,958 @@
> +/*
> + * generic functions used by VFIO devices
> + *
> + * Copyright Red Hat, Inc. 2012
> + *
> + * Authors:
> + *  Alex Williamson <alex.williamson@redhat.com>
> + *
> + * This work is licensed under the terms of the GNU GPL, version 2.  See
> + * the COPYING file in the top-level directory.
> + *
> + * Based on qemu-kvm device-assignment:
> + *  Adapted for KVM by Qumranet.
> + *  Copyright (c) 2007, Neocleus, Alex Novik (alex@neocleus.com)
> + *  Copyright (c) 2007, Neocleus, Guy Zana (guy@neocleus.com)
> + *  Copyright (C) 2008, Qumranet, Amit Shah (amit.shah@qumranet.com)
> + *  Copyright (C) 2008, Red Hat, Amit Shah (amit.shah@redhat.com)
> + *  Copyright (C) 2008, IBM, Muli Ben-Yehuda (muli@il.ibm.com)
> + */
> +
> +#include <sys/ioctl.h>
> +#include <sys/mman.h>
> +#include <linux/vfio.h>
> +
> +#include "hw/vfio/vfio-common.h"
> +#include "hw/vfio/vfio.h"
> +#include "exec/address-spaces.h"
> +#include "exec/memory.h"
> +#include "hw/hw.h"
> +#include "qemu/error-report.h"
> +#include "sysemu/kvm.h"
> +#include "trace.h"
> +
> +struct vfio_group_head vfio_group_list =
> +    QLIST_HEAD_INITIALIZER(vfio_address_spaces);
> +struct vfio_as_head vfio_address_spaces =
> +    QLIST_HEAD_INITIALIZER(vfio_address_spaces);
> +
> +#ifdef CONFIG_KVM
> +/*
> + * We have a single VFIO pseudo device per KVM VM.  Once created it lives
> + * for the life of the VM.  Closing the file descriptor only drops our
> + * reference to it and the device's reference to kvm.  Therefore once
> + * initialized, this file descriptor is only released on QEMU exit and
> + * we'll re-use it should another vfio device be attached before then.
> + */
> +static int vfio_kvm_device_fd = -1;
> +#endif
> +
> +/*
> + * Common VFIO interrupt disable
> + */
> +void vfio_disable_irqindex(VFIODevice *vbasedev, int index)
> +{
> +    struct vfio_irq_set irq_set = {
> +        .argsz = sizeof(irq_set),
> +        .flags = VFIO_IRQ_SET_DATA_NONE | VFIO_IRQ_SET_ACTION_TRIGGER,
> +        .index = index,
> +        .start = 0,
> +        .count = 0,
> +    };
> +
> +    ioctl(vbasedev->fd, VFIO_DEVICE_SET_IRQS, &irq_set);
> +}
> +
> +void vfio_unmask_irqindex(VFIODevice *vbasedev, int index)
> +{
> +    struct vfio_irq_set irq_set = {
> +        .argsz = sizeof(irq_set),
> +        .flags = VFIO_IRQ_SET_DATA_NONE | VFIO_IRQ_SET_ACTION_UNMASK,
> +        .index = index,
> +        .start = 0,
> +        .count = 1,
> +    };
> +
> +    ioctl(vbasedev->fd, VFIO_DEVICE_SET_IRQS, &irq_set);
> +}
> +
> +void vfio_mask_irqindex(VFIODevice *vbasedev, int index)
> +{
> +    struct vfio_irq_set irq_set = {
> +        .argsz = sizeof(irq_set),
> +        .flags = VFIO_IRQ_SET_DATA_NONE | VFIO_IRQ_SET_ACTION_MASK,
> +        .index = index,
> +        .start = 0,
> +        .count = 1,
> +    };
> +
> +    ioctl(vbasedev->fd, VFIO_DEVICE_SET_IRQS, &irq_set);
> +}
> +
> +/*
> + * IO Port/MMIO - Beware of the endians, VFIO is always little endian
> + */
> +void vfio_region_write(void *opaque, hwaddr addr,
> +                       uint64_t data, unsigned size)
> +{
> +    VFIORegion *region = opaque;
> +    VFIODevice *vbasedev = region->vbasedev;
> +    union {
> +        uint8_t byte;
> +        uint16_t word;
> +        uint32_t dword;
> +        uint64_t qword;
> +    } buf;
> +
> +    switch (size) {
> +    case 1:
> +        buf.byte = data;
> +        break;
> +    case 2:
> +        buf.word = data;
> +        break;
> +    case 4:
> +        buf.dword = data;

Please beware that this code is affected by Alexey's patch set that
fixes endianness for slow patch MMIO access and ROM regions.


Alex

  reply	other threads:[~2014-09-10 13:09 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-09  7:31 [Qemu-devel] [PATCH v6 00/16] KVM platform device passthrough Eric Auger
2014-09-09  7:31 ` [Qemu-devel] [PATCH v6 01/16] vfio: move hw/misc/vfio.c to hw/vfio/pci.c Move vfio.h into include/hw/vfio Eric Auger
2014-09-09  7:31 ` [Qemu-devel] [PATCH v6 02/16] hw/vfio/pci: Rename VFIODevice into VFIOPCIDevice Eric Auger
2014-09-09  7:31 ` [Qemu-devel] [PATCH v6 03/16] hw/vfio/pci: introduce VFIODevice Eric Auger
2014-09-09  7:31 ` [Qemu-devel] [PATCH v6 04/16] hw/vfio/pci: Introduce VFIORegion Eric Auger
2014-09-09  7:31 ` [Qemu-devel] [PATCH v6 05/16] hw/vfio/pci: split vfio_get_device Eric Auger
2014-09-09  7:31 ` [Qemu-devel] [PATCH v6 06/16] hw/vfio/pci: rename group_list into vfio_group_list Eric Auger
2014-09-09  7:31 ` [Qemu-devel] [PATCH v6 07/16] hw/vfio/pci: use name field in format strings Eric Auger
2014-09-09  7:31 ` [Qemu-devel] [PATCH v6 08/16] hw/vfio: create common module Eric Auger
2014-09-10 13:09   ` Alexander Graf [this message]
2014-09-11 12:11     ` Eric Auger
2014-09-11 12:13       ` Alexander Graf
2014-09-11 14:21         ` Eric Auger
2014-09-09  7:31 ` [Qemu-devel] [PATCH v6 09/16] hw/vfio/platform: add vfio-platform support Eric Auger
2014-09-09  7:31 ` [Qemu-devel] [PATCH v6 10/16] hw/vfio: calxeda xgmac device Eric Auger
2014-09-09  7:31 ` [Qemu-devel] [PATCH v6 11/16] hw/arm/dyn_sysbus_devtree: enable vfio-calxeda-xgmac dynamic instantiation Eric Auger
2014-09-10 13:12   ` Alexander Graf
2014-09-11 14:20     ` Eric Auger
2014-09-09  7:31 ` [Qemu-devel] [PATCH v6 12/16] vfio/platform: add fake injection modality Eric Auger
2014-09-09  7:31 ` [Qemu-devel] [PATCH v6 13/16] hw/vfio/platform: Add irqfd support Eric Auger
2014-09-09  7:31 ` [Qemu-devel] [PATCH v6 14/16] linux-headers: Update KVM headers from linux-next tag ToBeFilled Eric Auger
2014-09-09  7:31 ` [Qemu-devel] [PATCH v6 15/16] VFIO: COMMON: vfio_kvm_device_fd moved in the common header Eric Auger
2014-09-09  7:31 ` [Qemu-devel] [PATCH v6 16/16] VFIO: PLATFORM: add forwarded irq support Eric Auger
2014-09-11 22:14 ` [Qemu-devel] [PATCH v6 00/16] KVM platform device passthrough Alex Williamson
2014-09-11 22:23   ` Christoffer Dall
2014-09-11 22:51     ` Alex Williamson
2014-09-11 23:05       ` Christoffer Dall
2014-09-15 22:01         ` Eric Auger
2014-09-16 20:51           ` Alex Williamson
2014-09-16 21:19             ` Eric Auger
2014-09-16 21:23             ` Alex Williamson
2014-09-19  0:29               ` 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=54104D94.7040109@suse.de \
    --to=agraf@suse.de \
    --cc=Bharat.Bhushan@freescale.com \
    --cc=a.motakis@virtualopensystems.com \
    --cc=a.rigo@virtualopensystems.com \
    --cc=afaerber@suse.de \
    --cc=alex.williamson@redhat.com \
    --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=kim.phillips@linaro.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=manish.jaggi@caviumnetworks.com \
    --cc=marc.zyngier@arm.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 \
    /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.