From: Alexey Kardashevskiy <aik@ozlabs.ru>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: qemu-ppc@nongnu.org, qemu-devel@nongnu.org,
Gavin Shan <gwshan@linux.vnet.ibm.com>,
Alexander Graf <agraf@suse.de>
Subject: Re: [Qemu-devel] [PATCH v7 2/4] vfio: Add vfio_container_spapr_get_info()
Date: Fri, 06 Jun 2014 09:40:56 +1000 [thread overview]
Message-ID: <53910008.6070204@ozlabs.ru> (raw)
In-Reply-To: <1401996454.9207.213.camel@ul30vt.home>
On 06/06/2014 05:27 AM, Alex Williamson wrote:
> On Thu, 2014-06-05 at 15:49 +1000, Alexey Kardashevskiy wrote:
>> To perform DMA mapping via TCE table correctly, the guest must
>> know where DMA window is located on the PCI bus. A hypervisor is
>> expected to provide such information. Since QEMU has no control
>> over this setting, we need a way to obtain a start address and size
>> from the host VFIO driver.
>>
>> This adds a helper which returns the default DMA window properties
>> for the specific IOMMU group. The upstream kernel implements this ioctl
>> already.
>
> Couldn't this be done with Gavin's vfio_pci_container_ioctl()? Thanks,
Good point, I missed that. I'll merge two helpers into one and repost, then
Gavin will use it.
>
> Alex
>
>
>> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
>> ---
>> Changes:
>> v7:
>> * do not return a group fd from the helper
>>
>> v6:
>> * added dup() to protect group_fd from accidental disposal
>>
>> v5:
>> * reworked to reflect change in vfio_get_group() from one
>> of previous patches change
>>
>> v4:
>> * fixed possible leaks on error paths
>> ---
>> hw/misc/vfio.c | 36 ++++++++++++++++++++++++++++++++++++
>> include/hw/misc/vfio.h | 11 +++++++++++
>> 2 files changed, 47 insertions(+)
>> create mode 100644 include/hw/misc/vfio.h
>>
>> diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c
>> index 7437c2e..99141f3 100644
>> --- a/hw/misc/vfio.c
>> +++ b/hw/misc/vfio.c
>> @@ -39,6 +39,7 @@
>> #include "qemu/range.h"
>> #include "sysemu/kvm.h"
>> #include "sysemu/sysemu.h"
>> +#include "hw/misc/vfio.h"
>>
>> /* #define DEBUG_VFIO */
>> #ifdef DEBUG_VFIO
>> @@ -4318,3 +4319,38 @@ static void register_vfio_pci_dev_type(void)
>> }
>>
>> type_init(register_vfio_pci_dev_type)
>> +
>> +int vfio_container_spapr_get_info(AddressSpace *as,
>> + int32_t groupid,
>> + struct vfio_iommu_spapr_tce_info *info)
>> +{
>> + VFIOGroup *group;
>> + VFIOContainer *container;
>> + int ret, fd;
>> +
>> + group = vfio_get_group(groupid, as);
>> + if (!group) {
>> + return -1;
>> + }
>> + container = group->container;
>> + if (!group->container) {
>> + goto put_group_exit;
>> + }
>> + fd = container->fd;
>> + if (!ioctl(fd, VFIO_CHECK_EXTENSION, VFIO_SPAPR_TCE_IOMMU)) {
>> + goto put_group_exit;
>> + }
>> + ret = ioctl(fd, VFIO_IOMMU_SPAPR_TCE_GET_INFO, info);
>> + if (ret) {
>> + error_report("vfio: failed to get iommu info for container: %s",
>> + strerror(errno));
>> + goto put_group_exit;
>> + }
>> +
>> + return 0;
>> +
>> +put_group_exit:
>> + vfio_put_group(group);
>> +
>> + return -1;
>> +}
>> diff --git a/include/hw/misc/vfio.h b/include/hw/misc/vfio.h
>> new file mode 100644
>> index 0000000..e82f5a3
>> --- /dev/null
>> +++ b/include/hw/misc/vfio.h
>> @@ -0,0 +1,11 @@
>> +#ifndef VFIO_API_H
>> +#define VFIO_API_H
>> +
>> +#include "qemu/typedefs.h"
>> +#include <linux/vfio.h>
>> +
>> +extern int vfio_container_spapr_get_info(AddressSpace *as,
>> + int32_t groupid,
>> + struct vfio_iommu_spapr_tce_info *info);
>> +
>> +#endif
>
>
>
--
Alexey
next prev parent reply other threads:[~2014-06-05 23:41 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-05 5:49 [Qemu-devel] [PATCH v7 0/4] vfio on spapr-ppc64 Alexey Kardashevskiy
2014-06-05 5:49 ` [Qemu-devel] [PATCH v7 1/4] spapr_iommu: Make in-kernel TCE table optional Alexey Kardashevskiy
2014-06-05 6:43 ` Alexey Kardashevskiy
2014-06-05 13:06 ` Alexander Graf
2014-06-05 13:10 ` Alexey Kardashevskiy
2014-06-05 13:15 ` Alexander Graf
2014-06-05 13:33 ` Alexey Kardashevskiy
2014-06-05 13:36 ` Alexander Graf
2014-06-05 14:33 ` Alexey Kardashevskiy
2014-06-05 16:51 ` Alexander Graf
2014-06-05 23:17 ` Alexey Kardashevskiy
2014-06-05 23:36 ` Alexander Graf
2014-06-05 23:48 ` Alexey Kardashevskiy
2014-06-06 3:38 ` Benjamin Herrenschmidt
2014-06-05 5:49 ` [Qemu-devel] [PATCH v7 2/4] vfio: Add vfio_container_spapr_get_info() Alexey Kardashevskiy
2014-06-05 19:27 ` Alex Williamson
2014-06-05 23:40 ` Alexey Kardashevskiy [this message]
2014-06-06 1:32 ` Gavin Shan
2014-06-05 5:50 ` [Qemu-devel] [PATCH v7 3/4] spapr_pci_vfio: Add spapr-pci-vfio-host-bridge to support vfio Alexey Kardashevskiy
2014-06-05 13:34 ` Alexander Graf
2014-06-05 14:37 ` Alexey Kardashevskiy
2014-06-05 5:50 ` [Qemu-devel] [PATCH v7 4/4] vfio: Enable for spapr Alexey Kardashevskiy
2014-06-05 19:31 ` Alex Williamson
2014-06-05 23:39 ` Alexey Kardashevskiy
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=53910008.6070204@ozlabs.ru \
--to=aik@ozlabs.ru \
--cc=agraf@suse.de \
--cc=alex.williamson@redhat.com \
--cc=gwshan@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/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.