From: Suzuki K Poulose <suzuki.poulose@arm.com>
To: "Mikołaj Lenczewski" <miko.lenczewski@arm.com>
Cc: ryan.roberts@arm.com, yang@os.amperecomputing.com,
corbet@lwn.net, catalin.marinas@arm.com, will@kernel.org,
jean-philippe@linaro.org, robin.murphy@arm.com, joro@8bytes.org,
akpm@linux-foundation.org, ardb@kernel.org, mark.rutland@arm.com,
joey.gouly@arm.com, maz@kernel.org, james.morse@arm.com,
broonie@kernel.org, oliver.upton@linux.dev, baohua@kernel.org,
david@redhat.com, ioworker0@gmail.com, jgg@ziepe.ca,
nicolinc@nvidia.com, mshavit@google.com, jsnitsel@redhat.com,
smostafa@google.com, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, iommu@lists.linux.dev
Subject: Re: [PATCH v4 1/3] arm64: Add BBM Level 2 cpu feature
Date: Thu, 20 Mar 2025 17:11:25 +0000 [thread overview]
Message-ID: <952cc3ea-ca11-43a3-a8f4-36e3bbb1fa84@arm.com> (raw)
In-Reply-To: <20250320170936.GB487465@e133081.arm.com>
On 20/03/2025 17:09, Mikołaj Lenczewski wrote:
> On Thu, Mar 20, 2025 at 01:24:25PM +0000, Suzuki K Poulose wrote:
>> On 19/03/2025 15:05, Mikołaj Lenczewski wrote:
>>> diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
>>> index fb8752b42ec8..3e4cc917a07e 100644
>>> --- a/Documentation/admin-guide/kernel-parameters.txt
>>> +++ b/Documentation/admin-guide/kernel-parameters.txt
>>> @@ -453,6 +453,9 @@
>>> arm64.no32bit_el0 [ARM64] Unconditionally disable the execution of
>>> 32 bit applications.
>>> + arm64.nobbml2 [ARM64] Unconditionally disable Break-Before-Make Level
>>> + 2 support
>>> +
>>> arm64.nobti [ARM64] Unconditionally disable Branch Target
>>> Identification support
>>> diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
>>> index 940343beb3d4..49deda2b22ae 100644
>>> --- a/arch/arm64/Kconfig
>>> +++ b/arch/arm64/Kconfig
>>> @@ -2057,6 +2057,17 @@ config ARM64_TLB_RANGE
>>> The feature introduces new assembly instructions, and they were
>>> support when binutils >= 2.30.
>>> +config ARM64_BBML2_NOABORT
>>> + bool "Enable support for Break-Before-Make Level 2 detection and usage"
>>> + default y
>>> + help
>>> + FEAT_BBM provides detection of support levels for break-before-make
>>> + sequences. If BBM level 2 is supported, some TLB maintenance requirements
>>> + can be relaxed to improve performance. We additonally require the
>>> + property that the implementation cannot ever raise TLB Conflict Aborts.
>>> + Selecting N causes the kernel to fallback to BBM level 0 behaviour
>>> + even if the system supports BBM level 2.
>>
>> minor nit: Should we mention that the feature can be disabled at runtime
>> using a kernel parameter ?
>
> Yes, this sounds very reasonable, I should have thought of that. Will
> mention the commandline parameter in the kconfig option documentation.
And also may be mention this in the patch description and may be also
add the rationale for providing this tunable.
Cheers
Suzuki
>
>>> diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
>>> index d561cf3b8ac7..1a4adcda267b 100644
>>> --- a/arch/arm64/kernel/cpufeature.c
>>> +++ b/arch/arm64/kernel/cpufeature.c
>>> @@ -2176,6 +2176,67 @@ static bool hvhe_possible(const struct arm64_cpu_capabilities *entry,
>>> return arm64_test_sw_feature_override(ARM64_SW_FEATURE_OVERRIDE_HVHE);
>>> }
>>> +static bool cpu_has_bbml2_noabort(unsigned int cpu_midr)
>>> +{
>>> + /* We want to allow usage of bbml2 in as wide a range of kernel contexts
>>> + * as possible. This list is therefore an allow-list of known-good
>>> + * implementations that both support bbml2 and additionally, fulfill the
>>> + * extra constraint of never generating TLB conflict aborts when using
>>> + * the relaxed bbml2 semantics (such aborts make use of bbml2 in certain
>>> + * kernel contexts difficult to prove safe against recursive aborts).
>>> + *
>>> + * Note that implementations can only be considered "known-good" if their
>>> + * implementors attest to the fact that the implementation never raises
>>> + * TLBI conflict aborts for bbml2 mapping granularity changes.
>>> + */
>>> + static const struct midr_range supports_bbml2_noabort_list[] = {
>>> + MIDR_REV_RANGE(MIDR_CORTEX_X4, 0, 3, 0xf),
>>> + MIDR_REV_RANGE(MIDR_NEOVERSE_V3, 0, 2, 0xf),
>>> + {}
>>> + };
>>> +
>>> + return is_midr_in_range_list(cpu_midr, supports_bbml2_noabort_list);
>>> +}
>>> +
>>> +static inline unsigned int cpu_read_midr(int cpu)
>>> +{
>>> + WARN_ON_ONCE(!cpu_online(cpu));
>>> +
>>> + return per_cpu(cpu_data, cpu).reg_midr;
>>> +}
>>> +
>>> +static bool has_bbml2_noabort(const struct arm64_cpu_capabilities *caps, int scope)
>>> +{
>>> + if (!IS_ENABLED(CONFIG_ARM64_BBML2_NOABORT))
>>> + return false;
>>> +
>>> + if (scope & SCOPE_SYSTEM) {
>>> + int cpu;
>>> +
>>> + /* We are a boot CPU, and must verify that all enumerated boot
>>
>> minor nit: See Documentation/process/coding-style.rst,
>> Section 8 Commenting.
>
> My bad, had skimmed the coding style at one point but clearly missed or
> forgot the section on comments. Will fix up this and all other instances
> of the same issue.
>
next prev parent reply other threads:[~2025-03-20 17:11 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-19 15:05 [PATCH v4 0/3] Initial BBML2 support for contpte_convert() Mikołaj Lenczewski
2025-03-19 15:05 ` [PATCH v4 1/3] arm64: Add BBM Level 2 cpu feature Mikołaj Lenczewski
2025-03-20 13:24 ` Suzuki K Poulose
2025-03-20 17:09 ` Mikołaj Lenczewski
2025-03-20 17:11 ` Suzuki K Poulose [this message]
2025-03-20 17:13 ` Mikołaj Lenczewski
2025-03-20 13:37 ` Ard Biesheuvel
2025-03-20 14:01 ` Ryan Roberts
2025-03-20 17:06 ` Mikołaj Lenczewski
2025-03-19 15:05 ` [PATCH v4 2/3] iommu/arm: Add BBM Level 2 smmu feature Mikołaj Lenczewski
2025-03-19 15:05 ` [PATCH v4 3/3] arm64/mm: Elide tlbi in contpte_convert() under BBML2 Mikołaj Lenczewski
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=952cc3ea-ca11-43a3-a8f4-36e3bbb1fa84@arm.com \
--to=suzuki.poulose@arm.com \
--cc=akpm@linux-foundation.org \
--cc=ardb@kernel.org \
--cc=baohua@kernel.org \
--cc=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=corbet@lwn.net \
--cc=david@redhat.com \
--cc=iommu@lists.linux.dev \
--cc=ioworker0@gmail.com \
--cc=james.morse@arm.com \
--cc=jean-philippe@linaro.org \
--cc=jgg@ziepe.ca \
--cc=joey.gouly@arm.com \
--cc=joro@8bytes.org \
--cc=jsnitsel@redhat.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=miko.lenczewski@arm.com \
--cc=mshavit@google.com \
--cc=nicolinc@nvidia.com \
--cc=oliver.upton@linux.dev \
--cc=robin.murphy@arm.com \
--cc=ryan.roberts@arm.com \
--cc=smostafa@google.com \
--cc=will@kernel.org \
--cc=yang@os.amperecomputing.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox