iommu.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/1] iommu/amd: Treat per-device exclusion ranges as r/w unity-mapped regions
@ 2019-11-14  6:14 Adrian Huang
  2019-12-17  9:30 ` Joerg Roedel
  0 siblings, 1 reply; 2+ messages in thread
From: Adrian Huang @ 2019-11-14  6:14 UTC (permalink / raw)
  To: Joerg Roedel; +Cc: iommu, Adrian Huang

Some buggy BIOSes might define multiple exclusion ranges of the
IVMD entries which are associated with the same IOMMU hardware.
This leads to the overwritten exclusion range (exclusion_start
and exclusion_length members) in set_device_exclusion_range().

Here is a real case:
When attaching two Broadcom RAID controllers to a server, the first
one reports the failure during booting (the disks connecting to the
RAID controller cannot be detected).

This patch prevents the issue by treating per-device exclusion
ranges as r/w unity-mapped regions.

Discussion:
  * https://lists.linuxfoundation.org/pipermail/iommu/2019-November/040140.html

Suggested-by: Joerg Roedel <joro@8bytes.org>
Signed-off-by: Adrian Huang <ahuang12@lenovo.com>
---
 drivers/iommu/amd_iommu_init.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c
index 568c52317757..1b65302e07b1 100644
--- a/drivers/iommu/amd_iommu_init.c
+++ b/drivers/iommu/amd_iommu_init.c
@@ -71,6 +71,8 @@
 #define IVHD_FLAG_ISOC_EN_MASK          0x08
 
 #define IVMD_FLAG_EXCL_RANGE            0x08
+#define IVMD_FLAG_IW                    0x04
+#define IVMD_FLAG_IR                    0x02
 #define IVMD_FLAG_UNITY_MAP             0x01
 
 #define ACPI_DEVFLAG_INITPASS           0x01
@@ -1121,16 +1123,14 @@ static void __init set_device_exclusion_range(u16 devid, struct ivmd_header *m)
 	if (!(m->flags & IVMD_FLAG_EXCL_RANGE))
 		return;
 
-	if (iommu) {
-		/*
-		 * We only can configure exclusion ranges per IOMMU, not
-		 * per device. But we can enable the exclusion range per
-		 * device. This is done here
-		 */
-		set_dev_entry_bit(devid, DEV_ENTRY_EX);
-		iommu->exclusion_start = m->range_start;
-		iommu->exclusion_length = m->range_length;
-	}
+	/*
+	 * Treat per-device exclusion ranges as r/w unity-mapped regions
+	 * since some buggy BIOSes might lead to the overwritten exclusion
+	 * range (exclusion_start and exclusion_length members). This
+	 * happens when there are multiple exclusion ranges (IVMD entries)
+	 * defined in ACPI table.
+	 */
+	m->flags = (IVMD_FLAG_IW | IVMD_FLAG_IR | IVMD_FLAG_UNITY_MAP);
 }
 
 /*
-- 
2.17.1

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

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

* Re: [PATCH 1/1] iommu/amd: Treat per-device exclusion ranges as r/w unity-mapped regions
  2019-11-14  6:14 [PATCH 1/1] iommu/amd: Treat per-device exclusion ranges as r/w unity-mapped regions Adrian Huang
@ 2019-12-17  9:30 ` Joerg Roedel
  0 siblings, 0 replies; 2+ messages in thread
From: Joerg Roedel @ 2019-12-17  9:30 UTC (permalink / raw)
  To: Adrian Huang; +Cc: iommu, Adrian Huang

On Thu, Nov 14, 2019 at 02:14:47PM +0800, Adrian Huang wrote:
> Some buggy BIOSes might define multiple exclusion ranges of the
> IVMD entries which are associated with the same IOMMU hardware.
> This leads to the overwritten exclusion range (exclusion_start
> and exclusion_length members) in set_device_exclusion_range().
> 
> Here is a real case:
> When attaching two Broadcom RAID controllers to a server, the first
> one reports the failure during booting (the disks connecting to the
> RAID controller cannot be detected).
> 
> This patch prevents the issue by treating per-device exclusion
> ranges as r/w unity-mapped regions.
> 
> Discussion:
>   * https://lists.linuxfoundation.org/pipermail/iommu/2019-November/040140.html
> 
> Suggested-by: Joerg Roedel <joro@8bytes.org>
> Signed-off-by: Adrian Huang <ahuang12@lenovo.com>
> ---
>  drivers/iommu/amd_iommu_init.c | 20 ++++++++++----------
>  1 file changed, 10 insertions(+), 10 deletions(-)

Applied, thanks.

_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

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

end of thread, other threads:[~2019-12-17  9:30 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-14  6:14 [PATCH 1/1] iommu/amd: Treat per-device exclusion ranges as r/w unity-mapped regions Adrian Huang
2019-12-17  9:30 ` Joerg Roedel

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).