mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 1/1] iommu/vt-d: Avoid WARNING in sva unbind path
@ 2026-05-19  5:29 Lu Baolu
  2026-05-20  3:57 ` Tian, Kevin
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Lu Baolu @ 2026-05-19  5:29 UTC (permalink / raw)
  To: Joerg Roedel, Will Deacon, Robin Murphy, Kevin Tian
  Cc: iommu, linux-kernel, Lu Baolu, stable, Nareshkumar Gollakoti

The Intel IOMMU driver allows SVA on devices even if they do not support
PCI/PRI. Commit 39c20c4e83b9 ("iommu/vt-d: Only handle IOPF for SVA when
PRI is supported") modified the SVA bind path to allow this configuration
by skipping IOPF enablement when PRI is missing. However, it failed to
update the unbind path.

This creates an imbalance: the unbind path attempts to disable IOPF for
a device that never had it enabled, triggering a WARNING in
intel_iommu_disable_iopf():

 WARNING: drivers/iommu/intel/iommu.c:3475 at intel_iommu_disable_iopf+0x4f/0x90d
 Call Trace:
  <TASK>
  blocking_domain_set_dev_pasid+0x50/0x70
  iommu_detach_device_pasid+0x89/0xc0
  iommu_sva_unbind_device+0x73/0x150
  xe_vm_close_and_put+0x4d2/0x1200 [xe]

Fix this by bypassing IOPF operations for SVA domains on non-PRI hardware
in both the bind and unbind paths.

Fixes: 39c20c4e83b9 ("iommu/vt-d: Only handle IOPF for SVA when PRI is supported")
Cc: stable@vger.kernel.org
Reported-by: Nareshkumar Gollakoti <naresh.kumar.g@intel.com>
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
---
 drivers/iommu/intel/iommu.h | 11 +++++++++++
 drivers/iommu/intel/svm.c   | 12 ++++--------
 2 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/drivers/iommu/intel/iommu.h b/drivers/iommu/intel/iommu.h
index ef145560aa98..775f1c4ae346 100644
--- a/drivers/iommu/intel/iommu.h
+++ b/drivers/iommu/intel/iommu.h
@@ -1254,18 +1254,29 @@ void intel_iommu_disable_iopf(struct device *dev);
 static inline int iopf_for_domain_set(struct iommu_domain *domain,
 				      struct device *dev)
 {
+	struct device_domain_info *info = dev_iommu_priv_get(dev);
+
 	if (!domain || !domain->iopf_handler)
 		return 0;
 
+	/* SVA with non-IOMMU/PRI IOPF handling is allowed. */
+	if (domain->type == IOMMU_DOMAIN_SVA && !info->pri_supported)
+		return 0;
+
 	return intel_iommu_enable_iopf(dev);
 }
 
 static inline void iopf_for_domain_remove(struct iommu_domain *domain,
 					  struct device *dev)
 {
+	struct device_domain_info *info = dev_iommu_priv_get(dev);
+
 	if (!domain || !domain->iopf_handler)
 		return;
 
+	if (domain->type == IOMMU_DOMAIN_SVA && !info->pri_supported)
+		return;
+
 	intel_iommu_disable_iopf(dev);
 }
 
diff --git a/drivers/iommu/intel/svm.c b/drivers/iommu/intel/svm.c
index 57cd1db7207a..fea10acd4f02 100644
--- a/drivers/iommu/intel/svm.c
+++ b/drivers/iommu/intel/svm.c
@@ -164,12 +164,9 @@ static int intel_svm_set_dev_pasid(struct iommu_domain *domain,
 	if (IS_ERR(dev_pasid))
 		return PTR_ERR(dev_pasid);
 
-	/* SVA with non-IOMMU/PRI IOPF handling is allowed. */
-	if (info->pri_supported) {
-		ret = iopf_for_domain_replace(domain, old, dev);
-		if (ret)
-			goto out_remove_dev_pasid;
-	}
+	ret = iopf_for_domain_replace(domain, old, dev);
+	if (ret)
+		goto out_remove_dev_pasid;
 
 	/* Setup the pasid table: */
 	sflags = cpu_feature_enabled(X86_FEATURE_LA57) ? PASID_FLAG_FL5LP : 0;
@@ -184,8 +181,7 @@ static int intel_svm_set_dev_pasid(struct iommu_domain *domain,
 
 	return 0;
 out_unwind_iopf:
-	if (info->pri_supported)
-		iopf_for_domain_replace(old, domain, dev);
+	iopf_for_domain_replace(old, domain, dev);
 out_remove_dev_pasid:
 	domain_remove_dev_pasid(domain, dev, pasid);
 	return ret;
-- 
2.43.0


^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH 1/1] iommu/vt-d: Avoid WARNING in sva unbind path
  2026-05-19  5:29 [PATCH 1/1] iommu/vt-d: Avoid WARNING in sva unbind path Lu Baolu
@ 2026-05-20  3:57 ` Tian, Kevin
  2026-05-20 13:12 ` Yi Liu
  2026-06-01  5:25 ` Baolu Lu
  2 siblings, 0 replies; 5+ messages in thread
