Commit 966c08de authored by Oliver O'Halloran's avatar Oliver O'Halloran Committed by Michael Ellerman

cpufreq: powernv: Fix unsafe notifiers

The PowerNV cpufreq driver registers two notifiers: one to catch
throttle messages from the OCC and one to bump the CPU frequency back
to normal before a reboot. Both require the cpufreq driver to be
registered in order to function since the notifier callbacks use
various cpufreq_*() functions.

Right now we register both notifiers before we've initialised the
driver. This seems to work, but we should head off any protential
problems by registering the notifiers after the driver is initialised.
Signed-off-by: default avatarOliver O'Halloran <oohall@gmail.com>
Reviewed-by: default avatarGautham R. Shenoy <ego@linux.vnet.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200206062622.28235-2-oohall@gmail.com
parent d0a72efa
...@@ -1114,9 +1114,6 @@ static int __init powernv_cpufreq_init(void) ...@@ -1114,9 +1114,6 @@ static int __init powernv_cpufreq_init(void)
if (rc) if (rc)
goto out; goto out;
register_reboot_notifier(&powernv_cpufreq_reboot_nb);
opal_message_notifier_register(OPAL_MSG_OCC, &powernv_cpufreq_opal_nb);
if (powernv_pstate_info.wof_enabled) if (powernv_pstate_info.wof_enabled)
powernv_cpufreq_driver.boost_enabled = true; powernv_cpufreq_driver.boost_enabled = true;
else else
...@@ -1125,15 +1122,17 @@ static int __init powernv_cpufreq_init(void) ...@@ -1125,15 +1122,17 @@ static int __init powernv_cpufreq_init(void)
rc = cpufreq_register_driver(&powernv_cpufreq_driver); rc = cpufreq_register_driver(&powernv_cpufreq_driver);
if (rc) { if (rc) {
pr_info("Failed to register the cpufreq driver (%d)\n", rc); pr_info("Failed to register the cpufreq driver (%d)\n", rc);
goto cleanup_notifiers; goto cleanup;
} }
if (powernv_pstate_info.wof_enabled) if (powernv_pstate_info.wof_enabled)
cpufreq_enable_boost_support(); cpufreq_enable_boost_support();
register_reboot_notifier(&powernv_cpufreq_reboot_nb);
opal_message_notifier_register(OPAL_MSG_OCC, &powernv_cpufreq_opal_nb);
return 0; return 0;
cleanup_notifiers: cleanup:
unregister_all_notifiers();
clean_chip_info(); clean_chip_info();
out: out:
pr_info("Platform driver disabled. System does not support PState control\n"); pr_info("Platform driver disabled. System does not support PState control\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment