From: Jacob Pan <jacob.pan@linux.microsoft.com>
To: Alex Williamson <alex@shazbot.org>
Cc: Jason Gunthorpe <jgg@nvidia.com>,
linux-kernel@vger.kernel.org,
"iommu@lists.linux.dev" <iommu@lists.linux.dev>,
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>,
"Tian, Kevin" <kevin.tian@intel.com>, Yi Liu <yi.l.liu@intel.com>,
Baolu Lu <baolu.lu@linux.intel.com>,
Saurabh Sengar <ssengar@linux.microsoft.com>,
skhawaja@google.com, pasha.tatashin@soleen.com,
Will Deacon <will@kernel.org>,
jacob.pan@linux.microsoft.com
Subject: Re: [PATCH v10 0/6] iommufd: Enable noiommu mode for cdev
Date: Tue, 7 Jul 2026 11:44:52 -0700 [thread overview]
Message-ID: <20260707114452.00003517@linux.microsoft.com> (raw)
In-Reply-To: <20260706155124.15b2456c@shazbot.org>
Hi Alex,
On Mon, 6 Jul 2026 15:51:24 -0600
Alex Williamson <alex@shazbot.org> wrote:
> On Mon, 6 Jul 2026 16:54:03 -0300
> Jason Gunthorpe <jgg@nvidia.com> wrote:
>
> > On Mon, Jul 06, 2026 at 11:48:28AM -0700, Jacob Pan wrote:
> > > VFIO's unsafe_noiommu_mode has long provided a way for userspace
> > > drivers to operate on platforms lacking a hardware IOMMU. Today,
> > > IOMMUFD also supports No-IOMMU mode for group-based devices under
> > > vfio_compat mode. However, IOMMUFD's native character device
> > > (cdev) does not yet support No-IOMMU mode, which is the purpose
> > > of this patch.
> > >
> > > In summary, we have:
> > >
> > > |-------------------------+------+---------------|
> > > | Device access mode | VFIO | IOMMUFD |
> > > |-------------------------+------+---------------|
> > > | group /dev/vfio/$GROUP | Yes | Yes |
> > > |-------------------------+------+---------------|
> > > | cdev /dev/vfio/devices/ | No | This patch |
> > > |-------------------------+------+---------------|
> > >
> > > Beyond enabling cdev for IOMMUFD, this patch also addresses the
> > > following deficiencies in the current No-IOMMU mode suggested by
> > > Jason[1]:
> > > - Devices operating under No-IOMMU mode are limited to
> > > device-level UAPI access, without container or IOAS-level
> > > capabilities. Consequently, user-space drivers lack structured
> > > mechanisms for page pinning and often resort to mlock(), which is
> > > less robust than pin_user_pages() used for devices backed by a
> > > physical IOMMU. For example, mlock() does not prevent page
> > > migration.
> > > - There is no architectural mechanism for obtaining physical
> > > addresses for DMA. As a workaround, user-space drivers frequently
> > > rely on /proc/pagemap tricks or hardcoded values.
> > >
> > > By allowing noiommu device access to IOMMUFD IOAS and HWPT
> > > objects, this patch brings No-IOMMU mode closer to full
> > > citizenship within the IOMMU subsystem. In addition to addressing
> > > the two deficiencies mentioned above, the expectation is that it
> > > will also enable No-IOMMU devices to seamlessly participate in
> > > live update sessions via KHO [2].
> > >
> > > Furthermore, these devices will use the IOMMUFD-based ownership
> > > checking model for VFIO_DEVICE_PCI_HOT_RESET, eliminating the
> > > need for an iommufd_access object as required in a previous
> > > attempt [3].
> > >
> > > ChangeLog:
> > > v10:
> > > - Rebased to v7.2-rc2, no intended code change
> >
> > My impression is we are good on this now, right? I would like to
> > pick it up?
>
> There are a couple Sashiko findings. The PAGE_SIZE issue seems like a
> false positive. The AMD based page tables necessarily expose 4K, but
> pinning is obviously at PAGE_SIZE, so returning multiples of PAGE_SIZE
> is arguably correct.
>
> The PASID issue seems more like a uAPI hygiene question, and it might
> be the correct answer to return error for values other than
> IOMMU_NO_PASID. Your call.
>
> Fine otherwise from a vfio perspective. Thanks,
>
> Alex
I agree this is worth rejecting explicitly.
No-IOMMU only supports allocating paging domain and cannot allocate a
PASID-capable domain. The practical path I found is
VFIO_DEVICE_ATTACH_IOMMUFD_PT with VFIO_DEVICE_ATTACH_PASID set, where
userspace supplies the PASID at attach time.
Jason, I tested the change below. If you are okay with it, could you fold it
in? Otherwise I can spin v11.
Date: Tue, 7 Jul 2026 11:33:26 -0700 Subject: [PATCH]
iommufd: Validate HWPT compatibility before noiommu attach
Fixes: 2c6cf6ab1564 ("iommufd: Allow binding to a noiommu device")
Signed-off-by: Jacob Pan <jacob.pan@linux.microsoft.com>
---
drivers/iommu/iommufd/device.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/iommu/iommufd/device.c b/drivers/iommu/iommufd/device.c
index d7060b3b4676..c230ab8dc8f5 100644
--- a/drivers/iommu/iommufd/device.c
+++ b/drivers/iommu/iommufd/device.c
@@ -574,9 +574,6 @@ static int iommufd_hwpt_attach_device(struct iommufd_hw_pagetable *hwpt,
struct iommufd_attach_handle *handle;
int rc;
- if (iommufd_device_is_noiommu(idev))
- return 0;
-
if (!iommufd_hwpt_compatible_device(hwpt, idev))
return -EINVAL;
@@ -584,6 +581,9 @@ static int iommufd_hwpt_attach_device(struct iommufd_hw_pagetable *hwpt,
if (rc)
return rc;
+ if (iommufd_device_is_noiommu(idev))
+ return 0;
+
handle = kzalloc_obj(*handle);
if (!handle)
return -ENOMEM;
@@ -645,9 +645,6 @@ static int iommufd_hwpt_replace_device(struct iommufd_device *idev,
struct iommufd_attach_handle *handle, *old_handle;
int rc;
- if (iommufd_device_is_noiommu(idev))
- return 0;
-
if (!iommufd_hwpt_compatible_device(hwpt, idev))
return -EINVAL;
@@ -655,6 +652,9 @@ static int iommufd_hwpt_replace_device(struct iommufd_device *idev,
if (rc)
return rc;
+ if (iommufd_device_is_noiommu(idev))
+ return 0;
+
old_handle = iommufd_device_get_attach_handle(idev, pasid);
handle = kzalloc_obj(*handle);
prev parent reply other threads:[~2026-07-07 18:44 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-06 18:48 [PATCH v10 0/6] iommufd: Enable noiommu mode for cdev Jacob Pan
2026-07-06 18:48 ` [PATCH v10 1/6] iommufd: Support a HWPT without an iommu driver for noiommu Jacob Pan
2026-07-06 18:48 ` [PATCH v10 2/6] iommufd: Move igroup allocation to a function Jacob Pan
2026-07-07 20:21 ` Pranjal Shrivastava
2026-07-06 18:48 ` [PATCH v10 3/6] iommufd: Allow binding to a noiommu device Jacob Pan
2026-07-06 18:48 ` [PATCH v10 4/6] iommufd: Add an ioctl to query PA from IOVA for noiommu mode Jacob Pan
2026-07-06 18:48 ` [PATCH v10 5/6] vfio: Enable cdev noiommu mode under iommufd Jacob Pan
2026-07-06 18:48 ` [PATCH v10 6/6] Documentation: Update VFIO NOIOMMU mode Jacob Pan
2026-07-06 21:47 ` Alex Williamson
2026-07-06 19:54 ` [PATCH v10 0/6] iommufd: Enable noiommu mode for cdev Jason Gunthorpe
2026-07-06 21:51 ` Alex Williamson
2026-07-07 18:44 ` Jacob Pan [this message]
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=20260707114452.00003517@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=ssengar@linux.microsoft.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox