All of lore.kernel.org
 help / color / mirror / Atom feed
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 v8 4/4] vfio: Enable for SPAPR
Date: Sat, 07 Jun 2014 08:47:27 +1000	[thread overview]
Message-ID: <539244FF.7000007@ozlabs.ru> (raw)
In-Reply-To: <1402073878.14174.12.camel@ul30vt.home>

On 06/07/2014 02:57 AM, Alex Williamson wrote:
> On Fri, 2014-06-06 at 13:34 +1000, Alexey Kardashevskiy wrote:
>> This turns the sPAPR support on and enables VFIO container use
>> in the kernel.
>>
>> This extends vfio_connect_container to support VFIO_SPAPR_TCE_IOMMU type
>> in the host kernel.
>>
>> This registers a memory listener which sPAPR IOMMU will notify when
>> executing H_PUT_TCE/etc DMA calls. The listener then will notify the host
>> kernel about DMA map/unmap operation via VFIO_IOMMU_MAP_DMA/
>> VFIO_IOMMU_UNMAP_DMA ioctls.
>>
>> This executes VFIO_IOMMU_ENABLE ioctl to make sure that the IOMMU is free
>> of mappings and can be exclusively given to the user. At the moment SPAPR
>> is the only platform requiring this call to be implemented.
>>
>> Note that the host kernel function implementing VFIO_IOMMU_DISABLE
>> is called automatically when container's fd is closed so there is
>> no need to call it explicitly from QEMU. This may change in the future.
> 
> So you're saying we rely on a behavior that may change in the future...
> The kernel must do cleanup, it can never rely on userspace to do the
> right thing or we have a bug.  Does that mean we can remove the "may
> change in the future" part of this comment or is that directed at QEMU's
> behavior and not the kernel's? 


I wanted to say that if/when we support PCI hotplug or dynamic IOMMU group
reconfiguration (we might be able to do so in POWER9 or later, do not know
details), we will call DISABLE explicitly.


> A comment in the code where we setup the
> release handler or call ENABLE would be a good idea too.  Thanks,




> 
> Alex
> 
>> Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
>> ---
>> Changes:
>> v8:
>> * added note about VFIO_IOMMU_DISABLE in the commit log
>>
>> v7:
>> * added more details in commit log
>>
>> v5:
>> * multiple returns converted to gotos
>>
>> v4:
>> * fixed format string to use %m which is a glibc extension:
>> "Print output of strerror(errno). No argument is required."
>> ---
>>  hw/misc/vfio.c | 28 ++++++++++++++++++++++++++++
>>  1 file changed, 28 insertions(+)
>>
>> diff --git a/hw/misc/vfio.c b/hw/misc/vfio.c
>> index bb77934..78d2045 100644
>> --- a/hw/misc/vfio.c
>> +++ b/hw/misc/vfio.c
>> @@ -3650,6 +3650,34 @@ static int vfio_connect_container(VFIOGroup *group, AddressSpace *as)
>>  
>>          container->iommu_data.type1.initialized = true;
>>  
>> +    } else if (ioctl(fd, VFIO_CHECK_EXTENSION, VFIO_SPAPR_TCE_IOMMU)) {
>> +        ret = ioctl(group->fd, VFIO_GROUP_SET_CONTAINER, &fd);
>> +        if (ret) {
>> +            error_report("vfio: failed to set group container: %m");
>> +            ret = -errno;
>> +            goto free_container_exit;
>> +        }
>> +
>> +        ret = ioctl(fd, VFIO_SET_IOMMU, VFIO_SPAPR_TCE_IOMMU);
>> +        if (ret) {
>> +            error_report("vfio: failed to set iommu for container: %m");
>> +            ret = -errno;
>> +            goto free_container_exit;
>> +        }
>> +
>> +        ret = ioctl(fd, VFIO_IOMMU_ENABLE);
>> +        if (ret) {
>> +            error_report("vfio: failed to enable container: %m");
>> +            ret = -errno;
>> +            goto free_container_exit;
>> +        }
>> +
>> +        container->iommu_data.type1.listener = vfio_memory_listener;
>> +        container->iommu_data.release = vfio_listener_release;
>> +
>> +        memory_listener_register(&container->iommu_data.type1.listener,
>> +                                 container->space->as);
>> +
>>      } else {
>>          error_report("vfio: No available IOMMU models");
>>          ret = -EINVAL;
> 
> 
> 


-- 
Alexey

  reply	other threads:[~2014-06-06 22:47 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-06  3:34 [Qemu-devel] [PATCH v8 0/4] vfio on spapr-ppc64 Alexey Kardashevskiy
2014-06-06  3:34 ` [Qemu-devel] [PATCH v8 1/4] spapr_iommu: Make in-kernel TCE table optional Alexey Kardashevskiy
2014-06-06  3:34 ` [Qemu-devel] [PATCH v8 2/4] vfio: Add vfio_container_ioctl() Alexey Kardashevskiy
2014-06-06 16:48   ` Alex Williamson
2014-06-06 16:54     ` Alexey Kardashevskiy
2014-06-06 17:35       ` Alex Williamson
2014-06-06 22:50         ` Alexey Kardashevskiy
2014-06-06 22:55           ` Alex Williamson
2014-06-07 23:48             ` Alexey Kardashevskiy
2014-06-09 14:20               ` Alex Williamson
2014-06-06  3:34 ` [Qemu-devel] [PATCH v8 3/4] spapr_pci_vfio: Add spapr-pci-vfio-host-bridge to support vfio Alexey Kardashevskiy
2014-06-06  3:34 ` [Qemu-devel] [PATCH v8 4/4] vfio: Enable for SPAPR Alexey Kardashevskiy
2014-06-06 16:57   ` Alex Williamson
2014-06-06 22:47     ` Alexey Kardashevskiy [this message]
2014-06-07 23:49       ` Alexey Kardashevskiy
2014-06-09 14:28         ` Alex Williamson

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=539244FF.7000007@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.