mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] iommu/vt-d: improve IOMMU fault information
@ 2026-05-25  3:47 Guanghui Feng
  2026-05-26  1:57 ` Baolu Lu
  0 siblings, 1 reply; 5+ messages in thread
From: Guanghui Feng @ 2026-05-25  3:47 UTC (permalink / raw)
  To: dwmw2, baolu.lu, joro, will, robin.murphy, iommu, linux-kernel
  Cc: xlpang, oliver.yang

In some environments, multiple PCIe segments exist, and PCIe device
information needs to be differentiated and identified based on the
segment. When an IOMMU fault event occurs, the IOMMU and device segment
information should be output in detail in dmar_fault_do_one.

Signed-off-by: Guanghui Feng <guanghuifeng@linux.alibaba.com>
---
 drivers/iommu/intel/dmar.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/iommu/intel/dmar.c b/drivers/iommu/intel/dmar.c
index d33c119a935e..ca9afbb55e76 100644
--- a/drivers/iommu/intel/dmar.c
+++ b/drivers/iommu/intel/dmar.c
@@ -1894,7 +1894,8 @@ static int dmar_fault_do_one(struct intel_iommu *iommu, int type,
 	reason = dmar_get_fault_reason(fault_reason, &fault_type);
 
 	if (fault_type == INTR_REMAP) {
-		pr_err("[INTR-REMAP] Request device [%02x:%02x.%d] fault index 0x%llx [fault reason 0x%02x] %s\n",
+		pr_err("[DMAR:%s] [INTR-REMAP] Request device [%04x:%02x:%02x.%d] fault index 0x%llx [fault reason 0x%02x] %s\n",
+		       iommu->name, iommu->segment,
 		       source_id >> 8, PCI_SLOT(source_id & 0xFF),
 		       PCI_FUNC(source_id & 0xFF), addr >> 48,
 		       fault_reason, reason);
@@ -1903,14 +1904,18 @@ static int dmar_fault_do_one(struct intel_iommu *iommu, int type,
 	}
 
 	if (pasid == IOMMU_PASID_INVALID)
-		pr_err("[%s NO_PASID] Request device [%02x:%02x.%d] fault addr 0x%llx [fault reason 0x%02x] %s\n",
+		pr_err("[DMAR:%s] [%s NO_PASID] Request device [%04x:%02x:%02x.%d] fault addr 0x%llx [fault reason 0x%02x] %s\n",
+		       iommu->name,
 		       type ? "DMA Read" : "DMA Write",
+		       iommu->segment,
 		       source_id >> 8, PCI_SLOT(source_id & 0xFF),
 		       PCI_FUNC(source_id & 0xFF), addr,
 		       fault_reason, reason);
 	else
-		pr_err("[%s PASID 0x%x] Request device [%02x:%02x.%d] fault addr 0x%llx [fault reason 0x%02x] %s\n",
+		pr_err("[DMAR:%s] [%s PASID 0x%x] Request device [%04x:%02x:%02x.%d] fault addr 0x%llx [fault reason 0x%02x] %s\n",
+		       iommu->name,
 		       type ? "DMA Read" : "DMA Write", pasid,
+		       iommu->segment,
 		       source_id >> 8, PCI_SLOT(source_id & 0xFF),
 		       PCI_FUNC(source_id & 0xFF), addr,
 		       fault_reason, reason);
-- 
2.43.7


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

* Re: [PATCH] iommu/vt-d: improve IOMMU fault information
  2026-05-25  3:47 [PATCH] iommu/vt-d: improve IOMMU fault information Guanghui Feng
@ 2026-05-26  1:57 ` Baolu Lu
  2026-05-28  2:14   ` guanghuifeng
  0 siblings, 1 reply; 5+ messages in thread
From: Baolu Lu @ 2026-05-26  1:57 UTC (permalink / raw)
  To: Guanghui Feng, dwmw2, joro, will, robin.murphy, iommu, linux-kernel
  Cc: xlpang, oliver.yang

On 5/25/26 11:47, Guanghui Feng wrote:
> In some environments, multiple PCIe segments exist, and PCIe device
> information needs to be differentiated and identified based on the
> segment. When an IOMMU fault event occurs, the IOMMU and device segment
> information should be output in detail in dmar_fault_do_one.
> 
> Signed-off-by: Guanghui Feng <guanghuifeng@linux.alibaba.com>
> ---
>   drivers/iommu/intel/dmar.c | 11 ++++++++---
>   1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/iommu/intel/dmar.c b/drivers/iommu/intel/dmar.c
> index d33c119a935e..ca9afbb55e76 100644
> --- a/drivers/iommu/intel/dmar.c
> +++ b/drivers/iommu/intel/dmar.c
> @@ -1894,7 +1894,8 @@ static int dmar_fault_do_one(struct intel_iommu *iommu, int type,
>   	reason = dmar_get_fault_reason(fault_reason, &fault_type);
>   
>   	if (fault_type == INTR_REMAP) {
> -		pr_err("[INTR-REMAP] Request device [%02x:%02x.%d] fault index 0x%llx [fault reason 0x%02x] %s\n",
> +		pr_err("[DMAR:%s] [INTR-REMAP] Request device [%04x:%02x:%02x.%d] fault index 0x%llx [fault reason 0x%02x] %s\n",
> +		       iommu->name, iommu->segment,
>   		       source_id >> 8, PCI_SLOT(source_id & 0xFF),
>   		       PCI_FUNC(source_id & 0xFF), addr >> 48,
>   		       fault_reason, reason);
> @@ -1903,14 +1904,18 @@ static int dmar_fault_do_one(struct intel_iommu *iommu, int type,
>   	}
>   
>   	if (pasid == IOMMU_PASID_INVALID)
> -		pr_err("[%s NO_PASID] Request device [%02x:%02x.%d] fault addr 0x%llx [fault reason 0x%02x] %s\n",
> +		pr_err("[DMAR:%s] [%s NO_PASID] Request device [%04x:%02x:%02x.%d] fault addr 0x%llx [fault reason 0x%02x] %s\n",
> +		       iommu->name,

Do you really need to dump "iommu->name"? It is purely assigned by the
IOMMU driver software. Do you mind explaining what kind of information
you want to get from it?

>   		       type ? "DMA Read" : "DMA Write",
> +		       iommu->segment,
>   		       source_id >> 8, PCI_SLOT(source_id & 0xFF),
>   		       PCI_FUNC(source_id & 0xFF), addr,
>   		       fault_reason, reason);
>   	else
> -		pr_err("[%s PASID 0x%x] Request device [%02x:%02x.%d] fault addr 0x%llx [fault reason 0x%02x] %s\n",
> +		pr_err("[DMAR:%s] [%s PASID 0x%x] Request device [%04x:%02x:%02x.%d] fault addr 0x%llx [fault reason 0x%02x] %s\n",
> +		       iommu->name,
>   		       type ? "DMA Read" : "DMA Write", pasid,
> +		       iommu->segment,
>   		       source_id >> 8, PCI_SLOT(source_id & 0xFF),
>   		       PCI_FUNC(source_id & 0xFF), addr,
>   		       fault_reason, reason);

Thanks,
baolu

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

* Re: [PATCH] iommu/vt-d: improve IOMMU fault information
  2026-05-26  1:57 ` Baolu Lu
