[PATCH] iommu/vt-d: respect user override for intel_iommu=on on Lenovo ThinkPad P50s

From: Oliver Lin

Date: Thu Jul 02 2026 - 06:44:03 EST


From: oliver <oliver@xxxxxxxxxxxxxxx>

The current DMI quirk disables VT-d on ThinkPad P50s unconditionally,
even when intel_iommu=on is explicitly requested via kernel command line.

This breaks kernel parameter precedence and user intent.

Make the quirk conditional so that it does not override explicit user
enabling of Intel IOMMU.

Signed-off-by: Oliver <oliver@xxxxxxxxxxxxxxx>
---
drivers/iommu/intel/iommu.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c
index a072e9ef63ef..b34b5a60f349 100644
--- a/drivers/iommu/intel/iommu.c
+++ b/drivers/iommu/intel/iommu.c
@@ -201,6 +201,7 @@ static void intel_iommu_domain_free(struct iommu_domain *domain);

int dmar_disabled = !IS_ENABLED(CONFIG_INTEL_IOMMU_DEFAULT_ON);
int intel_iommu_sm = IS_ENABLED(CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON);
+static int intel_iommu_cmdline_on;

int intel_iommu_enabled = 0;
EXPORT_SYMBOL_GPL(intel_iommu_enabled);
@@ -241,10 +242,12 @@ static int __init intel_iommu_setup(char *str)
while (*str) {
if (!strncmp(str, "on", 2)) {
dmar_disabled = 0;
+ intel_iommu_cmdline_on = 1;
pr_info("IOMMU enabled\n");
} else if (!strncmp(str, "off", 3)) {
dmar_disabled = 1;
no_platform_optin = 1;
+ intel_iommu_cmdline_on = 0;
pr_info("IOMMU disabled\n");
} else if (!strncmp(str, "igfx_off", 8)) {
disable_igfx_iommu = 1;
@@ -2578,7 +2581,8 @@ int __init intel_iommu_init(void)
force_on = (!intel_iommu_tboot_noforce && tboot_force_iommu()) ||
platform_optin_force_iommu();

- if (!force_on && dmi_check_system(intel_iommu_broken_dmar_table)) {
+ if (!force_on && !intel_iommu_cmdline_on &&
+ dmi_check_system(intel_iommu_broken_dmar_table)) {
dmar_disabled = 1;
no_platform_optin = 1;
pr_info("DMAR: IOMMU disabled on Lenovo ThinkPad P50s due to firmware issue\n");
--
2.53.0