From: Jason Gunthorpe <jgg@nvidia.com>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: Christoph Hellwig <hch@lst.de>,
Diana Craciun <diana.craciun@oss.nxp.com>,
Cornelia Huck <cohuck@redhat.com>,
Kirti Wankhede <kwankhede@nvidia.com>,
Eric Auger <eric.auger@redhat.com>,
kvm@vger.kernel.org
Subject: Re: [PATCH 04/14] vfio: factor out a vfio_group_find_or_alloc helper
Date: Thu, 26 Aug 2021 20:35:58 -0300 [thread overview]
Message-ID: <20210826233558.GT1721383@nvidia.com> (raw)
In-Reply-To: <20210826135413.239e6d4e.alex.williamson@redhat.com>
On Thu, Aug 26, 2021 at 01:54:13PM -0600, Alex Williamson wrote:
> On Thu, 26 Aug 2021 15:34:14 +0200
> Christoph Hellwig <hch@lst.de> wrote:
>
> > Factor out a helper to find or allocate the vfio_group to reduce the
> > spagetthi code in vfio_register_group_dev a little.
> >
> > Signed-off-by: Christoph Hellwig <hch@lst.de>
> > Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
> > drivers/vfio/vfio.c | 59 ++++++++++++++++++++++++++-------------------
> > 1 file changed, 34 insertions(+), 25 deletions(-)
> >
> > diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c
> > index 18e4c7906d1b3f..852fe22125520d 100644
> > +++ b/drivers/vfio/vfio.c
> > @@ -823,10 +823,38 @@ void vfio_uninit_group_dev(struct vfio_device *device)
> > }
> > EXPORT_SYMBOL_GPL(vfio_uninit_group_dev);
> >
> > +struct vfio_group *vfio_group_find_or_alloc(struct device *dev)
> > +{
> > + struct iommu_group *iommu_group;
> > + struct vfio_group *group;
> > +
> > + iommu_group = vfio_iommu_group_get(dev);
> > + if (!iommu_group)
> > + return ERR_PTR(-EINVAL);
> > +
> > + /* a found vfio_group already holds a reference to the iommu_group */
> > + group = vfio_group_get_from_iommu(iommu_group);
> > + if (group)
> > + goto out_put;
> > +
> > + /* a newly created vfio_group keeps the reference. */
> > + group = vfio_create_group(iommu_group);
> > + if (IS_ERR(group))
> > + goto out_put;
> > + return group;
> > +
> > +out_put:
> > +#ifdef CONFIG_VFIO_NOIOMMU
> > + if (iommu_group_get_iommudata(iommu_group) == &noiommu)
> > + iommu_group_remove_device(dev);
> > +#endif
>
> When we get here via the first goto above, it doesn't match the code
> we're removing below.
If we are in noiommu mode then the group is a new singleton group and
vfio_group_get_from_iommu() cannot succeed, so the out_put cannot
trigger for the noiommu path.
This is all improved in patch 6 where the logic becomes clear:
+ iommu_group = iommu_group_get(dev);
+#ifdef CONFIG_VFIO_NOIOMMU
+ if (!iommu_group && noiommu && !iommu_present(dev->bus)) {
+ /*
+ * With noiommu enabled, create an IOMMU group for devices that
+ * don't already have one and don't have an iommu_ops on their
+ * bus. Taint the kernel because we're about to give a DMA
+ * capable device to a user without IOMMU protection.
+ */
+ group = vfio_noiommu_group_alloc(dev);
+ if (group) {
+ add_taint(TAINT_USER, LOCKDEP_STILL_OK);
+ dev_warn(dev, "Adding kernel taint for vfio-noiommu group on device\n");
+ }
+ return group;
Eg we never do a pointless vfio_group_get_from_iommu() on a no-iommu
group in the first place, we just create everything directly.
It would be fine to add an extra label and then remove it in patch 6,
but it is also fine this way and properly cleaned by the end.
Jason
next prev parent reply other threads:[~2021-08-26 23:36 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-26 13:34 cleanup vfio iommu_group creation v4 Christoph Hellwig
2021-08-26 13:34 ` [PATCH 01/14] vfio: Move vfio_iommu_group_get() to vfio_register_group_dev() Christoph Hellwig
2021-08-27 2:02 ` Tian, Kevin
2021-08-26 13:34 ` [PATCH 02/14] vfio: factor out a vfio_iommu_driver_allowed helper Christoph Hellwig
2021-08-26 13:34 ` [PATCH 03/14] vfio: remove the iommudata check in vfio_noiommu_attach_group Christoph Hellwig
2021-08-26 13:34 ` [PATCH 04/14] vfio: factor out a vfio_group_find_or_alloc helper Christoph Hellwig
2021-08-26 19:54 ` Alex Williamson
2021-08-26 23:35 ` Jason Gunthorpe [this message]
2021-08-27 2:07 ` Tian, Kevin
2021-08-27 14:35 ` Alex Williamson
2021-08-26 13:34 ` [PATCH 05/14] vfio: refactor noiommu group creation Christoph Hellwig
2021-08-26 22:47 ` Alex Williamson
2021-08-27 2:08 ` Tian, Kevin
2021-08-26 13:34 ` [PATCH 06/14] vfio: remove the iommudata hack for noiommu groups Christoph Hellwig
2021-08-26 13:34 ` [PATCH 07/14] vfio: simplify iommu group allocation for mediated devices Christoph Hellwig
2021-08-26 17:24 ` Alex Williamson
2021-08-26 22:59 ` Alex Williamson
2021-08-27 2:17 ` Tian, Kevin
2021-08-27 5:42 ` Christoph Hellwig
2021-08-26 13:34 ` [PATCH 08/14] vfio: remove unused method from vfio_iommu_driver_ops Christoph Hellwig
2021-08-26 13:34 ` [PATCH 09/14] vfio: move the vfio_iommu_driver_ops interface out of <linux/vfio.h> Christoph Hellwig
2021-08-26 13:34 ` [PATCH 10/14] vfio: remove the unused mdev iommu hook Christoph Hellwig
2021-08-26 13:34 ` [PATCH 11/14] vfio: clean up the check for mediated device in vfio_iommu_type1 Christoph Hellwig
2021-08-26 13:34 ` [PATCH 12/14] vfio/spapr_tce: reject mediated devices Christoph Hellwig
2021-08-26 13:34 ` [PATCH 13/14] vfio/iommu_type1: remove the "external" domain Christoph Hellwig
2021-08-26 23:08 ` Alex Williamson
2021-08-26 13:34 ` [PATCH 14/14] vfio/iommu_type1: remove IS_IOMMU_CAP_DOMAIN_IN_CONTAINER Christoph Hellwig
2021-08-31 15:26 ` cleanup vfio iommu_group creation v4 Xu, Terrence
-- strict thread matches above, loose matches on Subject: below --
2021-09-13 7:15 cleanup vfio iommu_group creation v5 Christoph Hellwig
2021-09-13 7:15 ` [PATCH 04/14] vfio: factor out a vfio_group_find_or_alloc helper Christoph Hellwig
2021-09-14 2:00 ` Tian, Kevin
2021-08-25 16:19 cleanup vfio iommu_group creation v3 Christoph Hellwig
2021-08-25 16:19 ` [PATCH 04/14] vfio: factor out a vfio_group_find_or_alloc helper Christoph Hellwig
2021-08-25 22:26 ` Jason Gunthorpe
2021-08-26 2:21 ` Tian, Kevin
2021-08-24 14:46 cleanup vfio iommu_group creation v2 Christoph Hellwig
2021-08-24 14:46 ` [PATCH 04/14] vfio: factor out a vfio_group_find_or_alloc helper Christoph Hellwig
2021-08-24 23:40 ` Jason Gunthorpe
2021-08-25 5:30 ` Christoph Hellwig
2021-08-11 15:14 cleanup vfio iommu_group creation Christoph Hellwig
2021-08-11 15:14 ` [PATCH 04/14] vfio: factor out a vfio_group_find_or_alloc helper Christoph Hellwig
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=20210826233558.GT1721383@nvidia.com \
--to=jgg@nvidia.com \
--cc=alex.williamson@redhat.com \
--cc=cohuck@redhat.com \
--cc=diana.craciun@oss.nxp.com \
--cc=eric.auger@redhat.com \
--cc=hch@lst.de \
--cc=kvm@vger.kernel.org \
--cc=kwankhede@nvidia.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox