[PATCH v2 6/9] iommu/vt-d: Call dmar_can_force_on() for tboot optin
From: Kevin Tian
Date: Thu Jul 02 2026 - 02:02:16 EST
So the policy of requesting ACS in detect_intel_iommu() is consistent
with that in tboot_force_iommu().
Though tboot is the strongest override so far, dmar_can_force_on() may
return false due to future extensions. In this case panic the kernel,
as is already done when failing to initialize DMA remapping for tboot.
No functional impact at this point.
Signed-off-by: Kevin Tian <kevin.tian@xxxxxxxxx>
---
drivers/iommu/intel/iommu.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 94cf144b4b70..cddd3ab215cf 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -2548,12 +2548,17 @@ static int __init probe_acpi_namespace_devices(void)
static __init int tboot_force_iommu(void)
{
- if (!tboot_enabled())
+ if (!tboot_enabled() || intel_iommu_tboot_noforce)
return 0;
- if (no_iommu || dmar_disabled)
+ if (!dmar_can_force_on(DMAR_FORCEON_TBOOT))
+ panic("tboot: Failed to force IOMMU on\n");
+
+ if (dmar_policy_off())
pr_warn("Forcing Intel-IOMMU to enabled\n");
+ /* No concurrent access to dmar_policy at this point. */
+ dmar_policy = DMAR_FORCE_ON;
dmar_disabled = 0;
no_iommu = 0;
@@ -2570,8 +2575,7 @@ int __init intel_iommu_init(void)
* Intel IOMMU is required for a TXT/tboot launch or platform
* opt in, so enforce that.
*/
- force_on = (!intel_iommu_tboot_noforce && tboot_force_iommu()) ||
- platform_optin_force_iommu();
+ force_on = tboot_force_iommu() || platform_optin_force_iommu();
down_write(&dmar_global_lock);
if (dmar_table_init()) {
--
2.43.0