From: Tian, Kevin @ 2026-05-20  3:57 UTC (permalink / raw)
  To: Lu Baolu, Joerg Roedel, Will Deacon, Robin Murphy
  Cc: iommu, linux-kernel, stable, Kumar G, Naresh

> From: Lu Baolu <baolu.lu@linux.intel.com>
> Sent: Tuesday, May 19, 2026 1:29 PM
> 
> The Intel IOMMU driver allows SVA on devices even if they do not support
> PCI/PRI. Commit 39c20c4e83b9 ("iommu/vt-d: Only handle IOPF for SVA
> when
> PRI is supported") modified the SVA bind path to allow this configuration
> by skipping IOPF enablement when PRI is missing. However, it failed to
> update the unbind path.
> 
> This creates an imbalance: the unbind path attempts to disable IOPF for
> a device that never had it enabled, triggering a WARNING in
> intel_iommu_disable_iopf():
> 
>  WARNING: drivers/iommu/intel/iommu.c:3475 at
> intel_iommu_disable_iopf+0x4f/0x90d
>  Call Trace:
>   <TASK>
>   blocking_domain_set_dev_pasid+0x50/0x70
>   iommu_detach_device_pasid+0x89/0xc0
>   iommu_sva_unbind_device+0x73/0x150
>   xe_vm_close_and_put+0x4d2/0x1200 [xe]
> 
> Fix this by bypassing IOPF operations for SVA domains on non-PRI hardware
> in both the bind and unbind paths.
> 
> Fixes: 39c20c4e83b9 ("iommu/vt-d: Only handle IOPF for SVA when PRI is
> supported")
> Cc: stable@vger.kernel.org
> Reported-by: Nareshkumar Gollakoti <naresh.kumar.g@intel.com>
> Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>

Reviewed-by: Kevin Tian <kevin.tian@intel.com>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/1] iommu/vt-d: Avoid WARNING in sva unbind path
  2026-05-19  5:29 [PATCH 1/1] iommu/vt-d: Avoid WARNING in sva unbind path Lu Baolu
  2026-05-20  3:57 ` Tian, Kevin
@ 2026-05-20 13:12 ` Yi Liu
  2026-05-21  7:12   ` Baolu Lu
  2026-06-01  5:25 ` Baolu Lu
  2 siblings, 1 reply; 5+ messages in thread
From: Yi Liu @ 2026-05-20 13:12 UTC (permalink / raw)
  To: Lu Baolu, Joerg Roedel, Will Deacon, Robin Murphy, Kevin Tian
  Cc: iommu, linux-kernel, stable, Nareshkumar Gollakoti

On 5/19/26 13:29, Lu Baolu wrote:
> The Intel IOMMU driver allows SVA on devices even if they do not support
> PCI/PRI. Commit 39c20c4e83b9 ("iommu/vt-d: Only handle IOPF for SVA when
> PRI is supported") modified the SVA bind path to allow this configuration
> by skipping IOPF enablement when PRI is missing. However, it failed to
> update the unbind path.
> 
> This creates an imbalance: the unbind path attempts to disable IOPF for
> a device that never had it enabled, triggering a WARNING in
> intel_iommu_disable_iopf():
> 
>   WARNING: drivers/iommu/intel/iommu.c:3475 at intel_iommu_disable_iopf+0x4f/0x90d
>   Call Trace:
>    <TASK>
>    blocking_domain_set_dev_pasid+0x50/0x70
>    iommu_detach_device_pasid+0x89/0xc0
>    iommu_sva_unbind_device+0x73/0x150
>    xe_vm_close_and_put+0x4d2/0x1200 [xe]
> 
> Fix this by bypassing IOPF operations for SVA domains on non-PRI hardware
> in both the bind and unbind paths.
> 
> Fixes: 39c20c4e83b9 ("iommu/vt-d: Only handle IOPF for SVA when PRI is supported")
> Cc: stable@vger.kernel.org
> Reported-by: Nareshkumar Gollakoti <naresh.kumar.g@intel.com>
> Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
> ---
>   drivers/iommu/intel/iommu.h | 11 +++++++++++
>   drivers/iommu/intel/svm.c   | 12 ++++--------
>   2 files changed, 15 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/iommu/intel/iommu.h b/drivers/iommu/intel/iommu.h
> index ef145560aa98..775f1c4ae346 100644
> --- a/drivers/iommu/intel/iommu.h
> +++ b/drivers/iommu/intel/iommu.h
> @@ -1254,18 +1254,29 @@ void intel_iommu_disable_iopf(struct device *dev);
>   static inline int iopf_for_domain_set(struct iommu_domain *domain,
>   				      struct device *dev)
>   {
> +	struct device_domain_info *info = dev_iommu_priv_get(dev);
> +
>   	if (!domain || !domain->iopf_handler)
>   		return 0;
>   
> +	/* SVA with non-IOMMU/PRI IOPF handling is allowed. */
> +	if (domain->type == IOMMU_DOMAIN_SVA && !info->pri_supported)
> +		return 0;
> +

Looked into the history a bit, and this story begins with commit
a86fb7717320 ("iommu/vt-d: Allow SVA with device-specific IOPF"). This
commit enabled devices that support their own IOPF mechanism to use SVA
even when the platform IOMMU doesn't support IOPF.

However, SVA isn't the only fault-capable domain type. Other fault-capable
domain types (e.g., paging domains) should also be able to leverage
device-specific IOPF capabilities.

My question is: can we drop the domain type check to support other types
of fault-capable domains that rely on device-specific IOPF?

Regards,
Yi Liu

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/1] iommu/vt-d: Avoid WARNING in sva unbind path
  2026-05-20 13:12 ` Yi Liu
@ 2026-05-21  7:12   ` Baolu Lu
  0 siblings, 0 replies; 5+ messages in thread
From: Baolu Lu @ 2026-05-21  7:12 UTC (permalink / raw)
  To: Yi Liu, Joerg Roedel, Will Deacon, Robin Murphy, Kevin Tian
  Cc: iommu, linux-kernel, stable, Nareshkumar Gollakoti

On 5/20/26 21:12, Yi Liu wrote:
> On 5/19/26 13:29, Lu Baolu wrote:
>> The Intel IOMMU driver allows SVA on devices even if they do not support
>> PCI/PRI. Commit 39c20c4e83b9 ("iommu/vt-d: Only handle IOPF for SVA when
>> PRI is supported") modified the SVA bind path to allow this configuration
>> by skipping IOPF enablement when PRI is missing. However, it failed to
>> update the unbind path.
>>
>> This creates an imbalance: the unbind path attempts to disable IOPF for
>> a device that never had it enabled, triggering a WARNING in
>> intel_iommu_disable_iopf():
>>
>>   WARNING: drivers/iommu/intel/iommu.c:3475 at 
>> intel_iommu_disable_iopf+0x4f/0x90d
>>   Call Trace:
>>    <TASK>
>>    blocking_domain_set_dev_pasid+0x50/0x70
>>    iommu_detach_device_pasid+0x89/0xc0
>>    iommu_sva_unbind_device+0x73/0x150
>>    xe_vm_close_and_put+0x4d2/0x1200 [xe]
>>
>> Fix this by bypassing IOPF operations for SVA domains on non-PRI hardware
>> in both the bind and unbind paths.
>>
>> Fixes: 39c20c4e83b9 ("iommu/vt-d: Only handle IOPF for SVA when PRI is 
>> supported")
>> Cc: stable@vger.kernel.org
>> Reported-by: Nareshkumar Gollakoti <naresh.kumar.g@intel.com>
>> Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
>> ---
>>   drivers/iommu/intel/iommu.h | 11 +++++++++++
>>   drivers/iommu/intel/svm.c   | 12 ++++--------
>>   2 files changed, 15 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/iommu/intel/iommu.h b/drivers/iommu/intel/iommu.h
>> index ef145560aa98..775f1c4ae346 100644
>> --- a/drivers/iommu/intel/iommu.h
>> +++ b/drivers/iommu/intel/iommu.h
>> @@ -1254,18 +1254,29 @@ void intel_iommu_disable_iopf(struct device 
>> *dev);
>>   static inline int iopf_for_domain_set(struct iommu_domain *domain,
>>                         struct device *dev)
>>   {
>> +    struct device_domain_info *info = dev_iommu_priv_get(dev);
>> +
>>       if (!domain || !domain->iopf_handler)
>>           return 0;
>> +    /* SVA with non-IOMMU/PRI IOPF handling is allowed. */
>> +    if (domain->type == IOMMU_DOMAIN_SVA && !info->pri_supported)
>> +        return 0;
>> +
> 
> Looked into the history a bit, and this story begins with commit
> a86fb7717320 ("iommu/vt-d: Allow SVA with device-specific IOPF"). This
> commit enabled devices that support their own IOPF mechanism to use SVA
> even when the platform IOMMU doesn't support IOPF.
> 
> However, SVA isn't the only fault-capable domain type. Other fault-capable
> domain types (e.g., paging domains) should also be able to leverage
> device-specific IOPF capabilities.
> 
> My question is: can we drop the domain type check to support other types
> of fault-capable domains that rely on device-specific IOPF?

The Intel IOMMU driver treats the SVA case as a special case. It allows
an SVA domain with a registered iopf_handler to attach to a device for
SVA functionality. Broadly speaking, it would be better to handle this
in the IOMMU core — for example, by preventing the attachment of a
fault-capable domain to a device that lacks IOMMU-backed page fault
capabilities.

Thanks,
baolu

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/1] iommu/vt-d: Avoid WARNING in sva unbind path
  2026-05-19  5:29 [PATCH 1/1] iommu/vt-d: Avoid WARNING in sva unbind path Lu Baolu
  2026-05-20  3:57 ` Tian, Kevin
  2026-05-20 13:12 ` Yi Liu
@ 2026-06-01  5:25 ` Baolu Lu
  2 siblings, 0 replies; 5+ messages in thread
From: Baolu Lu @ 2026-06-01  5:25 UTC (permalink / raw)
  To: Joerg Roedel, Will Deacon, Robin Murphy, Kevin Tian
  Cc: iommu, linux-kernel, stable, Nareshkumar Gollakoti

On 5/19/26 13:29, Lu Baolu wrote:
> The Intel IOMMU driver allows SVA on devices even if they do not support
> PCI/PRI. Commit 39c20c4e83b9 ("iommu/vt-d: Only handle IOPF for SVA when
> PRI is supported") modified the SVA bind path to allow this configuration
> by skipping IOPF enablement when PRI is missing. However, it failed to
> update the unbind path.
> 
> This creates an imbalance: the unbind path attempts to disable IOPF for
> a device that never had it enabled, triggering a WARNING in
> intel_iommu_disable_iopf():
> 
>   WARNING: drivers/iommu/intel/iommu.c:3475 at intel_iommu_disable_iopf+0x4f/0x90d
>   Call Trace:
>    <TASK>
>    blocking_domain_set_dev_pasid+0x50/0x70
>    iommu_detach_device_pasid+0x89/0xc0
>    iommu_sva_unbind_device+0x73/0x150
>    xe_vm_close_and_put+0x4d2/0x1200 [xe]
> 
> Fix this by bypassing IOPF operations for SVA domains on non-PRI hardware
> in both the bind and unbind paths.
> 
> Fixes: 39c20c4e83b9 ("iommu/vt-d: Only handle IOPF for SVA when PRI is supported")
> Cc:stable@vger.kernel.org
> Reported-by: Nareshkumar Gollakoti<naresh.kumar.g@intel.com>
> Signed-off-by: Lu Baolu<baolu.lu@linux.intel.com>
> ---
>   drivers/iommu/intel/iommu.h | 11 +++++++++++
>   drivers/iommu/intel/svm.c   | 12 ++++--------
>   2 files changed, 15 insertions(+), 8 deletions(-)

Queued for linux-next.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-06-01  5:26 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-05-19  5:29 [PATCH 1/1] iommu/vt-d: Avoid WARNING in sva unbind path Lu Baolu
2026-05-20  3:57 ` Tian, Kevin
2026-05-20 13:12 ` Yi Liu
2026-05-21  7:12   ` Baolu Lu
2026-06-01  5:25 ` Baolu Lu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome