With the introduction of 'cce360b54ce6 ("arm64: capabilities: Filter the entries based on a given mask")' the Qualcomm erratas are no long applied.
The result of not applying errata 1003 is that MSM8996 runs into various RCU stalls and fails to boot most of the times.
Give both 1003 and 1009 a "type" to ensure they are not filtered out in update_cpu_capabilities().
Fixes: cce360b54ce6 ("arm64: capabilities: Filter the entries based on a given mask") Cc: stable@vger.kernel.org Reported-by: Mark Brown broonie@kernel.org Suggested-by: Will Deacon will@kernel.org Signed-off-by: Bjorn Andersson bjorn.andersson@linaro.org --- arch/arm64/kernel/cpu_errata.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c index df9465120e2f..cdd8df033536 100644 --- a/arch/arm64/kernel/cpu_errata.c +++ b/arch/arm64/kernel/cpu_errata.c @@ -780,6 +780,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = { { .desc = "Qualcomm Technologies Falkor/Kryo erratum 1003", .capability = ARM64_WORKAROUND_QCOM_FALKOR_E1003, + .type = ARM64_CPUCAP_SCOPE_LOCAL_CPU, .matches = cpucap_multi_entry_cap_matches, .match_list = qcom_erratum_1003_list, }, @@ -788,6 +789,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = { { .desc = "Qualcomm erratum 1009, ARM erratum 1286807", .capability = ARM64_WORKAROUND_REPEAT_TLBI, + .type = ARM64_CPUCAP_SCOPE_LOCAL_CPU, ERRATA_MIDR_RANGE_LIST(arm64_repeat_tlbi_cpus), }, #endif
On Tue, 29 Oct 2019 at 07:04, Bjorn Andersson bjorn.andersson@linaro.org wrote:
With the introduction of 'cce360b54ce6 ("arm64: capabilities: Filter the entries based on a given mask")' the Qualcomm erratas are no long applied.
The result of not applying errata 1003 is that MSM8996 runs into various RCU stalls and fails to boot most of the times.
Give both 1003 and 1009 a "type" to ensure they are not filtered out in update_cpu_capabilities().
Fixes: cce360b54ce6 ("arm64: capabilities: Filter the entries based on a given mask") Cc: stable@vger.kernel.org Reported-by: Mark Brown broonie@kernel.org Suggested-by: Will Deacon will@kernel.org Signed-off-by: Bjorn Andersson bjorn.andersson@linaro.org
FYI the offending commit is now queued up for 4.14 as well.
arch/arm64/kernel/cpu_errata.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c index df9465120e2f..cdd8df033536 100644 --- a/arch/arm64/kernel/cpu_errata.c +++ b/arch/arm64/kernel/cpu_errata.c @@ -780,6 +780,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = { { .desc = "Qualcomm Technologies Falkor/Kryo erratum 1003", .capability = ARM64_WORKAROUND_QCOM_FALKOR_E1003,
.type = ARM64_CPUCAP_SCOPE_LOCAL_CPU, .matches = cpucap_multi_entry_cap_matches, .match_list = qcom_erratum_1003_list, },
@@ -788,6 +789,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = { { .desc = "Qualcomm erratum 1009, ARM erratum 1286807", .capability = ARM64_WORKAROUND_REPEAT_TLBI,
.type = ARM64_CPUCAP_SCOPE_LOCAL_CPU, ERRATA_MIDR_RANGE_LIST(arm64_repeat_tlbi_cpus), },
#endif
2.23.0
linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
On Mon, Oct 28, 2019 at 11:04:32PM -0700, Bjorn Andersson wrote:
With the introduction of 'cce360b54ce6 ("arm64: capabilities: Filter the entries based on a given mask")' the Qualcomm erratas are no long applied.
The result of not applying errata 1003 is that MSM8996 runs into various RCU stalls and fails to boot most of the times.
Give both 1003 and 1009 a "type" to ensure they are not filtered out in update_cpu_capabilities().
Oh nasty. Thanks for debugging and fixing this.
Fixes: cce360b54ce6 ("arm64: capabilities: Filter the entries based on a given mask") Cc: stable@vger.kernel.org Reported-by: Mark Brown broonie@kernel.org Suggested-by: Will Deacon will@kernel.org Signed-off-by: Bjorn Andersson bjorn.andersson@linaro.org
arch/arm64/kernel/cpu_errata.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c index df9465120e2f..cdd8df033536 100644 --- a/arch/arm64/kernel/cpu_errata.c +++ b/arch/arm64/kernel/cpu_errata.c @@ -780,6 +780,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = { { .desc = "Qualcomm Technologies Falkor/Kryo erratum 1003", .capability = ARM64_WORKAROUND_QCOM_FALKOR_E1003,
.matches = cpucap_multi_entry_cap_matches,.type = ARM64_CPUCAP_SCOPE_LOCAL_CPU,
This should probably be ARM64_CPUCAP_LOCAL_CPU_ERRATUM instead, but I'll want Suzuki's ack before I take the change.
.match_list = qcom_erratum_1003_list,
}, @@ -788,6 +789,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = { { .desc = "Qualcomm erratum 1009, ARM erratum 1286807", .capability = ARM64_WORKAROUND_REPEAT_TLBI,
ERRATA_MIDR_RANGE_LIST(arm64_repeat_tlbi_cpus),.type = ARM64_CPUCAP_SCOPE_LOCAL_CPU,
ERRATA_MIDR_RANGE_LIST sets the type already, so I think this is redundant.
Will
On 10/29/2019 11:39 AM, Will Deacon wrote:
On Mon, Oct 28, 2019 at 11:04:32PM -0700, Bjorn Andersson wrote:
With the introduction of 'cce360b54ce6 ("arm64: capabilities: Filter the entries based on a given mask")' the Qualcomm erratas are no long applied.
The result of not applying errata 1003 is that MSM8996 runs into various RCU stalls and fails to boot most of the times.
Give both 1003 and 1009 a "type" to ensure they are not filtered out in update_cpu_capabilities().
Oh nasty. Thanks for debugging and fixing this.
Fixes: cce360b54ce6 ("arm64: capabilities: Filter the entries based on a given mask") Cc: stable@vger.kernel.org Reported-by: Mark Brown broonie@kernel.org Suggested-by: Will Deacon will@kernel.org Signed-off-by: Bjorn Andersson bjorn.andersson@linaro.org
arch/arm64/kernel/cpu_errata.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c index df9465120e2f..cdd8df033536 100644 --- a/arch/arm64/kernel/cpu_errata.c +++ b/arch/arm64/kernel/cpu_errata.c @@ -780,6 +780,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = { { .desc = "Qualcomm Technologies Falkor/Kryo erratum 1003", .capability = ARM64_WORKAROUND_QCOM_FALKOR_E1003,
.matches = cpucap_multi_entry_cap_matches,.type = ARM64_CPUCAP_SCOPE_LOCAL_CPU,
This should probably be ARM64_CPUCAP_LOCAL_CPU_ERRATUM instead, but I'll want Suzuki's ack before I take the change.
Yes, it must be ARM64_CPUCAP_LOCAL_CPU_ERRATUM.
It may be a good idea to stick in a check to make sure that the scope is set for all the capabilities in a separate patch. e.g,
diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index d260e3bdf07b..51a79b4a44eb 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -546,6 +546,8 @@ static void __init init_cpu_hwcaps_indirect_list_from_array(const struct arm64_cpu_capabilities *caps) { for (; caps->matches; caps++) { + WARN(!cpucap_default_scope(caps), + "Invalid scope for capability %d\n", caps->capability); if (WARN(caps->capability >= ARM64_NCAPS, "Invalid capability %d\n", caps->capability)) continue;
Otherwise looks good to me.
.match_list = qcom_erratum_1003_list,
}, @@ -788,6 +789,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = { { .desc = "Qualcomm erratum 1009, ARM erratum 1286807", .capability = ARM64_WORKAROUND_REPEAT_TLBI,
ERRATA_MIDR_RANGE_LIST(arm64_repeat_tlbi_cpus),.type = ARM64_CPUCAP_SCOPE_LOCAL_CPU,
ERRATA_MIDR_RANGE_LIST sets the type already, so I think this is redundant.
Will
Cheers Suzuki
On Tue 29 Oct 05:04 PDT 2019, Suzuki K Poulose wrote:
On 10/29/2019 11:39 AM, Will Deacon wrote:
On Mon, Oct 28, 2019 at 11:04:32PM -0700, Bjorn Andersson wrote:
With the introduction of 'cce360b54ce6 ("arm64: capabilities: Filter the entries based on a given mask")' the Qualcomm erratas are no long applied.
The result of not applying errata 1003 is that MSM8996 runs into various RCU stalls and fails to boot most of the times.
Give both 1003 and 1009 a "type" to ensure they are not filtered out in update_cpu_capabilities().
Oh nasty. Thanks for debugging and fixing this.
Fixes: cce360b54ce6 ("arm64: capabilities: Filter the entries based on a given mask") Cc: stable@vger.kernel.org Reported-by: Mark Brown broonie@kernel.org Suggested-by: Will Deacon will@kernel.org Signed-off-by: Bjorn Andersson bjorn.andersson@linaro.org
arch/arm64/kernel/cpu_errata.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c index df9465120e2f..cdd8df033536 100644 --- a/arch/arm64/kernel/cpu_errata.c +++ b/arch/arm64/kernel/cpu_errata.c @@ -780,6 +780,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = { { .desc = "Qualcomm Technologies Falkor/Kryo erratum 1003", .capability = ARM64_WORKAROUND_QCOM_FALKOR_E1003,
.matches = cpucap_multi_entry_cap_matches,.type = ARM64_CPUCAP_SCOPE_LOCAL_CPU,
This should probably be ARM64_CPUCAP_LOCAL_CPU_ERRATUM instead, but I'll want Suzuki's ack before I take the change.
Yes, it must be ARM64_CPUCAP_LOCAL_CPU_ERRATUM.
Thanks, will fix.
It may be a good idea to stick in a check to make sure that the scope is set for all the capabilities in a separate patch. e.g,
diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index d260e3bdf07b..51a79b4a44eb 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -546,6 +546,8 @@ static void __init init_cpu_hwcaps_indirect_list_from_array(const struct arm64_cpu_capabilities *caps) { for (; caps->matches; caps++) {
WARN(!cpucap_default_scope(caps),
if (WARN(caps->capability >= ARM64_NCAPS, "Invalid capability %d\n", caps->capability)) continue;"Invalid scope for capability %d\n", caps->capability);
In hindsight this would have saved me a considerable amount of time, so I like this proposal!
Regards, Bjorn
Otherwise looks good to me.
.match_list = qcom_erratum_1003_list,
}, @@ -788,6 +789,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = { { .desc = "Qualcomm erratum 1009, ARM erratum 1286807", .capability = ARM64_WORKAROUND_REPEAT_TLBI,
ERRATA_MIDR_RANGE_LIST(arm64_repeat_tlbi_cpus),.type = ARM64_CPUCAP_SCOPE_LOCAL_CPU,
ERRATA_MIDR_RANGE_LIST sets the type already, so I think this is redundant.
Will
Cheers Suzuki
On Tue 29 Oct 04:39 PDT 2019, Will Deacon wrote:
On Mon, Oct 28, 2019 at 11:04:32PM -0700, Bjorn Andersson wrote:
With the introduction of 'cce360b54ce6 ("arm64: capabilities: Filter the entries based on a given mask")' the Qualcomm erratas are no long applied.
The result of not applying errata 1003 is that MSM8996 runs into various RCU stalls and fails to boot most of the times.
Give both 1003 and 1009 a "type" to ensure they are not filtered out in update_cpu_capabilities().
Oh nasty. Thanks for debugging and fixing this.
Fixes: cce360b54ce6 ("arm64: capabilities: Filter the entries based on a given mask") Cc: stable@vger.kernel.org Reported-by: Mark Brown broonie@kernel.org Suggested-by: Will Deacon will@kernel.org Signed-off-by: Bjorn Andersson bjorn.andersson@linaro.org
arch/arm64/kernel/cpu_errata.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c index df9465120e2f..cdd8df033536 100644 --- a/arch/arm64/kernel/cpu_errata.c +++ b/arch/arm64/kernel/cpu_errata.c @@ -780,6 +780,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = { { .desc = "Qualcomm Technologies Falkor/Kryo erratum 1003", .capability = ARM64_WORKAROUND_QCOM_FALKOR_E1003,
.matches = cpucap_multi_entry_cap_matches,.type = ARM64_CPUCAP_SCOPE_LOCAL_CPU,
This should probably be ARM64_CPUCAP_LOCAL_CPU_ERRATUM instead, but I'll want Suzuki's ack before I take the change.
Sure thing, will fix!
.match_list = qcom_erratum_1003_list,
}, @@ -788,6 +789,7 @@ const struct arm64_cpu_capabilities arm64_errata[] = { { .desc = "Qualcomm erratum 1009, ARM erratum 1286807", .capability = ARM64_WORKAROUND_REPEAT_TLBI,
ERRATA_MIDR_RANGE_LIST(arm64_repeat_tlbi_cpus),.type = ARM64_CPUCAP_SCOPE_LOCAL_CPU,
ERRATA_MIDR_RANGE_LIST sets the type already, so I think this is redundant.
You're right, I got lost in the macros. Apologies for that.
Will respin the patch.
Thanks, Bjorn
linux-stable-mirror@lists.linaro.org