STRUCT CLK_NOTIFIER(9)
π struct clk_notifier(9)
okay so bestie, welcome to the Kernel API Manual page for struct clk_notifier β yes that's the actual manual name, no I'm not making it up, it's giving "kernel internals at 2am" energy and honestly? iconic. this is the little struct that hooks a clk up to a notifier, and we're gonna go through it together π
β¨ NAME β¨
struct clk_notifier β associate a clk with a notifier π«
like, literally matchmaking but for kernel objects.
πΈ SYNOPSIS πΈ
struct clk_notifier {
struct clk *clk;
struct srcu_notifier_head notifier_head;
struct list_head node;
};
that's the whole struct, bestie. three members, zero drama. well, mostly zero drama π
π Members π
clkβ astruct clk *that you're associating the notifier with π«Ά like, this is the clock. the main character of the struct, fr fr.notifier_headβ ablocking_notifier_headfor this clk β (yes, that's what the page says β type in the struct isstruct srcu_notifier_head, the description calls it ablocking_notifier_head, and I'm just relaying, not editorializing π)nodeβ linked list pointers π so it can vibe in the list with all its struct friends.
π¦ Description π¦
so the notifier code keeps a list of struct clk_notifiers. it's maintained by the notifier code, it's a whole thing, it's organized. π
an entry gets created whenever code registers the first notifier on a particular clk π like the first one to show up gets to make the entry. main character move.
and after that? future notifiers on that same clk just get added to the notifier_head. no new entry, they just slide into the existing one. the way that works is honestly so satisfying β¨
π SEE ALSO π
okay this is the part where the manpage goes absolutely feral with cross-references, and I'm keeping every single one because I would never do you dirty like that. also first up, the kernel file itself:
./include/linux/clk.h
and then, in the exact order they appear:
clk notifier callback types(9)struct clk_notifier_data(9)struct clk_bulk_data(9)clk_notifier_register(9)clk_notifier_unregister(9)devm_clk_notifier_register(9)clk_get_accuracy(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_rate_exclusive_get(9)devm_clk_rate_exclusive_get(9)clk_rate_exclusive_put(9)clk_save_context(9)clk_restore_context(9)clk_prepare(9)clk_unprepare(9)clk_is_enabled_when_prepared(9)clk_get(9)clk_bulk_get(9)clk_bulk_get_all(9)clk_bulk_get_optional(9)devm_clk_bulk_get(9)devm_clk_bulk_get_optional(9)devm_clk_bulk_get_enable(9)devm_clk_bulk_get_optional_enable(9)devm_clk_bulk_get_all(9)devm_clk_bulk_get_all_enabled(9)devm_clk_get(9)devm_clk_get_prepared(9)devm_clk_get_enabled(9)devm_clk_get_optional(9)devm_clk_get_optional_prepared(9)devm_clk_get_optional_enabled(9)devm_clk_get_optional_enabled_with_rate(9)devm_get_clk_from_child(9)clk_enable(9)clk_bulk_enable(9)clk_disable(9)clk_bulk_disable(9)clk_get_rate(9)clk_put(9)clk_bulk_put(9)clk_bulk_put_all(9)devm_clk_put(9)clk_round_rate(9)clk_set_rate(9)clk_set_rate_exclusive(9)clk_has_parent(9)clk_set_rate_range(9)clk_set_min_rate(9)clk_set_max_rate(9)clk_set_parent(9)clk_get_parent(9)clk_get_sys(9)clk_drop_range(9)clk_get_optional(9)
bestie that is sixty references. sixty!! the clk subsystem said "here's the whole extended universe" and I respect it deeply π«‘
and that's the page!! ππ hope the clk notifier situation is fully clear now, you're gonna slay those registrations, I believe in you.
cute little sign-off time: this one lives out of ./include/linux, stamped October 2026, and it's filed under struct clk_notifier(9) β go off, kernel docs, periodt β¨π¦
π¦ 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