From: Jacob Pan <jacob.pan@linux.microsoft.com>
To: "Tian, Kevin" <kevin.tian@intel.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"iommu@lists.linux.dev" <iommu@lists.linux.dev>,
Jason Gunthorpe <jgg@nvidia.com>,
Alex Williamson <alex@shazbot.org>,
Joerg Roedel <joro@8bytes.org>,
Mostafa Saleh <smostafa@google.com>,
David Matlack <dmatlack@google.com>,
Robin Murphy <robin.murphy@arm.com>,
Nicolin Chen <nicolinc@nvidia.com>,
"Liu, Yi L" <yi.l.liu@intel.com>,
"skhawaja@google.com" <skhawaja@google.com>,
"pasha.tatashin@soleen.com" <pasha.tatashin@soleen.com>,
Will Deacon <will@kernel.org>,
Baolu Lu <baolu.lu@linux.intel.com>,
jacob.pan@linux.microsoft.com
Subject: Re: [PATCH V4 03/10] iommufd: Allow binding to a noiommu device
Date: Tue, 5 May 2026 16:04:24 -0700 [thread overview]
Message-ID: <20260505160424.00007dca@linux.microsoft.com> (raw)
In-Reply-To: <BL1PR11MB5271870197CCDF631EDD00DA8C232@BL1PR11MB5271.namprd11.prod.outlook.com>
Hi Kevin,
On Thu, 16 Apr 2026 07:56:55 +0000
"Tian, Kevin" <kevin.tian@intel.com> wrote:
> > From: Jacob Pan <jacob.pan@linux.microsoft.com>
> > Sent: Wednesday, April 15, 2026 5:14 AM
> >
> > +static bool is_vfio_noiommu(struct iommufd_device *idev)
> > +{
> > + return !device_iommu_mapped(idev->dev) ||
> > !idev->dev->iommu; +}
> > +
>
> could you add some words why both conditions are checked? It's not
> obvious to me.
>
> btw there is no need to add "_vfio_" in the name.
Actually, I think the first check is not needed. group can be NULL if
no containers selected nor VFIO_GROUP is set.
I will change it to
+/*
+ * A noiommu device has no IOMMU driver attached regardless of whether it
+ * enters via the cdev path (no iommu_group) or the group path (fake
+ * noiommu iommu_group). In both cases dev->iommu is NULL.
+ */
+static bool iommufd_device_is_noiommu(struct iommufd_device *idev)
+{
+ return !idev->dev->iommu;
+}
>
> > @@ -238,11 +232,11 @@ struct iommufd_device
> > *iommufd_device_bind(struct iommufd_ctx *ictx,
> > * to restore cache coherency.
> > */
> > if (!device_iommu_capable(dev, IOMMU_CAP_CACHE_COHERENCY))
> > - return ERR_PTR(-EINVAL);
> > + return -EINVAL;
> >
> > - igroup = iommufd_get_group(ictx, dev);
> > + igroup = iommufd_get_group(idev->ictx, dev);
>
> pointless change.
will fix.
> > +struct iommufd_device *iommufd_device_bind(struct iommufd_ctx
> > *ictx,
> > + struct device *dev, u32
> > *id) +{
> > + struct iommufd_device *idev;
> > + int rc;
> > +
> > idev = iommufd_object_alloc(ictx, idev,
> > IOMMUFD_OBJ_DEVICE);
> > - if (IS_ERR(idev)) {
> > - rc = PTR_ERR(idev);
> > - goto out_release_owner;
> > - }
> > + if (IS_ERR(idev))
> > + return idev;
> > +
> > idev->ictx = ictx;
> > - if (!iommufd_selftest_is_mock_dev(dev))
> > - iommufd_ctx_get(ictx);
> > idev->dev = dev;
> > idev->enforce_cache_coherency =
> > device_iommu_capable(dev,
> > IOMMU_CAP_ENFORCE_CACHE_COHERENCY);
> > +
> > + if (!is_vfio_noiommu(idev)) {
> > + rc = iommufd_bind_iommu(idev);
> > + if (rc)
> > + goto err_out;
> > + } else {
> > + struct iommufd_group *igroup;
> > +
> > + /*
> > + * Create a dummy igroup, lots of stuff expects
> > ths igroup to be
> > + * present, but a NULL igroup->group is OK
> > + */
> > + igroup = iommufd_alloc_group(ictx, NULL);
> > + if (IS_ERR(igroup)) {
> > + rc = PTR_ERR(igroup);
> > + goto err_out;
> > + }
> > + idev->igroup = igroup;
>
> though simple it's slightly clearer to move them into a wrapper e.g.
> iommufd_bind_dummy_iommu().
will move to a helper:
static int iommufd_bind_noiommu(struct iommufd_device *idev)
{
struct iommufd_group *igroup;
igroup = iommufd_alloc_group(idev->ictx, NULL);
if (IS_ERR(igroup))
return PTR_ERR(igroup);
idev->igroup = igroup;
return 0;
}
> > + }
> > +
> > + if (!iommufd_selftest_is_mock_dev(dev))
> > + iommufd_ctx_get(ictx);
>
> better add a comment for the ordering here - this must be done
> here otherwise iommufd_device_destroy() will have a problem
> to handle partial initialization.
>
will do.
> > /* The calling driver is a user until
> > iommufd_device_unbind() */ refcount_inc(&idev->obj.users);
> > - /* igroup refcount moves into iommufd_device */
> > - idev->igroup = igroup;
>
> this is common, why not leaving it here?
I think it is just easier to assign in each helper function where
igroup is allocated/get.
As you suggested above, iommufd_bind_noiommu(struct iommufd_device
*idev)
next prev parent reply other threads:[~2026-05-05 23:04 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-14 21:14 [PATCH V4 00/10] iommufd: Enable noiommu mode for cdev Jacob Pan
2026-04-14 21:14 ` [PATCH V4 01/10] iommufd: Support a HWPT without an iommu driver for noiommu Jacob Pan
2026-04-16 7:25 ` Tian, Kevin
2026-04-17 21:59 ` Jacob Pan
2026-04-22 8:12 ` Tian, Kevin
2026-04-22 16:03 ` Jason Gunthorpe
2026-04-23 7:26 ` Tian, Kevin
2026-04-23 14:51 ` Jason Gunthorpe
2026-04-24 6:31 ` Tian, Kevin
2026-04-28 7:45 ` Yi Liu
2026-04-28 16:42 ` Jacob Pan
2026-04-14 21:14 ` [PATCH V4 02/10] iommufd: Move igroup allocation to a function Jacob Pan
2026-04-16 7:48 ` Tian, Kevin
2026-05-05 21:32 ` Jacob Pan
2026-04-28 7:45 ` Yi Liu
2026-04-14 21:14 ` [PATCH V4 03/10] iommufd: Allow binding to a noiommu device Jacob Pan
2026-04-16 7:56 ` Tian, Kevin
2026-05-05 23:04 ` Jacob Pan [this message]
2026-04-28 7:45 ` Yi Liu
2026-05-06 18:51 ` Jacob Pan
2026-04-14 21:14 ` [PATCH V4 04/10] iommufd: Add an ioctl IOMMU_IOAS_GET_PA to query PA from IOVA Jacob Pan
2026-04-16 8:02 ` Tian, Kevin
2026-05-04 23:03 ` Jacob Pan
2026-04-16 19:32 ` Alex Williamson
2026-05-04 22:30 ` Jacob Pan
2026-04-14 21:14 ` [PATCH V4 05/10] vfio: Allow null group for noiommu without containers Jacob Pan
2026-04-16 8:13 ` Tian, Kevin
2026-04-16 21:33 ` Jacob Pan
2026-04-16 20:06 ` Alex Williamson
2026-04-17 17:06 ` Jacob Pan
2026-04-17 23:04 ` Alex Williamson
2026-04-14 21:14 ` [PATCH V4 06/10] vfio: Introduce and set noiommu flag on vfio_device Jacob Pan
2026-04-14 21:14 ` [PATCH V4 07/10] vfio: Enable cdev noiommu mode under iommufd Jacob Pan
2026-04-16 20:49 ` Alex Williamson
2026-04-30 23:31 ` Jacob Pan
2026-04-14 21:14 ` [PATCH V4 08/10] vfio:selftest: Handle VFIO noiommu cdev Jacob Pan
2026-04-14 21:14 ` [PATCH V4 09/10] selftests/vfio: Add iommufd noiommu mode selftest for cdev Jacob Pan
2026-04-14 21:14 ` [PATCH V4 10/10] Documentation: Update VFIO NOIOMMU mode Jacob Pan
2026-04-28 7:46 ` Yi Liu
2026-04-30 23:41 ` Jacob Pan
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=20260505160424.00007dca@linux.microsoft.com \
--to=jacob.pan@linux.microsoft.com \
--cc=alex@shazbot.org \
--cc=baolu.lu@linux.intel.com \
--cc=dmatlack@google.com \
--cc=iommu@lists.linux.dev \
--cc=jgg@nvidia.com \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=nicolinc@nvidia.com \
--cc=pasha.tatashin@soleen.com \
--cc=robin.murphy@arm.com \
--cc=skhawaja@google.com \
--cc=smostafa@google.com \
--cc=will@kernel.org \
--cc=yi.l.liu@intel.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 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.