> From: Jean-Philippe Brucker [mailto:jean-philippe.bruc...@arm.com]
> Sent: Tuesday, September 18, 2018 11:52 PM
> 
> On 15/09/2018 03:36, Tian, Kevin wrote:
> >> 4) Userspace opens another mdev.
> >> -> iommu.c calls domain->ops->attach_dev(domain2, dev)
> >
> > another mdev in same VFIO container or different? I assume the
> > latter since you mentioned a new domain2.
> 
> I was thinking a different VFIO container actually. I used domain2 to
> try to make the example clearer
> 
> >> 1)? When the container is closed, VFIO calls
> >> iommu_detach_device(domain2, parent_dev)
> >> -> iommu.c calls default_domain->ops->attach_dev(default_domain,
> dev)
> >> Given that auxiliary domains are attached, the IOMMU driver could
> deduce
> >> that this actually means "detach an auxiliary domain". But which one?
> >
> > I didn't get this one. There is no need to stick to 1) behavior for
> > 4), i.e. below is expected:
> >         domain2->ops->detach_dev(domain2, dev)
> 
> But in order to get that, the IOMMU core needs to know that domain2 is
> auxiliary. Otherwise, detach_dev is never called when a default_domain
> is present for the parent dev.
> 
> I guess one solution is to add an "auxiliary" attribute to iommu_domain,
> so __iommu_detach_group would do something like:

this doesn't work. same domain can be also attached to another physical
device as non-aux domain (e.g. passthrough) at the same time (vfio-pci
device and vfio-mdev device in same container), then default domain 
tweak is required in that case. "aux" takes effect only per-device, not 
per-domain.

> 
> diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
> index 7113fe398b70..2b3e9b91aee7 100644
> --- a/drivers/iommu/iommu.c
> +++ b/drivers/iommu/iommu.c
> @@ -1786,10 +1786,11 @@ static void __iommu_detach_group(struct
> iommu_domain *domain,
>  {
>       int ret;
> 
> -     if (!group->default_domain) {
> +     if (!group->default_domain || domain->auxiliary) {
>               __iommu_group_for_each_dev(group, domain,
>                                          iommu_group_do_detach_device);
> -             group->domain = NULL;
> +             if (!domain->auxiliary)
> +                     group->domain = NULL;
>               return;
>       }
> 
> Not sure who would set this "auxiliary" attribute... Maybe the IOMMU
> driver, when attaching the domain to a device that has auxiliary mode
> enabled?
> 
> > why cannot ARM implement a detach_dev for aux_domain too? My
> > feeling is that default domain twist is only for switch between 1/2/3
> > in concept.
> 
> If the core actually calls it, we can implement detach_dev :) The
> problem is that the core never calls detach_dev when default_domain is
> present (affects any IOMMU driver that relies on default_domain,
> including AMD), and even in case 4) the default_domain is present for
> the parent device

Then can we change that core logic so detach_dev is invoked in all
cases? yes there will be some changes in vendor drivers, but I expect
this change trivial (especially considering the gain in IOMMU API
simplicity side as described below).

> 
> >> So the proposed interface doesn't seem to work as is. If we want to use
> >> iommu_attach/detach_device for auxiliary domains, the existing
> behavior
> >> of iommu.c, and IOMMU drivers that rely on it, have to change. Any
> >> change I can think of right now seems more daunting than introducing a
> >> different path for auxiliary domains, like iommu_attach_aux_domain for
> >> example.
> >>
> >
> > introducing *aux* specific API will cause different VFIO code path to
> > handle RID-based and PASID-based mdev, since RID-based still needs
> > to use normal attach_domain that way.
> 
> The PASID-based mdev still requires a special case to retrieve the
> allocated PASID and program it in the parent device, so VFIO will need
> to know the difference between the two
> 

that retrieve/program is down by parent driver, instead of VFIO.

Thanks
Kevin
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

Reply via email to