@ 2026-05-28  2:14   ` guanghuifeng
  2026-05-28  2:29     ` [PATCH v2] " Guanghui Feng
  0 siblings, 1 reply; 5+ messages in thread
From: guanghuifeng @ 2026-05-28  2:14 UTC (permalink / raw)
  To: Baolu Lu, dwmw2, joro, will, robin.murphy, iommu, linux-kernel
  Cc: xlpang, oliver.yang


在 2026/5/26 9:57, Baolu Lu 写道:
> On 5/25/26 11:47, Guanghui Feng wrote:
>> In some environments, multiple PCIe segments exist, and PCIe device
>> information needs to be differentiated and identified based on the
>> segment. When an IOMMU fault event occurs, the IOMMU and device segment
>> information should be output in detail in dmar_fault_do_one.
>>
>> Signed-off-by: Guanghui Feng <guanghuifeng@linux.alibaba.com>
>> ---
>>   drivers/iommu/intel/dmar.c | 11 ++++++++---
>>   1 file changed, 8 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/iommu/intel/dmar.c b/drivers/iommu/intel/dmar.c
>> index d33c119a935e..ca9afbb55e76 100644
>> --- a/drivers/iommu/intel/dmar.c
>> +++ b/drivers/iommu/intel/dmar.c
>> @@ -1894,7 +1894,8 @@ static int dmar_fault_do_one(struct intel_iommu 
>> *iommu, int type,
>>       reason = dmar_get_fault_reason(fault_reason, &fault_type);
>>         if (fault_type == INTR_REMAP) {
>> -        pr_err("[INTR-REMAP] Request device [%02x:%02x.%d] fault 
>> index 0x%llx [fault reason 0x%02x] %s\n",
>> +        pr_err("[DMAR:%s] [INTR-REMAP] Request device 
>> [%04x:%02x:%02x.%d] fault index 0x%llx [fault reason 0x%02x] %s\n",
>> +               iommu->name, iommu->segment,
>>                  source_id >> 8, PCI_SLOT(source_id & 0xFF),
>>                  PCI_FUNC(source_id & 0xFF), addr >> 48,
>>                  fault_reason, reason);
>> @@ -1903,14 +1904,18 @@ static int dmar_fault_do_one(struct 
>> intel_iommu *iommu, int type,
>>       }
>>         if (pasid == IOMMU_PASID_INVALID)
>> -        pr_err("[%s NO_PASID] Request device [%02x:%02x.%d] fault 
>> addr 0x%llx [fault reason 0x%02x] %s\n",
>> +        pr_err("[DMAR:%s] [%s NO_PASID] Request device 
>> [%04x:%02x:%02x.%d] fault addr 0x%llx [fault reason 0x%02x] %s\n",
>> +               iommu->name,
>
> Do you really need to dump "iommu->name"? It is purely assigned by the
> IOMMU driver software. Do you mind explaining what kind of information
> you want to get from it?
>
Thanks for your reply.

1. In environments with multiple PCIe segments/domains, precise 
differentiation based on device information

is needed when an IOMMU fault occurs. Therefore, segment information was 
added.

2. Adding IOMMU information to an IOMMU fault is not mandatory. Related 
IOMMU information

can be obtained through various methods such as 
/sys/bus/pci/devices/[bdf]/iommu.


A new patch will be resubmitted for modification.

>>                  type ? "DMA Read" : "DMA Write",
>> +               iommu->segment,
>>                  source_id >> 8, PCI_SLOT(source_id & 0xFF),
>>                  PCI_FUNC(source_id & 0xFF), addr,
>>                  fault_reason, reason);
>>       else
>> -        pr_err("[%s PASID 0x%x] Request device [%02x:%02x.%d] fault 
>> addr 0x%llx [fault reason 0x%02x] %s\n",
>> +        pr_err("[DMAR:%s] [%s PASID 0x%x] Request device 
>> [%04x:%02x:%02x.%d] fault addr 0x%llx [fault reason 0x%02x] %s\n",
>> +               iommu->name,
>>                  type ? "DMA Read" : "DMA Write", pasid,
>> +               iommu->segment,
>>                  source_id >> 8, PCI_SLOT(source_id & 0xFF),
>>                  PCI_FUNC(source_id & 0xFF), addr,
>>                  fault_reason, reason);
>
> Thanks,
> baolu

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

* [PATCH v2] iommu/vt-d: improve IOMMU fault information
  2026-05-28  2:14   ` guanghuifeng
@ 2026-05-28  2:29     ` Guanghui Feng
  2026-06-01  6:11       ` Baolu Lu
  0 siblings, 1 reply; 5+ messages in thread
From: Guanghui Feng @ 2026-05-28  2:29 UTC (permalink / raw)
  To: dwmw2, baolu.lu, joro, will, robin.murphy, iommu, linux-kernel
  Cc: xlpang, oliver.yang

In some environments, multiple PCIe segments exist, and PCIe device
information needs to be differentiated and identified based on the
segment. When an IOMMU fault event occurs, the IOMMU and device segment
information should be output in detail in dmar_fault_do_one.

Signed-off-by: Guanghui Feng <guanghuifeng@linux.alibaba.com>
---
 drivers/iommu/intel/dmar.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/iommu/intel/dmar.c b/drivers/iommu/intel/dmar.c
index d33c119a935e..767ec092accd 100644
--- a/drivers/iommu/intel/dmar.c
+++ b/drivers/iommu/intel/dmar.c
@@ -1894,7 +1894,8 @@ static int dmar_fault_do_one(struct intel_iommu *iommu, int type,
 	reason = dmar_get_fault_reason(fault_reason, &fault_type);
 
 	if (fault_type == INTR_REMAP) {
-		pr_err("[INTR-REMAP] Request device [%02x:%02x.%d] fault index 0x%llx [fault reason 0x%02x] %s\n",
+		pr_err("[INTR-REMAP] Request device [%04x:%02x:%02x.%d] fault index 0x%llx [fault reason 0x%02x] %s\n",
+		       iommu->segment,
 		       source_id >> 8, PCI_SLOT(source_id & 0xFF),
 		       PCI_FUNC(source_id & 0xFF), addr >> 48,
 		       fault_reason, reason);
@@ -1903,14 +1904,16 @@ static int dmar_fault_do_one(struct intel_iommu *iommu, int type,
 	}
 
 	if (pasid == IOMMU_PASID_INVALID)
-		pr_err("[%s NO_PASID] Request device [%02x:%02x.%d] fault addr 0x%llx [fault reason 0x%02x] %s\n",
+		pr_err("[%s NO_PASID] Request device [%04x:%02x:%02x.%d] fault addr 0x%llx [fault reason 0x%02x] %s\n",
 		       type ? "DMA Read" : "DMA Write",
+		       iommu->segment,
 		       source_id >> 8, PCI_SLOT(source_id & 0xFF),
 		       PCI_FUNC(source_id & 0xFF), addr,
 		       fault_reason, reason);
 	else
-		pr_err("[%s PASID 0x%x] Request device [%02x:%02x.%d] fault addr 0x%llx [fault reason 0x%02x] %s\n",
+		pr_err("[%s PASID 0x%x] Request device [%04x:%02x:%02x.%d] fault addr 0x%llx [fault reason 0x%02x] %s\n",
 		       type ? "DMA Read" : "DMA Write", pasid,
+		       iommu->segment,
 		       source_id >> 8, PCI_SLOT(source_id & 0xFF),
 		       PCI_FUNC(source_id & 0xFF), addr,
 		       fault_reason, reason);
-- 
2.43.7


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

* Re: [PATCH v2] iommu/vt-d: improve IOMMU fault information
  2026-05-28  2:29     ` [PATCH v2] " Guanghui Feng
@ 2026-06-01  6:11       ` Baolu Lu
  0 siblings, 0 replies; 5+ messages in thread
From: Baolu Lu @ 2026-06-01  6:11 UTC (permalink / raw)
  To: Guanghui Feng, dwmw2, joro, will, robin.murphy, iommu, linux-kernel
  Cc: xlpang, oliver.yang

On 5/28/26 10:29, Guanghui Feng wrote:
> In some environments, multiple PCIe segments exist, and PCIe device
> information needs to be differentiated and identified based on the
> segment. When an IOMMU fault event occurs, the IOMMU and device segment
> information should be output in detail in dmar_fault_do_one.
> 
> Signed-off-by: Guanghui Feng<guanghuifeng@linux.alibaba.com>
> ---
>   drivers/iommu/intel/dmar.c | 9 ++++++---
>   1 file changed, 6 insertions(+), 3 deletions(-)

Queued for linux-next. Thank you!

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

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

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-05-25  3:47 [PATCH] iommu/vt-d: improve IOMMU fault information Guanghui Feng
2026-05-26  1:57 ` Baolu Lu
2026-05-28  2:14   ` guanghuifeng
2026-05-28  2:29     ` [PATCH v2] " Guanghui Feng
2026-06-01  6:11       ` Baolu Lu

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