From: Baolu Lu <baolu.lu@linux.intel.com>
To: Kevin Tian <kevin.tian@intel.com>, Joerg Roedel <joro@8bytes.org>,
Will Deacon <will@kernel.org>,
Robin Murphy <robin.murphy@arm.com>
Cc: baolu.lu@linux.intel.com, Joerg Roedel <jroedel@suse.de>,
Mika Westerberg <mika.westerberg@linux.intel.com>,
Ashok Raj <ashok.raj@intel.com>,
Chris Wright <chrisw@sous-sol.org>,
Jesse Barnes <jbarnes@virtuousgeek.org>,
Asit Mallick <asit.k.mallick@intel.com>,
iommu@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 4/9] iommu/vt-d: Consolidate dmar state management and force_on logic
Date: Fri, 12 Jun 2026 19:08:15 +0800 [thread overview]
Message-ID: <fe8d86ec-539c-4fb3-bf8b-48150e92eecf@linux.intel.com> (raw)
In-Reply-To: <20260604051540.592925-5-kevin.tian@intel.com>
On 6/4/2026 1:15 PM, Kevin Tian wrote:
> Currently the dmar state is carried by multiple variables (no_iommu,
> dmar_disabled, no_platform_optin, etc.) with error-prone force_on logic
> scattered in multiple places.
>
> Unify the state management and centralize the policy/priority for
> various force_on scenarios.
>
> No functional impact except one case - "intel_iommu=off" sets
> no_platform_optin which is checked in platform_optin_force_iommu()
> but not in detect_intel_iommu(), leading to ACS unnecessarily requested
> when iommu could not be forced on later. Now with the unified logic
> this becomes more consistent.
>
> Signed-off-by: Kevin Tian<kevin.tian@intel.com>
> ---
> drivers/iommu/intel/dmar.c | 57 ++++++++++++++++++++++++++++++++++---
> drivers/iommu/intel/iommu.c | 7 +++++
> drivers/iommu/intel/iommu.h | 45 +++++++++++++++++++++++++++++
> 3 files changed, 105 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/iommu/intel/dmar.c b/drivers/iommu/intel/dmar.c
> index e8f01e56cf46..791b91a7be29 100644
> --- a/drivers/iommu/intel/dmar.c
> +++ b/drivers/iommu/intel/dmar.c
> @@ -915,14 +915,60 @@ dmar_validate_one_drhd(struct acpi_dmar_header *entry, void *arg)
> return 0;
> }
>
> +/*
> + * Centralized helper for deciding the force_on policy
> + *
> + * dmar disabled states (for DMA Remapping) are defined from stronger
> + * disables (more negative values) to weaker disables (less negative
> + * values).
> + *
> + * When a force_on type is passed in, it is associated to a reference
> + * level for comparison. force_on is permitted when dmar is in a
> + * disabled state less negative than the reference level (if dmar is
> + * enabled then the check is always true).
> + *
> + * For supported force_on types:
> + *
> + * - DMAR_FORCEON_TBOOT: tboot strictly requires DMA remapping for secure
> + * boot hence supersedes any user opts ("iommu=off" or "intel_iommu=off")
> + * and weaker disables.
> + *
> + * - DMAR_FORCEON_PLATFORM: external-facing devices requires DMA
> + * remapping to prevent malicious downstream external devices from
> + * composing DMA attacks. force_on is permitted only if dmar is disabled
> + * by build configurations (CONFIG_INTEL_IOMMU_DEFAULT_ON=off).
> + */
It reads like tboot successfully overrides the user's choices, whereas
the platform opt-in cannot. Could you shed more light on this? My
understanding is that "trusted boot environment" is considered stronger
than "user choices", which in turn is stronger than a "platform opt-in
hint".
If this is indeed the core design philosophy, would you mind spelling it
out explicitly in this comment? Making the exact precedence clear
will help future development follow the same philosophy.
> +bool dmar_can_force_on(enum dmar_force_on force_on)
> +{
> + int level;
> +
> + switch (force_on) {
> + case DMAR_FORCEON_TBOOT:
> + level = DMAR_DISABLED_USER;
> + break;
> + case DMAR_FORCEON_PLATFORM:
> + level = DMAR_DISABLED_AUTO;
> + break;
> + default:
> + pr_warn("Unsupported force_on type (%d)\n", force_on);
> + /* '0' means returning true only when dmar is enabled */
> + level = 0;
> + break;
> + }
> +
> + return dmar_state >= level;
> +}
If this helper returns false (meaning a requested force_on type cannot
be enforced), would it be better to notify the user via a clear pr_info/
pr_warn in the kernel log?
Normally, a failure to enforce a requested "force_on" condition might
mean security or trust implications that the administrator should be
aware of.
The rest of the patch looks good to me. Thanks!
Thanks,
baolu
next prev parent reply other threads:[~2026-06-12 11:08 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-04 5:15 [PATCH 0/9] iommu/vt-d: Support a new DMAR flag Kevin Tian
2026-06-04 5:15 ` [PATCH 1/9] iommu/vt-d: Fix no_iommu to disable platform optin Kevin Tian
2026-06-04 5:15 ` [PATCH 2/9] iommu/vt-d: Force requesting ACS when tboot is enabled Kevin Tian
2026-06-04 5:15 ` [PATCH 3/9] iommu/vt-d: Remove dead code when CONFIG_INTEL_IOMMU is not set Kevin Tian
2026-06-04 5:15 ` [PATCH 4/9] iommu/vt-d: Consolidate dmar state management and force_on logic Kevin Tian
2026-06-12 11:08 ` Baolu Lu [this message]
2026-06-04 5:15 ` [PATCH 5/9] iommu/vt-d: Use dmar_can_force_on() for platform optin Kevin Tian
2026-06-12 13:16 ` Baolu Lu
2026-06-04 5:15 ` [PATCH 6/9] iommu/vt-d: Call dmar_can_force_on() for tboot optin Kevin Tian
2026-06-12 13:57 ` Baolu Lu
2026-06-04 5:15 ` [PATCH 7/9] iommu/vt-d: Remove the 'force_on' variable Kevin Tian
2026-06-12 14:16 ` Baolu Lu
2026-06-04 5:15 ` [PATCH 8/9] iommu/vt-d: Remove dmar_disabled Kevin Tian
2026-06-12 14:26 ` Baolu Lu
2026-06-04 5:15 ` [PATCH 9/9] iommu/vt-d: Support the new DMA_REMAP_OPT_OUT flag bit Kevin Tian
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=fe8d86ec-539c-4fb3-bf8b-48150e92eecf@linux.intel.com \
--to=baolu.lu@linux.intel.com \
--cc=ashok.raj@intel.com \
--cc=asit.k.mallick@intel.com \
--cc=chrisw@sous-sol.org \
--cc=iommu@lists.linux.dev \
--cc=jbarnes@virtuousgeek.org \
--cc=joro@8bytes.org \
--cc=jroedel@suse.de \
--cc=kevin.tian@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mika.westerberg@linux.intel.com \
--cc=robin.murphy@arm.com \
--cc=will@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox