From: Jason Gunthorpe via iommu <iommu@lists.linux-foundation.org>
To: Robin Murphy <robin.murphy@arm.com>
Cc: kvm@vger.kernel.org, rafael@kernel.org,
David Airlie <airlied@linux.ie>,
linux-pci@vger.kernel.org,
Thierry Reding <thierry.reding@gmail.com>,
Diana Craciun <diana.craciun@oss.nxp.com>,
Dmitry Osipenko <digetx@gmail.com>, Will Deacon <will@kernel.org>,
Ashok Raj <ashok.raj@intel.com>,
Jonathan Hunter <jonathanh@nvidia.com>,
Christoph Hellwig <hch@infradead.org>,
Stuart Yoder <stuyoder@gmail.com>,
Kevin Tian <kevin.tian@intel.com>,
Chaitanya Kulkarni <kch@nvidia.com>,
Alex Williamson <alex.williamson@redhat.com>,
Bjorn Helgaas <bhelgaas@google.com>,
Dan Williams <dan.j.williams@intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Cornelia Huck <cohuck@redhat.com>,
linux-kernel@vger.kernel.org, Li Yang <leoyang.li@nxp.com>,
iommu@lists.linux-foundation.org,
Jacob jun Pan <jacob.jun.pan@intel.com>,
Daniel Vetter <daniel@ffwll.ch>
Subject: Re: [PATCH v1 1/8] iommu: Add iommu_group_replace_domain()
Date: Mon, 14 Feb 2022 13:25:52 -0400 [thread overview]
Message-ID: <20220214172552.GG4160@nvidia.com> (raw)
In-Reply-To: <f302e823-ecc3-2aae-e275-85a56e26fb25@arm.com>
On Mon, Feb 14, 2022 at 04:38:23PM +0000, Robin Murphy wrote:
> > This works better because the iommu code can hold the internal group
> > while it finds the bus/device and then invokes the driver op. We don't
> > have a lifetime problem anymore under that lock.
>
> That's certainly one of the cleaner possibilities - per the theme of this
> thread I'm not hugely keen on proliferating special VFIO-specific
> versions
IMHO this is still a net better than VFIO open coding buggy versions
as it has done.
> of IOMMU APIs, but trying to take the dev->mutex might be a bit heavy-handed
> and risky,
The container->group lock is held during this code, and the
container->group_lock is taken during probe under the
dev_mutex. Acquiring the dev_mutex inside the group_lock should not be
done.
> and getting at the vfio_group->device_lock a bit fiddly, so if I
> can't come up with anything nicer or more general it might be a fair
> compromise.
Actually that doesn't look so bad. A 'vfio allocate domain from group'
function that used the above trick looks OK to me right now.
If we could move the iommu_capable() test to a domain that would make
this pretty nice - getting the bus safely is a bit more of a PITA -
I'm much less keen on holding the device_lock for the whole function.
> > The remaining VFIO use of bus for iommu_capable() is better done
> > against the domain or the group object, as appropriate.
>
> Indeed, although half the implementations of .capable are nonsense already,
> so I'm treating that one as a secondary priority for the moment (with an aim
> to come back afterwards and just try to kill it off as far as possible).
> RDMA and VFIO shouldn't be a serious concern for the kind of systems with
> heterogeneous IOMMUs at this point.
Well, lets see:
drivers/infiniband/hw/usnic/usnic_uiom.c: if (!iommu_capable(dev->bus, IOMMU_CAP_CACHE_COHERENCY)) {
drivers/vhost/vdpa.c: if (!iommu_capable(bus, IOMMU_CAP_CACHE_COHERENCY))
These are kind of hacky ways to say "userspace can actually do DMA
because we don't need privileged cache flush instructions on this
platform". I would love it if these could be moved to some struct
device API - I've aruged with Christoph a couple of times we need
something like that..
drivers/vfio/vfio_iommu_type1.c: if (iommu_capable(bus, IOMMU_CAP_CACHE_COHERENCY))
This is doing the above, and also the no-snoop mess that Intel has
mixed in. How to exactly properly expose their special no-snoop
behavior is definitely something that should be on the domain.
drivers/pci/controller/vmd.c: if (iommu_capable(vmd->dev->dev.bus, IOMMU_CAP_INTR_REMAP) ||
drivers/vfio/vfio_iommu_type1.c: iommu_capable(bus, IOMMU_CAP_INTR_REMAP);
Not sure about VMD, but the VFIO one is a security statement. It could
be quite happy as a domain query, or a flag 'require secure MSI
interrupts' as input to attach_domain.
> > > solving it on my own and end up deleting
> > > iommu_group_replace_domain() in about 6 months' time anyway.
> >
> > I expect this API to remain until we figure out a solution to the PPC
> > problem, and come up with an alternative way to change the attached
> > domain on the fly.
>
> I though PPC wasn't using the IOMMU API at all... or is that the problem?
It needs it both ways, a way to get all the DMA security properties
from Lu's series without currently using an iommu_domain to get
them. So the design is to attach a NULL domain for PPC and leave it
like that.
It is surely eventually fixable to introduce a domain to PPC, I would
just prefer we not make anything contingent on actually doing that. :\
Jason
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu
WARNING: multiple messages have this Message-ID (diff)
From: Jason Gunthorpe <jgg@nvidia.com>
To: Robin Murphy <robin.murphy@arm.com>
Cc: kvm@vger.kernel.org, rafael@kernel.org,
David Airlie <airlied@linux.ie>,
linux-pci@vger.kernel.org,
Thierry Reding <thierry.reding@gmail.com>,
Diana Craciun <diana.craciun@oss.nxp.com>,
Dmitry Osipenko <digetx@gmail.com>, Will Deacon <will@kernel.org>,
Ashok Raj <ashok.raj@intel.com>,
Jonathan Hunter <jonathanh@nvidia.com>,
Christoph Hellwig <hch@infradead.org>,
Stuart Yoder <stuyoder@gmail.com>,
Kevin Tian <kevin.tian@intel.com>,
Chaitanya Kulkarni <kch@nvidia.com>,
Alex Williamson <alex.williamson@redhat.com>,
Bjorn Helgaas <bhelgaas@google.com>,
Dan Williams <dan.j.williams@intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Cornelia Huck <cohuck@redhat.com>,
linux-kernel@vger.kernel.org, Li Yang <leoyang.li@nxp.com>,
iommu@lists.linux-foundation.org,
Jacob jun Pan <jacob.jun.pan@intel.com>,
Daniel Vetter <daniel@ffwll.ch>
Subject: Re: [PATCH v1 1/8] iommu: Add iommu_group_replace_domain()
Date: Mon, 14 Feb 2022 13:25:52 -0400 [thread overview]
Message-ID: <20220214172552.GG4160@nvidia.com> (raw)
In-Reply-To: <f302e823-ecc3-2aae-e275-85a56e26fb25@arm.com>
On Mon, Feb 14, 2022 at 04:38:23PM +0000, Robin Murphy wrote:
> > This works better because the iommu code can hold the internal group
> > while it finds the bus/device and then invokes the driver op. We don't
> > have a lifetime problem anymore under that lock.
>
> That's certainly one of the cleaner possibilities - per the theme of this
> thread I'm not hugely keen on proliferating special VFIO-specific
> versions
IMHO this is still a net better than VFIO open coding buggy versions
as it has done.
> of IOMMU APIs, but trying to take the dev->mutex might be a bit heavy-handed
> and risky,
The container->group lock is held during this code, and the
container->group_lock is taken during probe under the
dev_mutex. Acquiring the dev_mutex inside the group_lock should not be
done.
> and getting at the vfio_group->device_lock a bit fiddly, so if I
> can't come up with anything nicer or more general it might be a fair
> compromise.
Actually that doesn't look so bad. A 'vfio allocate domain from group'
function that used the above trick looks OK to me right now.
If we could move the iommu_capable() test to a domain that would make
this pretty nice - getting the bus safely is a bit more of a PITA -
I'm much less keen on holding the device_lock for the whole function.
> > The remaining VFIO use of bus for iommu_capable() is better done
> > against the domain or the group object, as appropriate.
>
> Indeed, although half the implementations of .capable are nonsense already,
> so I'm treating that one as a secondary priority for the moment (with an aim
> to come back afterwards and just try to kill it off as far as possible).
> RDMA and VFIO shouldn't be a serious concern for the kind of systems with
> heterogeneous IOMMUs at this point.
Well, lets see:
drivers/infiniband/hw/usnic/usnic_uiom.c: if (!iommu_capable(dev->bus, IOMMU_CAP_CACHE_COHERENCY)) {
drivers/vhost/vdpa.c: if (!iommu_capable(bus, IOMMU_CAP_CACHE_COHERENCY))
These are kind of hacky ways to say "userspace can actually do DMA
because we don't need privileged cache flush instructions on this
platform". I would love it if these could be moved to some struct
device API - I've aruged with Christoph a couple of times we need
something like that..
drivers/vfio/vfio_iommu_type1.c: if (iommu_capable(bus, IOMMU_CAP_CACHE_COHERENCY))
This is doing the above, and also the no-snoop mess that Intel has
mixed in. How to exactly properly expose their special no-snoop
behavior is definitely something that should be on the domain.
drivers/pci/controller/vmd.c: if (iommu_capable(vmd->dev->dev.bus, IOMMU_CAP_INTR_REMAP) ||
drivers/vfio/vfio_iommu_type1.c: iommu_capable(bus, IOMMU_CAP_INTR_REMAP);
Not sure about VMD, but the VFIO one is a security statement. It could
be quite happy as a domain query, or a flag 'require secure MSI
interrupts' as input to attach_domain.
> > > solving it on my own and end up deleting
> > > iommu_group_replace_domain() in about 6 months' time anyway.
> >
> > I expect this API to remain until we figure out a solution to the PPC
> > problem, and come up with an alternative way to change the attached
> > domain on the fly.
>
> I though PPC wasn't using the IOMMU API at all... or is that the problem?
It needs it both ways, a way to get all the DMA security properties
from Lu's series without currently using an iommu_domain to get
them. So the design is to attach a NULL domain for PPC and leave it
like that.
It is surely eventually fixable to introduce a domain to PPC, I would
just prefer we not make anything contingent on actually doing that. :\
Jason
next prev parent reply other threads:[~2022-02-14 17:28 UTC|newest]
Thread overview: 88+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-06 2:20 [PATCH v1 0/8] Scrap iommu_attach/detach_group() interfaces Lu Baolu
2022-01-06 2:20 ` Lu Baolu
2022-01-06 2:20 ` [PATCH v1 1/8] iommu: Add iommu_group_replace_domain() Lu Baolu
2022-01-06 2:20 ` Lu Baolu
2022-01-06 17:06 ` Jason Gunthorpe via iommu
2022-01-06 17:06 ` Jason Gunthorpe
2022-01-07 0:26 ` Lu Baolu
2022-01-07 0:26 ` Lu Baolu
2022-02-14 12:09 ` Robin Murphy
2022-02-14 12:09 ` Robin Murphy
2022-02-14 12:45 ` Jason Gunthorpe via iommu
2022-02-14 12:45 ` Jason Gunthorpe
2022-02-14 14:10 ` Robin Murphy
2022-02-14 14:10 ` Robin Murphy
2022-02-14 14:56 ` Jason Gunthorpe via iommu
2022-02-14 14:56 ` Jason Gunthorpe
2022-02-14 16:38 ` Robin Murphy
2022-02-14 16:38 ` Robin Murphy
2022-02-14 17:25 ` Jason Gunthorpe via iommu [this message]
2022-02-14 17:25 ` Jason Gunthorpe
2022-01-06 2:20 ` [PATCH v1 2/8] vfio/type1: Use iommu_group_replace_domain() Lu Baolu
2022-01-06 2:20 ` Lu Baolu
2022-01-06 2:20 ` [PATCH v1 3/8] iommu: Extend iommu_at[de]tach_device() for multi-device groups Lu Baolu
2022-01-06 2:20 ` Lu Baolu
2022-01-06 17:22 ` Jason Gunthorpe via iommu
2022-01-06 17:22 ` Jason Gunthorpe
2022-01-07 1:14 ` Lu Baolu
2022-01-07 1:14 ` Lu Baolu
2022-01-07 1:19 ` Jason Gunthorpe via iommu
2022-01-07 1:19 ` Jason Gunthorpe
2022-02-14 11:39 ` Joerg Roedel
2022-02-14 11:39 ` Joerg Roedel
2022-02-14 13:03 ` Jason Gunthorpe via iommu
2022-02-14 13:03 ` Jason Gunthorpe
2022-02-14 14:39 ` Joerg Roedel
2022-02-14 14:39 ` Joerg Roedel
2022-02-14 15:18 ` Robin Murphy
2022-02-14 15:18 ` Robin Murphy
2022-02-14 15:46 ` Jason Gunthorpe via iommu
2022-02-14 15:46 ` Jason Gunthorpe
2022-02-15 8:58 ` Joerg Roedel
2022-02-15 8:58 ` Joerg Roedel
2022-02-15 13:47 ` Jason Gunthorpe via iommu
2022-02-15 13:47 ` Jason Gunthorpe
2022-02-16 6:28 ` Lu Baolu
2022-02-16 6:28 ` Lu Baolu
2022-02-16 13:54 ` Jason Gunthorpe via iommu
2022-02-16 13:54 ` Jason Gunthorpe
2022-01-06 2:20 ` [PATCH v1 4/8] drm/tegra: Use iommu_attach/detatch_device() Lu Baolu
2022-01-06 2:20 ` Lu Baolu
2022-01-06 2:20 ` [PATCH v1 5/8] iommu/amd: Use iommu_attach/detach_device() Lu Baolu
2022-01-06 2:20 ` Lu Baolu
2022-01-06 14:33 ` Jason Gunthorpe via iommu
2022-01-06 14:33 ` Jason Gunthorpe
2022-01-07 0:23 ` Lu Baolu
2022-01-07 0:23 ` Lu Baolu
2022-02-14 11:27 ` Joerg Roedel
2022-02-14 11:27 ` Joerg Roedel
2022-02-14 13:15 ` Jason Gunthorpe via iommu
2022-02-14 13:15 ` Jason Gunthorpe
2022-02-14 13:40 ` Joerg Roedel
2022-02-14 13:40 ` Joerg Roedel
2022-02-14 14:02 ` Jason Gunthorpe via iommu
2022-02-14 14:02 ` Jason Gunthorpe
2022-02-14 14:23 ` Joerg Roedel
2022-02-14 14:23 ` Joerg Roedel
2022-02-14 15:00 ` Jason Gunthorpe via iommu
2022-02-14 15:00 ` Jason Gunthorpe
2022-02-15 9:11 ` Joerg Roedel
2022-02-15 9:11 ` Joerg Roedel
2022-02-15 13:02 ` Robin Murphy
2022-02-15 13:02 ` Robin Murphy
2022-02-15 14:37 ` Jason Gunthorpe via iommu
2022-02-15 14:37 ` Jason Gunthorpe
2022-01-06 2:20 ` [PATCH v1 6/8] gpu/host1x: " Lu Baolu
2022-01-06 2:20 ` Lu Baolu
2022-01-06 15:35 ` Jason Gunthorpe via iommu
2022-01-06 15:35 ` Jason Gunthorpe
2022-01-07 0:35 ` Lu Baolu
2022-01-07 0:35 ` Lu Baolu
2022-01-07 0:48 ` Jason Gunthorpe via iommu
2022-01-07 0:48 ` Jason Gunthorpe
2022-01-07 1:19 ` Lu Baolu
2022-01-07 1:19 ` Lu Baolu
2022-01-06 2:20 ` [PATCH v1 7/8] media: staging: media: tegra-vde: " Lu Baolu
2022-01-06 2:20 ` Lu Baolu
2022-01-06 2:20 ` [PATCH v1 8/8] iommu: Remove iommu_attach/detach_group() Lu Baolu
2022-01-06 2:20 ` Lu Baolu
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=20220214172552.GG4160@nvidia.com \
--to=iommu@lists.linux-foundation.org \
--cc=airlied@linux.ie \
--cc=alex.williamson@redhat.com \
--cc=ashok.raj@intel.com \
--cc=bhelgaas@google.com \
--cc=cohuck@redhat.com \
--cc=dan.j.williams@intel.com \
--cc=daniel@ffwll.ch \
--cc=diana.craciun@oss.nxp.com \
--cc=digetx@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=hch@infradead.org \
--cc=jacob.jun.pan@intel.com \
--cc=jgg@nvidia.com \
--cc=jonathanh@nvidia.com \
--cc=kch@nvidia.com \
--cc=kevin.tian@intel.com \
--cc=kvm@vger.kernel.org \
--cc=leoyang.li@nxp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=rafael@kernel.org \
--cc=robin.murphy@arm.com \
--cc=stuyoder@gmail.com \
--cc=thierry.reding@gmail.com \
--cc=will@kernel.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.