From: Lu Baolu <baolu.lu@linux.intel.com>
To: Joerg Roedel <joro@8bytes.org>
Cc: ZhaoJinming <zhaojinming@uniontech.com>,
Kevin Tian <kevin.tian@intel.com>,
Dmitry Antipov <dmantipov@yandex.ru>,
Guanghui Feng <guanghuifeng@linux.alibaba.com>,
Li RongQing <lirongqing@baidu.com>,
Desnes Nunes <desnesn@redhat.com>,
iommu@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: [PATCH v2 11/19] iommu/vt-d: Remove the 'force_on' variable
Date: Wed, 5 Aug 2026 07:43:05 +0800 [thread overview]
Message-ID: <20260804234314.3087110-12-baolu.lu@linux.intel.com> (raw)
In-Reply-To: <20260804234314.3087110-1-baolu.lu@linux.intel.com>
From: Kevin Tian <kevin.tian@intel.com>
The force_on variable is now redundant - same information captured
by "dmar_policy == DMAR_FORCE_ON". Replace all force_on checks
with dmar_policy_force_on().
Signed-off-by: Kevin Tian <kevin.tian@intel.com>
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
---
drivers/iommu/intel/iommu.h | 5 +++++
drivers/iommu/intel/iommu.c | 37 +++++++++++++++++--------------------
2 files changed, 22 insertions(+), 20 deletions(-)
diff --git a/drivers/iommu/intel/iommu.h b/drivers/iommu/intel/iommu.h
index dd2376a079b9..40da2ed7e254 100644
--- a/drivers/iommu/intel/iommu.h
+++ b/drivers/iommu/intel/iommu.h
@@ -1394,6 +1394,11 @@ static inline bool dmar_policy_off(void)
return dmar_policy < 0;
}
+static inline bool dmar_policy_force_on(void)
+{
+ return dmar_policy == DMAR_FORCE_ON;
+}
+
bool dmar_can_force_on(enum dmar_force_on force_on);
extern int dmar_disabled;
diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index 5eb80aeec274..118c62e859fd 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -53,10 +53,9 @@ static int rwbf_quirk;
#define rwbf_required(iommu) (rwbf_quirk || cap_rwbf((iommu)->cap))
/*
- * set to 1 to panic kernel if can't successfully enable VT-d
- * (used when kernel is launched w/ TXT)
+ * Skip forcing iommu on and avoid tboot-related kernel panics during
+ * initialization when set to 1 (via intel_iommu=tboot_noforce).
*/
-static int force_on = 0;
int intel_iommu_tboot_noforce;
#define ROOT_ENTRY_NR (VTD_PAGE_SIZE/sizeof(struct root_entry))
@@ -1713,7 +1712,7 @@ static int __init init_dmars(void)
* we always have to disable PMRs or DMA may fail on
* this device
*/
- if (force_on)
+ if (dmar_policy_force_on())
iommu_disable_protect_mem_regions(iommu);
continue;
}
@@ -1805,7 +1804,7 @@ static int init_iommu_hw(void)
* we always have to disable PMRs or DMA may fail on
* this device
*/
- if (force_on)
+ if (dmar_policy_force_on())
iommu_disable_protect_mem_regions(iommu);
continue;
}
@@ -1866,7 +1865,7 @@ static void iommu_resume(void *data)
unsigned long flag;
if (init_iommu_hw()) {
- if (force_on)
+ if (dmar_policy_force_on())
panic("tboot: IOMMU setup failed, DMAR can not resume!\n");
else
WARN(1, "IOMMU setup failed, DMAR can not resume!\n");
@@ -2134,7 +2133,7 @@ static int intel_iommu_add(struct dmar_drhd_unit *dmaru)
/*
* we always have to disable PMRs or DMA may fail on this device
*/
- if (force_on)
+ if (dmar_policy_force_on())
iommu_disable_protect_mem_regions(iommu);
return 0;
}
@@ -2487,13 +2486,13 @@ static bool has_external_pci(void)
return false;
}
-static int __init platform_optin_force_iommu(void)
+static void __init platform_optin_force_iommu(void)
{
if (!dmar_platform_optin() || !dmar_can_force_on(DMAR_FORCEON_PLATFORM))
- return 0;
+ return;
if (!has_external_pci())
- return 0;
+ return;
/*
* If Intel-IOMMU is disabled by default, we will apply identity
@@ -2507,8 +2506,6 @@ static int __init platform_optin_force_iommu(void)
/* No concurrent access to dmar_policy at this point. */
dmar_policy = DMAR_FORCE_ON;
dmar_disabled = 0;
-
- return 1;
}
static int __init probe_acpi_namespace_devices(void)
@@ -2548,10 +2545,10 @@ static int __init probe_acpi_namespace_devices(void)
return 0;
}
-static __init int tboot_force_iommu(void)
+static __init void tboot_force_iommu(void)
{
if (!tboot_enabled() || intel_iommu_tboot_noforce)
- return 0;
+ return;
if (!dmar_can_force_on(DMAR_FORCEON_TBOOT))
panic("tboot: Failed to force IOMMU on\n");
@@ -2563,8 +2560,6 @@ static __init int tboot_force_iommu(void)
dmar_policy = DMAR_FORCE_ON;
dmar_disabled = 0;
no_iommu = 0;
-
- return 1;
}
int __init intel_iommu_init(void)
@@ -2577,17 +2572,19 @@ int __init intel_iommu_init(void)
* Intel IOMMU is required for a TXT/tboot launch or platform
* opt in, so enforce that.
*/
- force_on = tboot_force_iommu() || platform_optin_force_iommu();
+ tboot_force_iommu();
+ if (!dmar_policy_force_on())
+ platform_optin_force_iommu();
down_write(&dmar_global_lock);
if (dmar_table_init()) {
- if (force_on)
+ if (dmar_policy_force_on())
panic("tboot: Failed to initialize DMAR table\n");
goto out_free_dmar;
}
if (dmar_dev_scope_init() < 0) {
- if (force_on)
+ if (dmar_policy_force_on())
panic("tboot: Failed to initialize DMAR device scope\n");
goto out_free_dmar;
}
@@ -2641,7 +2638,7 @@ int __init intel_iommu_init(void)
ret = init_dmars();
if (ret) {
- if (force_on)
+ if (dmar_policy_force_on())
panic("tboot: Failed to initialize DMARs\n");
pr_err("Initialization failed\n");
goto out_free_dmar;
--
2.43.0
next prev parent reply other threads:[~2026-08-04 23:54 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-04 23:42 [PATCH v2 00/19][PULL REQUEST] Intel IOMMU updates for v7.3 Lu Baolu
2026-08-04 23:42 ` [PATCH v2 01/19] iommu/vt-d: Fix UCTP context table slot when copying root entries Lu Baolu
2026-08-04 23:42 ` [PATCH v2 02/19] iommu/vt-d: Use logical OR operator for privilege mode check Lu Baolu
2026-08-04 23:42 ` [PATCH v2 03/19] iommu/vt-d: Fix CACHE_TAG_NESTING_DEVTLB polluting shared variables in flush loop Lu Baolu
2026-08-04 23:42 ` [PATCH v2 04/19] iommu/vt-d: Use kstrtoint_from_user() in dmar_perf_latency_write() Lu Baolu
2026-08-04 23:42 ` [PATCH v2 05/19] iommu/vt-d: Fix no_iommu to disable platform opt-in Lu Baolu
2026-08-04 23:43 ` [PATCH v2 06/19] iommu/vt-d: Force requesting ACS when tboot is enabled Lu Baolu
2026-08-04 23:43 ` [PATCH v2 07/19] iommu/vt-d: Remove dead code when CONFIG_INTEL_IOMMU is not set Lu Baolu
2026-08-04 23:43 ` [PATCH v2 08/19] iommu/vt-d: Consolidate dmar policy management and force_on logic Lu Baolu
2026-08-04 23:43 ` [PATCH v2 09/19] iommu/vt-d: Use dmar_can_force_on() for platform opt-in Lu Baolu
2026-08-04 23:43 ` [PATCH v2 10/19] iommu/vt-d: Call dmar_can_force_on() for tboot opt-in Lu Baolu
2026-08-04 23:43 ` Lu Baolu [this message]
2026-08-04 23:43 ` [PATCH v2 12/19] iommu/vt-d: Remove dmar_disabled Lu Baolu
2026-08-04 23:43 ` [PATCH v2 13/19] iommu/vt-d: Support the new DMA_REMAP_OPT_OUT flag bit Lu Baolu
2026-08-04 23:43 ` [PATCH v2 14/19] iommu/vt-d: Cache max domain ID to avoid redundant calculation Lu Baolu
2026-08-04 23:43 ` [PATCH v2 15/19] iommu/vt-d: Fix copied_tables bitmap leak on error in copy_translation_tables Lu Baolu
2026-08-04 23:43 ` [PATCH v2 16/19] iommu/vt-d: Clear Present bit before tearing down copied context entry Lu Baolu
2026-08-04 23:43 ` [PATCH v2 17/19] iommu/vt-d: Fix iopf_refcount leak on RID domain replacement Lu Baolu
2026-08-04 23:43 ` [PATCH v2 18/19] iommu/vt-d: Tear down scalable-mode context on probe failure Lu Baolu
2026-08-04 23:43 ` [PATCH v2 19/19] iommu/vt-d: Flush context cache with correct SID when tearing down aliases Lu Baolu
2026-08-10 8:04 ` [PATCH v2 00/19][PULL REQUEST] Intel IOMMU updates for v7.3 Joerg Roedel
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=20260804234314.3087110-12-baolu.lu@linux.intel.com \
--to=baolu.lu@linux.intel.com \
--cc=desnesn@redhat.com \
--cc=dmantipov@yandex.ru \
--cc=guanghuifeng@linux.alibaba.com \
--cc=iommu@lists.linux.dev \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lirongqing@baidu.com \
--cc=zhaojinming@uniontech.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.