clk_pm_runtime_get_all(9)
okay bestie, welcome to the clk_pm_runtime_get_all(9) page from the Kernel API Manual β¨ this one is a runtime-PM anti-deadlock baddie and she ate π
π NAME π
clk_pm_runtime_get_all β runtime "get" all clk provider devices, no cap π
β¨ SYNOPSIS β¨
int clk_pm_runtime_get_all (void );
π ARGUMENTS π
voidβ no arguments. literally none. not a single little guy. π«Ά
π¦ DESCRIPTION π¦
okay so the whole move here is: call clk_pm_runtime_get on all runtime PM enabled clks in the clk tree so that disabling unused clks avoids a deadlock. yes, deadlock. the final boss of "why is my kernel stuck" energy π
the deadlock situation is giving: a device is runtime PM resuming/suspending, and the runtime PM callback is trying to grab the prepare_lock for something like clk_prepare_enable, while clk_disable_unused_subtree holds the prepare_lock and is trying to runtime PM resume/suspend the device as well. circular wait vibes, absolutely not iconic π
π CONTEXT π
acquires the 'clk_rpm_list_lock' and returns with the lock held on success. otherwise the lock is released on failure. no sneaky half-held lock energy, bestie π
β RETURN β
0on success- negative
errnootherwise
that's the whole mood. success = 0, anything else = negative errno π«‘
π SEE ALSO π
the whole squad, in original order, no skips:
- Kernel file
./drivers/clk/clk.cstruct clk_core(9) clk_pm_runtime_put_all(9)clk_core_get(9)clk_determine_rate_noop(9)clk_rate_exclusive_put(9)clk_rate_exclusive_get(9)clk_unprepare(9)clk_prepare(9)clk_disable(9)clk_gate_restore_context(9)clk_save_context(9)clk_restore_context(9)clk_enable(9)clk_is_enabled_when_prepared(9)clk_hw_init_rate_request(9)clk_hw_forward_rate_request(9)__clk_determine_rate(9)clk_hw_round_rate(9)clk_round_rate(9)__clk_notify(9)__clk_recalc_accuracies(9)clk_get_accuracy(9)__clk_recalc_rates(9)clk_get_rate(9)clk_hw_get_parent_index(9)__clk_speculate_rates(9)clk_set_rate(9)clk_set_rate_exclusive(9)clk_set_rate_range(9)clk_set_min_rate(9)clk_set_max_rate(9)clk_get_parent(9)clk_has_parent(9)clk_set_parent(9)clk_set_phase(9)clk_get_phase(9)clk_set_duty_cycle(9)clk_get_scaled_duty_cycle(9)clk_is_match(9)clk_debug_register(9)clk_debug_init(9)__clk_core_init(9)clk_core_link_consumer(9)clk_core_unlink_consumer(9)alloc_clk(9)free_clk(9)clk_hw_create_clk(9)clk_hw_get_clk(9)dev_or_parent_of_node(9)clk_register(9)clk_hw_register(9)clk_unregister(9)clk_hw_unregister(9)devm_clk_register(9)devm_clk_hw_register(9)devm_clk_hw_get_clk(9)clk_notifier_register(9)clk_notifier_unregister(9)struct of_clk_provider(9)of_clk_add_provider(9)of_clk_add_hw_provider(9)devm_of_clk_add_hw_provider(9)of_clk_del_provider(9)of_parse_clkspec(9)of_clk_get_from_provider(9)of_clk_get_by_name(9)of_clk_get_parent_count(9)of_clk_parent_fill(9)of_clk_detect_critical(9)of_clk_init(9)
okay that's the page, bestie π source/version stamp: ./drivers/clk; date on this cutie: October 2026; and yes, it's still the clk_pm_runtime_get_all(9) manual page. bye bestie, go get all those clks π«Άβ¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms