Skip to content

Commit

Permalink
cpufreq: powernv: Fix unsafe notifiers
Browse files Browse the repository at this point in the history
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: Oliver O'Halloran <oohall@gmail.com>
Reviewed-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200206062622.28235-2-oohall@gmail.com
  • Loading branch information
Oliver O'Halloran authored and Michael Ellerman committed Mar 13, 2020
1 parent d0a72ef commit 966c08d
Showing 1 changed file with 5 additions and 6 deletions.
11 changes: 5 additions & 6 deletions drivers/cpufreq/powernv-cpufreq.c
Original file line number Diff line number Diff line change
Expand Up @@ -1114,9 +1114,6 @@ static int __init powernv_cpufreq_init(void)
if (rc)
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)
powernv_cpufreq_driver.boost_enabled = true;
else
Expand All @@ -1125,15 +1122,17 @@ static int __init powernv_cpufreq_init(void)
rc = cpufreq_register_driver(&powernv_cpufreq_driver);
if (rc) {
pr_info("Failed to register the cpufreq driver (%d)\n", rc);
goto cleanup_notifiers;
goto cleanup;
}

if (powernv_pstate_info.wof_enabled)
cpufreq_enable_boost_support();

register_reboot_notifier(&powernv_cpufreq_reboot_nb);
opal_message_notifier_register(OPAL_MSG_OCC, &powernv_cpufreq_opal_nb);

return 0;
cleanup_notifiers:
unregister_all_notifiers();
cleanup:
clean_chip_info();
out:
pr_info("Platform driver disabled. System does not support PState control\n");
Expand Down

0 comments on commit 966c08d

Please sign in to comment.