From: Eric Auger <eric.auger@linaro.org>
To: Alexander Graf <agraf@suse.de>,
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: Thu, 11 Sep 2014 16:21:49 +0200 [thread overview]
Message-ID: <5411AFFD.4070708@linaro.org> (raw)
In-Reply-To: <541191E1.8040707@suse.de>
On 09/11/2014 02:13 PM, Alexander Graf wrote:
>
>
> On 11.09.14 14:11, Eric Auger wrote:
>> On 09/10/2014 03:09 PM, Alexander Graf wrote:
>>>
>>>
>>> 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.
>>
>> Hi Alex,
>>
>> do you mean vfio_region_write/read implementation will be different
>> depending on whether we are on PCI or platform; or simply I need to pay
>> attention to the fact this code will need an upgrade with Alexey's patch
>> ( [PATCH 0/2] vfio: Another try to fix ROM BAR endianness).
>
> You will simply need an update when Alexey's patches are in. I don't see
> why vfio-platform should be any different from vfio-pci here.
OK thanks for the confirmation
Eric
>
>
> Alex
>
next prev parent reply other threads:[~2014-09-11 14:22 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
2014-09-11 12:11 ` Eric Auger
2014-09-11 12:13 ` Alexander Graf
2014-09-11 14:21 ` Eric Auger [this message]
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=5411AFFD.4070708@linaro.org \
--to=eric.auger@linaro.org \
--cc=Bharat.Bhushan@freescale.com \
--cc=a.motakis@virtualopensystems.com \
--cc=a.rigo@virtualopensystems.com \
--cc=afaerber@suse.de \
--cc=agraf@suse.de \
--cc=alex.williamson@redhat.com \
--cc=christoffer.dall@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.