From: Punit Agrawal <punit.agrawal@bytedance.com>
To: Jeremy Linton <jeremy.linton@arm.com>
Cc: linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com,
will@kernel.org, mark.rutland@arm.com, maz@kernel.org,
anshuman.khandual@arm.com, krisman@suse.de, broonie@kernel.org,
james.morse@arm.com, ionela.voinescu@arm.com,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] arm64: cpufeature: Display the set of cores with a feature
Date: Fri, 20 Oct 2023 13:51:59 +0100 [thread overview]
Message-ID: <874jilpic0.fsf@gmail.com> (raw)
In-Reply-To: <20231013013016.197102-1-jeremy.linton@arm.com> (Jeremy Linton's message of "Thu, 12 Oct 2023 20:30:16 -0500")
Jeremy Linton <jeremy.linton@arm.com> writes:
> The AMU feature can be enabled on a subset of the cores in a system.
> Because of that, it prints a message for each core as it is detected.
> This becomes tedious when there are hundreds of cores. Instead, for
> CPU features which can be enabled on a subset of the present cores,
> lets wait until update_cpu_capabilities() and print the subset of cores
> the feature was enabled on.
>
> Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
> ---
> arch/arm64/include/asm/cpufeature.h | 2 ++
> arch/arm64/kernel/cpufeature.c | 16 +++++++++++++---
> 2 files changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h
> index 5bba39376055..19b4d001d845 100644
> --- a/arch/arm64/include/asm/cpufeature.h
> +++ b/arch/arm64/include/asm/cpufeature.h
> @@ -23,6 +23,7 @@
> #include <linux/bug.h>
> #include <linux/jump_label.h>
> #include <linux/kernel.h>
> +#include <linux/cpumask.h>
>
> /*
> * CPU feature register tracking
> @@ -380,6 +381,7 @@ struct arm64_cpu_capabilities {
> * method is robust against being called multiple times.
> */
> const struct arm64_cpu_capabilities *match_list;
> + const struct cpumask *cpus;
> };
>
> static inline int cpucap_default_scope(const struct arm64_cpu_capabilities *cap)
> diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
> index 444a73c2e638..18711e35924c 100644
> --- a/arch/arm64/kernel/cpufeature.c
> +++ b/arch/arm64/kernel/cpufeature.c
> @@ -1944,8 +1944,6 @@ int get_cpu_with_amu_feat(void)
> static void cpu_amu_enable(struct arm64_cpu_capabilities const *cap)
> {
> if (has_cpuid_feature(cap, SCOPE_LOCAL_CPU)) {
> - pr_info("detected CPU%d: Activity Monitors Unit (AMU)\n",
> - smp_processor_id());
> cpumask_set_cpu(smp_processor_id(), &amu_cpus);
>
> /* 0 reference values signal broken/disabled counters */
> @@ -2411,10 +2409,12 @@ static const struct arm64_cpu_capabilities arm64_features[] = {
> * message to be shown until at least one CPU is detected to
> * support the feature.
> */
> + .desc = "Activity Monitors Unit (AMU)",
> .capability = ARM64_HAS_AMU_EXTN,
> .type = ARM64_CPUCAP_WEAK_LOCAL_CPU_FEATURE,
> .matches = has_amu,
> .cpu_enable = cpu_amu_enable,
> + .cpus = &amu_cpus,
> ARM64_CPUID_FIELDS(ID_AA64PFR0_EL1, AMU, IMP)
> },
> #endif /* CONFIG_ARM64_AMU_EXTN */
> @@ -2981,7 +2981,7 @@ static void update_cpu_capabilities(u16 scope_mask)
> !caps->matches(caps, cpucap_default_scope(caps)))
> continue;
>
> - if (caps->desc)
> + if (caps->desc && !caps->cpus)
> pr_info("detected: %s\n", caps->desc);
>
> __set_bit(caps->capability, system_cpucaps);
> @@ -3330,6 +3330,7 @@ unsigned long cpu_get_elf_hwcap2(void)
>
> static void __init setup_system_capabilities(void)
> {
> + int i;
> /*
> * We have finalised the system-wide safe feature
> * registers, finalise the capabilities that depend
> @@ -3338,6 +3339,15 @@ static void __init setup_system_capabilities(void)
> */
> update_cpu_capabilities(SCOPE_SYSTEM);
> enable_cpu_capabilities(SCOPE_ALL & ~SCOPE_BOOT_CPU);
> +
> + for (i = 0; i < ARM64_NCAPS; i++) {
> + const struct arm64_cpu_capabilities *caps = cpucap_ptrs[i];
> +
> + if (caps && caps->cpus && caps->desc &&
> + cpumask_any(caps->cpus) < nr_cpu_ids)
> + pr_info("detected: %s on CPU%*pbl\n",
> + caps->desc, cpumask_pr_args(caps->cpus));
> + }
> }
>
> void __init setup_cpu_features(void)
Thanks, Jeremy for putting this patch together. The duplicated prints
bothered me too every time I stared at the boot logs.
Fwiw,,
Reviewed-by: Punit Agrawal <punit.agrawal@bytedance.com>
Tested-by: Punit Agrawal <punit.agrawal@bytedance.com>
The patch was verified on an N2 based platform.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Punit Agrawal <punit.agrawal@bytedance.com>
To: Jeremy Linton <jeremy.linton@arm.com>
Cc: linux-arm-kernel@lists.infradead.org, catalin.marinas@arm.com,
will@kernel.org, mark.rutland@arm.com, maz@kernel.org,
anshuman.khandual@arm.com, krisman@suse.de, broonie@kernel.org,
james.morse@arm.com, ionela.voinescu@arm.com,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] arm64: cpufeature: Display the set of cores with a feature
Date: Fri, 20 Oct 2023 13:51:59 +0100 [thread overview]
Message-ID: <874jilpic0.fsf@gmail.com> (raw)
In-Reply-To: <20231013013016.197102-1-jeremy.linton@arm.com> (Jeremy Linton's message of "Thu, 12 Oct 2023 20:30:16 -0500")
Jeremy Linton <jeremy.linton@arm.com> writes:
> The AMU feature can be enabled on a subset of the cores in a system.
> Because of that, it prints a message for each core as it is detected.
> This becomes tedious when there are hundreds of cores. Instead, for
> CPU features which can be enabled on a subset of the present cores,
> lets wait until update_cpu_capabilities() and print the subset of cores
> the feature was enabled on.
>
> Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
> ---
> arch/arm64/include/asm/cpufeature.h | 2 ++
> arch/arm64/kernel/cpufeature.c | 16 +++++++++++++---
> 2 files changed, 15 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h
> index 5bba39376055..19b4d001d845 100644
> --- a/arch/arm64/include/asm/cpufeature.h
> +++ b/arch/arm64/include/asm/cpufeature.h
> @@ -23,6 +23,7 @@
> #include <linux/bug.h>
> #include <linux/jump_label.h>
> #include <linux/kernel.h>
> +#include <linux/cpumask.h>
>
> /*
> * CPU feature register tracking
> @@ -380,6 +381,7 @@ struct arm64_cpu_capabilities {
> * method is robust against being called multiple times.
> */
> const struct arm64_cpu_capabilities *match_list;
> + const struct cpumask *cpus;
> };
>
> static inline int cpucap_default_scope(const struct arm64_cpu_capabilities *cap)
> diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
> index 444a73c2e638..18711e35924c 100644
> --- a/arch/arm64/kernel/cpufeature.c
> +++ b/arch/arm64/kernel/cpufeature.c
> @@ -1944,8 +1944,6 @@ int get_cpu_with_amu_feat(void)
> static void cpu_amu_enable(struct arm64_cpu_capabilities const *cap)
> {
> if (has_cpuid_feature(cap, SCOPE_LOCAL_CPU)) {
> - pr_info("detected CPU%d: Activity Monitors Unit (AMU)\n",
> - smp_processor_id());
> cpumask_set_cpu(smp_processor_id(), &amu_cpus);
>
> /* 0 reference values signal broken/disabled counters */
> @@ -2411,10 +2409,12 @@ static const struct arm64_cpu_capabilities arm64_features[] = {
> * message to be shown until at least one CPU is detected to
> * support the feature.
> */
> + .desc = "Activity Monitors Unit (AMU)",
> .capability = ARM64_HAS_AMU_EXTN,
> .type = ARM64_CPUCAP_WEAK_LOCAL_CPU_FEATURE,
> .matches = has_amu,
> .cpu_enable = cpu_amu_enable,
> + .cpus = &amu_cpus,
> ARM64_CPUID_FIELDS(ID_AA64PFR0_EL1, AMU, IMP)
> },
> #endif /* CONFIG_ARM64_AMU_EXTN */
> @@ -2981,7 +2981,7 @@ static void update_cpu_capabilities(u16 scope_mask)
> !caps->matches(caps, cpucap_default_scope(caps)))
> continue;
>
> - if (caps->desc)
> + if (caps->desc && !caps->cpus)
> pr_info("detected: %s\n", caps->desc);
>
> __set_bit(caps->capability, system_cpucaps);
> @@ -3330,6 +3330,7 @@ unsigned long cpu_get_elf_hwcap2(void)
>
> static void __init setup_system_capabilities(void)
> {
> + int i;
> /*
> * We have finalised the system-wide safe feature
> * registers, finalise the capabilities that depend
> @@ -3338,6 +3339,15 @@ static void __init setup_system_capabilities(void)
> */
> update_cpu_capabilities(SCOPE_SYSTEM);
> enable_cpu_capabilities(SCOPE_ALL & ~SCOPE_BOOT_CPU);
> +
> + for (i = 0; i < ARM64_NCAPS; i++) {
> + const struct arm64_cpu_capabilities *caps = cpucap_ptrs[i];
> +
> + if (caps && caps->cpus && caps->desc &&
> + cpumask_any(caps->cpus) < nr_cpu_ids)
> + pr_info("detected: %s on CPU%*pbl\n",
> + caps->desc, cpumask_pr_args(caps->cpus));
> + }
> }
>
> void __init setup_cpu_features(void)
Thanks, Jeremy for putting this patch together. The duplicated prints
bothered me too every time I stared at the boot logs.
Fwiw,,
Reviewed-by: Punit Agrawal <punit.agrawal@bytedance.com>
Tested-by: Punit Agrawal <punit.agrawal@bytedance.com>
The patch was verified on an N2 based platform.
next prev parent reply other threads:[~2023-10-20 12:52 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-13 1:30 [PATCH] arm64: cpufeature: Display the set of cores with a feature Jeremy Linton
2023-10-13 1:30 ` Jeremy Linton
2023-10-13 8:29 ` Will Deacon
2023-10-13 8:29 ` Will Deacon
2023-10-13 11:08 ` Mark Brown
2023-10-13 11:08 ` Mark Brown
2023-10-13 14:57 ` Ionela Voinescu
2023-10-13 14:57 ` Ionela Voinescu
2023-10-20 12:51 ` Punit Agrawal [this message]
2023-10-20 12:51 ` Punit Agrawal
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=874jilpic0.fsf@gmail.com \
--to=punit.agrawal@bytedance.com \
--cc=anshuman.khandual@arm.com \
--cc=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=ionela.voinescu@arm.com \
--cc=james.morse@arm.com \
--cc=jeremy.linton@arm.com \
--cc=krisman@suse.de \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--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 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.