From: Marc Zyngier <maz@kernel.org>
To: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
kvm@vger.kernel.org, James Morse <james.morse@arm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Oliver Upton <oliver.upton@linux.dev>,
Zenghui Yu <yuzenghui@huawei.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>
Subject: Re: [PATCH 2/2] arm64: cpufeatures: Only check for NV1 if NV is present
Date: Tue, 13 Feb 2024 14:21:48 +0000 [thread overview]
Message-ID: <86bk8k5ts3.wl-maz@kernel.org> (raw)
In-Reply-To: <5b2d8fee-9d0f-48f7-b9ec-b86e95387a61@samsung.com>
On Tue, 13 Feb 2024 11:14:37 +0000,
Marek Szyprowski <m.szyprowski@samsung.com> wrote:
>
> Hi
>
> On 12.02.2024 15:47, Marc Zyngier wrote:
> > We handle ID_AA64MMFR4_EL1.E2H0 being 0 as NV1 being present.
> > However, this is only true if FEAT_NV is implemented.
> >
> > Add the required check to has_nv1(), avoiding spuriously advertising
> > NV1 on HW that doesn't have NV at all.
> >
> > Fixes: da9af5071b25 ("arm64: cpufeature: Detect HCR_EL2.NV1 being RES0")
> > Signed-off-by: Marc Zyngier <maz@kernel.org>
>
> This patch in turn introduces the following warning during boot
> (observed on today's linux-next):
>
> CPU: All CPU(s) started at EL2
> CPU features: detected: 32-bit EL0 Support
> CPU features: detected: 32-bit EL1 Support
> CPU features: detected: CRC32 instructions
> ------------[ cut here ]------------
> WARNING: CPU: 0 PID: 1 at arch/arm64/kernel/cpufeature.c:3369
> this_cpu_has_cap+0x18/0x70
> Modules linked in:
> CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.8.0-rc4-next-20240213 #8014
> Hardware name: Khadas VIM3 (DT)
> pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> pc : this_cpu_has_cap+0x18/0x70
> lr : has_nv1+0x24/0xcc
> ...
> Call trace:
> this_cpu_has_cap+0x18/0x70
> update_cpu_capabilities+0x50/0x134
> setup_system_features+0x30/0x120
> smp_cpus_done+0x48/0xb4
> smp_init+0x7c/0x8c
> kernel_init_freeable+0x18c/0x4e4
> kernel_init+0x20/0x1d8
> ret_from_fork+0x10/0x20
> irq event stamp: 2846
> hardirqs last enabled at (2845): [<ffff80008012cf5c>]
> console_unlock+0x164/0x190
> hardirqs last disabled at (2846): [<ffff80008123a078>] el1_dbg+0x24/0x8c
> softirqs last enabled at (2842): [<ffff800080010a60>]
> __do_softirq+0x4a0/0x4e8
> softirqs last disabled at (2827): [<ffff8000800169b0>]
> ____do_softirq+0x10/0x1c
> ---[ end trace 0000000000000000 ]---
> alternatives: applying system-wide alternatives
This is nothing short of embarrassing. It looks like I somehow managed
to drop CONFIG_PREEMPT from my test config, making it impossible to
identify these issues. Apologies for that.
The following patch fixes it for me. Could you please give it a go?
Thanks,
M.
From cd75279d3b6c387c13972b61c486a203d9652e97 Mon Sep 17 00:00:00 2001
From: Marc Zyngier <maz@kernel.org>
Date: Tue, 13 Feb 2024 13:37:57 +0000
Subject: [PATCH] arm64: cpufeatures: Fix FEAT_NV check when checking for
FEAT_NV1
Using this_cpu_has_cap() has the potential to go wrong when
used system-wide on a preemptible kernel. Instead, use the
__system_matches_cap() helper when checking for FEAT_NV in the
FEAT_NV1 probing helper.
Fixes: 3673d01a2f55 ("arm64: cpufeatures: Only check for NV1 if NV is present")
Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
arch/arm64/kernel/cpufeature.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
index 3421b684d340..f309fd542c20 100644
--- a/arch/arm64/kernel/cpufeature.c
+++ b/arch/arm64/kernel/cpufeature.c
@@ -1812,7 +1812,7 @@ static bool has_nv1(const struct arm64_cpu_capabilities *entry, int scope)
{}
};
- return (this_cpu_has_cap(ARM64_HAS_NESTED_VIRT) &&
+ return (__system_matches_cap(ARM64_HAS_NESTED_VIRT) &&
!(has_cpuid_feature(entry, scope) ||
is_midr_in_range_list(read_cpuid_id(), nv1_ni_list)));
}
--
2.39.2
--
Without deviation from the norm, progress is not possible.
WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <maz@kernel.org>
To: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
kvm@vger.kernel.org, James Morse <james.morse@arm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Oliver Upton <oliver.upton@linux.dev>,
Zenghui Yu <yuzenghui@huawei.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>
Subject: Re: [PATCH 2/2] arm64: cpufeatures: Only check for NV1 if NV is present
Date: Tue, 13 Feb 2024 14:21:48 +0000 [thread overview]
Message-ID: <86bk8k5ts3.wl-maz@kernel.org> (raw)
In-Reply-To: <5b2d8fee-9d0f-48f7-b9ec-b86e95387a61@samsung.com>
On Tue, 13 Feb 2024 11:14:37 +0000,
Marek Szyprowski <m.szyprowski@samsung.com> wrote:
>
> Hi
>
> On 12.02.2024 15:47, Marc Zyngier wrote:
> > We handle ID_AA64MMFR4_EL1.E2H0 being 0 as NV1 being present.
> > However, this is only true if FEAT_NV is implemented.
> >
> > Add the required check to has_nv1(), avoiding spuriously advertising
> > NV1 on HW that doesn't have NV at all.
> >
> > Fixes: da9af5071b25 ("arm64: cpufeature: Detect HCR_EL2.NV1 being RES0")
> > Signed-off-by: Marc Zyngier <maz@kernel.org>
>
> This patch in turn introduces the following warning during boot
> (observed on today's linux-next):
>
> CPU: All CPU(s) started at EL2
> CPU features: detected: 32-bit EL0 Support
> CPU features: detected: 32-bit EL1 Support
> CPU features: detected: CRC32 instructions
> ------------[ cut here ]------------
> WARNING: CPU: 0 PID: 1 at arch/arm64/kernel/cpufeature.c:3369
> this_cpu_has_cap+0x18/0x70
> Modules linked in:
> CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.8.0-rc4-next-20240213 #8014
> Hardware name: Khadas VIM3 (DT)
> pstate: 80000005 (Nzcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
> pc : this_cpu_has_cap+0x18/0x70
> lr : has_nv1+0x24/0xcc
> ...
> Call trace:
> this_cpu_has_cap+0x18/0x70
> update_cpu_capabilities+0x50/0x134
> setup_system_features+0x30/0x120
> smp_cpus_done+0x48/0xb4
> smp_init+0x7c/0x8c
> kernel_init_freeable+0x18c/0x4e4
> kernel_init+0x20/0x1d8
> ret_from_fork+0x10/0x20
> irq event stamp: 2846
> hardirqs last enabled at (2845): [<ffff80008012cf5c>]
> console_unlock+0x164/0x190
> hardirqs last disabled at (2846): [<ffff80008123a078>] el1_dbg+0x24/0x8c
> softirqs last enabled at (2842): [<ffff800080010a60>]
> __do_softirq+0x4a0/0x4e8
> softirqs last disabled at (2827): [<ffff8000800169b0>]
> ____do_softirq+0x10/0x1c
> ---[ end trace 0000000000000000 ]---
> alternatives: applying system-wide alternatives
This is nothing short of embarrassing. It looks like I somehow managed
to drop CONFIG_PREEMPT from my test config, making it impossible to
identify these issues. Apologies for that.
The following patch fixes it for me. Could you please give it a go?
Thanks,
M.
From cd75279d3b6c387c13972b61c486a203d9652e97 Mon Sep 17 00:00:00 2001
From: Marc Zyngier <maz@kernel.org>
Date: Tue, 13 Feb 2024 13:37:57 +0000
Subject: [PATCH] arm64: cpufeatures: Fix FEAT_NV check when checking for
FEAT_NV1
Using this_cpu_has_cap() has the potential to go wrong when
used system-wide on a preemptible kernel. Instead, use the
__system_matches_cap() helper when checking for FEAT_NV in the
FEAT_NV1 probing helper.
Fixes: 3673d01a2f55 ("arm64: cpufeatures: Only check for NV1 if NV is present")
Reported-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
arch/arm64/kernel/cpufeature.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
index 3421b684d340..f309fd542c20 100644
--- a/arch/arm64/kernel/cpufeature.c
+++ b/arch/arm64/kernel/cpufeature.c
@@ -1812,7 +1812,7 @@ static bool has_nv1(const struct arm64_cpu_capabilities *entry, int scope)
{}
};
- return (this_cpu_has_cap(ARM64_HAS_NESTED_VIRT) &&
+ return (__system_matches_cap(ARM64_HAS_NESTED_VIRT) &&
!(has_cpuid_feature(entry, scope) ||
is_midr_in_range_list(read_cpuid_id(), nv1_ni_list)));
}
--
2.39.2
--
Without deviation from the norm, progress is not possible.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2024-02-13 14:21 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-12 14:47 [PATCH 0/2] ARM64: Fixes for FEAT_E2H0 handling Marc Zyngier
2024-02-12 14:47 ` Marc Zyngier
2024-02-12 14:47 ` [PATCH 1/2] arm64: cpufeatures: Add missing ID_AA64MMFR4_EL1 to __read_sysreg_by_encoding() Marc Zyngier
2024-02-12 14:47 ` Marc Zyngier
2024-02-12 14:47 ` [PATCH 2/2] arm64: cpufeatures: Only check for NV1 if NV is present Marc Zyngier
2024-02-12 14:47 ` Marc Zyngier
2024-02-13 11:14 ` Marek Szyprowski
2024-02-13 11:14 ` Marek Szyprowski
2024-02-13 14:21 ` Marc Zyngier [this message]
2024-02-13 14:21 ` Marc Zyngier
2024-02-13 14:54 ` Suzuki K Poulose
2024-02-13 14:54 ` Suzuki K Poulose
2024-02-13 20:06 ` Marek Szyprowski
2024-02-13 20:06 ` Marek Szyprowski
2024-02-15 2:02 ` Oliver Upton
2024-02-15 2:02 ` Oliver Upton
2024-02-15 15:19 ` Marc Zyngier
2024-02-15 15:19 ` Marc Zyngier
2024-02-12 18:05 ` [PATCH 0/2] ARM64: Fixes for FEAT_E2H0 handling Oliver Upton
2024-02-12 18:05 ` Oliver Upton
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=86bk8k5ts3.wl-maz@kernel.org \
--to=maz@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=james.morse@arm.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=m.szyprowski@samsung.com \
--cc=oliver.upton@linux.dev \
--cc=suzuki.poulose@arm.com \
--cc=will@kernel.org \
--cc=yuzenghui@huawei.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.