The Linux Kernel Mailing List
 help / color / mirror / Atom feed
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);

      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