arm64: skip register_cpufreq_notifier on ACPI-based systems

On ACPI based systems where the topology is setup using the API
store_cpu_topology, at the moment we do not have necessary code
to parse cpu capacity and handle cpufreq notifier, thus
resulting in a kernel panic.

Stack:
init_cpu_capacity_callback+0xb4/0x1c8
notifier_call_chain+0x5c/0xa0
__blocking_notifier_call_chain+0x58/0xa0
blocking_notifier_call_chain+0x3c/0x50
cpufreq_set_policy+0xe4/0x328
cpufreq_init_policy+0x80/0x100
cpufreq_online+0x418/0x710
cpufreq_add_dev+0x118/0x180
subsys_interface_register+0xa4/0xf8
cpufreq_register_driver+0x1c0/0x298
cppc_cpufreq_init+0xdc/0x1000 [cppc_cpufreq]
do_one_initcall+0x5c/0x168
do_init_module+0x64/0x1e4
load_module+0x130c/0x14d0
SyS_finit_module+0x108/0x120
el0_svc_naked+0x24/0x28

Fixes: 7202bde8b7ae ("arm64: parse cpu capacity-dmips-mhz from DT")
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Prashanth Prakash <pprakash@codeaurora.org>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>

authored by Prashanth Prakash and committed by Catalin Marinas 606f4226 7a308bb3

+7 -1
+7 -1
arch/arm64/kernel/topology.c
··· 11 11 * for more details. 12 12 */ 13 13 14 + #include <linux/acpi.h> 14 15 #include <linux/cpu.h> 15 16 #include <linux/cpumask.h> 16 17 #include <linux/init.h> ··· 210 209 211 210 static int __init register_cpufreq_notifier(void) 212 211 { 213 - if (cap_parsing_failed) 212 + /* 213 + * on ACPI-based systems we need to use the default cpu capacity 214 + * until we have the necessary code to parse the cpu capacity, so 215 + * skip registering cpufreq notifier. 216 + */ 217 + if (!acpi_disabled || cap_parsing_failed) 214 218 return -EINVAL; 215 219 216 220 if (!alloc_cpumask_var(&cpus_to_visit, GFP_KERNEL)) {