virtualization.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
From: Baolu Lu <baolu.lu@linux.intel.com>
To: Jason Gunthorpe <jgg@ziepe.ca>
Cc: baolu.lu@linux.intel.com, Kevin Tian <kevin.tian@intel.com>,
	Joerg Roedel <joro@8bytes.org>, Will Deacon <will@kernel.org>,
	Robin Murphy <robin.murphy@arm.com>,
	Jean-Philippe Brucker <jean-philippe@linaro.org>,
	Nicolin Chen <nicolinc@nvidia.com>, Yi Liu <yi.l.liu@intel.com>,
	Jacob Pan <jacob.jun.pan@linux.intel.com>,
	Joel Granados <j.granados@samsung.com>,
	iommu@lists.linux.dev, virtualization@lists.linux-foundation.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v6 03/10] iommu: Add attach handle to struct iopf_group
Date: Thu, 13 Jun 2024 12:23:17 +0800	[thread overview]
Message-ID: <013afe9a-756f-4c85-baa1-977bea6be395@linux.intel.com> (raw)
In-Reply-To: <20240612133732.GW791043@ziepe.ca>

On 6/12/24 9:37 PM, Jason Gunthorpe wrote:
> On Mon, May 27, 2024 at 12:05:10PM +0800, Lu Baolu wrote:
>> @@ -206,20 +182,49 @@ void iommu_report_device_fault(struct device *dev, struct iopf_fault *evt)
>>   	if (group == &abort_group)
>>   		goto err_abort;
>>   
>> -	group->domain = get_domain_for_iopf(dev, fault);
>> -	if (!group->domain)
>> +	if (fault->prm.flags & IOMMU_FAULT_PAGE_REQUEST_PASID_VALID) {
>> +		group->attach_handle = iommu_attach_handle_get(dev->iommu_group,
>> +							       fault->prm.pasid,
>> +							       0);
>> +		if (IS_ERR(group->attach_handle)) {
>> +			if (!device_iommu_capable(dev, IOMMU_CAP_USER_IOASID_TABLE))
>> +				goto err_abort;
> 
> I'm not excited about calling a function pointer on every fault. Let's
> just add a constant flag to iommu_ops?

Yes, it's reasonable given this is a critical path. How about below
additional change?

diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index 16b3a2da91ef..69ea4d0374b9 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -253,12 +253,6 @@ enum iommu_cap {
          */
         IOMMU_CAP_DEFERRED_FLUSH,
         IOMMU_CAP_DIRTY_TRACKING,       /* IOMMU supports dirty tracking */
-       /*
-        * IOMMU driver supports user-managed IOASID table. There is no
-        * user domain for each PASID and the I/O page faults are forwarded
-        * through the user domain attached to the device RID.
-        */
-       IOMMU_CAP_USER_IOASID_TABLE,
  };

  /* These are the possible reserved region types */
@@ -557,6 +551,10 @@ static inline int __iommu_copy_struct_from_user_array(
   * @default_domain: If not NULL this will always be set as the default 
domain.
   *                  This should be an IDENTITY/BLOCKED/PLATFORM domain.
   *                  Do not use in new drivers.
+ * @user_pasid_table: IOMMU driver supports user-managed PASID table. 
There is
+ *                    no user domain for each PASID and the I/O page 
faults are
+ *                    forwarded through the user domain attached to the 
device
+ *                    RID.
   */
  struct iommu_ops {
         bool (*capable)(struct device *dev, enum iommu_cap);
@@ -600,6 +598,7 @@ struct iommu_ops {
         struct iommu_domain *blocked_domain;
         struct iommu_domain *release_domain;
         struct iommu_domain *default_domain;
+       bool user_pasid_table;
  };

  /**
diff --git a/drivers/iommu/io-pgfault.c b/drivers/iommu/io-pgfault.c
index a629d8a93614..cd679c13752e 100644
--- a/drivers/iommu/io-pgfault.c
+++ b/drivers/iommu/io-pgfault.c
@@ -189,7 +189,9 @@ void iommu_report_device_fault(struct device *dev, 
struct iopf_fault *evt)
 
fault->prm.pasid,
                                                                0);
                 if (IS_ERR(group->attach_handle)) {
-                       if (!device_iommu_capable(dev, 
IOMMU_CAP_USER_IOASID_TABLE))
+                       const struct iommu_ops *ops = dev_iommu_ops(dev);
+
+                       if (!ops->user_pasid_table)
                                 goto err_abort;

Best regards,
baolu

  reply	other threads:[~2024-06-13  4:25 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-27  4:05 [PATCH v6 00/10] IOMMUFD: Deliver IO page faults to user space Lu Baolu
2024-05-27  4:05 ` [PATCH v6 01/10] iommu: Introduce domain attachment handle Lu Baolu
2024-06-05  8:02   ` Tian, Kevin
2024-06-06  5:33     ` Baolu Lu
2024-06-12 13:10       ` Jason Gunthorpe
2024-06-13  3:04         ` Baolu Lu
2024-05-27  4:05 ` [PATCH v6 02/10] iommu: Remove sva handle list Lu Baolu
2024-06-05  8:15   ` Tian, Kevin
2024-06-06  6:06     ` Baolu Lu
2024-06-07  9:35       ` Tian, Kevin
2024-06-12 13:05         ` Jason Gunthorpe
2024-06-13  4:06           ` Baolu Lu
2024-05-27  4:05 ` [PATCH v6 03/10] iommu: Add attach handle to struct iopf_group Lu Baolu
2024-06-05  8:23   ` Tian, Kevin
2024-06-06  6:18     ` Baolu Lu
2024-06-12 13:37   ` Jason Gunthorpe
2024-06-13  4:23     ` Baolu Lu [this message]
2024-06-13 11:49       ` Jason Gunthorpe
2024-06-14  1:16         ` Baolu Lu
2024-05-27  4:05 ` [PATCH v6 04/10] iommu: Extend domain attach group with handle support Lu Baolu
2024-06-12 13:41   ` Jason Gunthorpe
2024-06-13  4:47     ` Baolu Lu
2024-05-27  4:05 ` [PATCH v6 05/10] iommufd: Add fault and response message definitions Lu Baolu
2024-06-05  8:28   ` Tian, Kevin
2024-06-06  6:27     ` Baolu Lu
2024-06-07  9:38       ` Tian, Kevin
2024-06-12 13:19         ` Jason Gunthorpe
2024-06-12 13:50           ` Jason Gunthorpe
2024-06-13  6:32             ` Baolu Lu
2024-06-13  4:54           ` Baolu Lu
2024-06-12 13:52   ` Jason Gunthorpe
2024-06-13  6:40     ` Baolu Lu
2024-05-27  4:05 ` [PATCH v6 06/10] iommufd: Add iommufd fault object Lu Baolu
2024-06-07  9:17   ` Tian, Kevin
2024-06-08  9:58     ` Baolu Lu
2024-06-12 13:25       ` Jason Gunthorpe
2024-06-13  6:44         ` Baolu Lu
2024-06-12 13:23     ` Jason Gunthorpe
2024-06-17  7:32       ` Tian, Kevin
2024-05-27  4:05 ` [PATCH v6 07/10] iommufd: Fault-capable hwpt attach/detach/replace Lu Baolu
2024-06-07  9:30   ` Tian, Kevin
2024-06-09  7:23     ` Baolu Lu
2024-06-17  7:37       ` Tian, Kevin
2024-05-27  4:05 ` [PATCH v6 08/10] iommufd: Associate fault object with iommufd_hw_pgtable Lu Baolu
2024-06-07  9:30   ` Tian, Kevin
2024-05-27  4:05 ` [PATCH v6 09/10] iommufd/selftest: Add IOPF support for mock device Lu Baolu
2024-05-27  4:05 ` [PATCH v6 10/10] iommufd/selftest: Add coverage for IOPF test Lu Baolu
2024-06-12 13:54 ` [PATCH v6 00/10] IOMMUFD: Deliver IO page faults to user space Jason Gunthorpe
2024-06-13  6:46   ` Baolu Lu

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=013afe9a-756f-4c85-baa1-977bea6be395@linux.intel.com \
    --to=baolu.lu@linux.intel.com \
    --cc=iommu@lists.linux.dev \
    --cc=j.granados@samsung.com \
    --cc=jacob.jun.pan@linux.intel.com \
    --cc=jean-philippe@linaro.org \
    --cc=jgg@ziepe.ca \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nicolinc@nvidia.com \
    --cc=robin.murphy@arm.com \
    --cc=virtualization@lists.linux-foundation.org \
    --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;
as well as URLs for NNTP newsgroup(s).