genpd_sync_power_off(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… genpd_sync_power_off β€” from the Kernel API Manual, section (9)

okay so bestie, gather round, because this one is a sleeper hit. It's genpd_sync_power_off, and it lives in the Kernel API Manual at section 9 β€” very official, very demure.


✨ NAME ✨

genpd_sync_power_off β€” Synchronously power off a PM domain and its parents. 🫢


πŸŽ€ SYNOPSIS πŸŽ€

void genpd_sync_power_off (struct generic_pm_domain *genpd , bool
use_lock , unsigned int depth );

like, that's the whole signature. no notes. πŸ”₯


🌸 ARGUMENTS 🌸

  • genpd β€” PM domain to power off, if possible. (key words: if possible β€” girlie checks first, she's not reckless πŸ’…)
  • use_lock β€” use the lock. that's it. that's the whole description. iconic brevity.
  • depth β€” nesting count for lockdep. it's giving "inception but for locks" πŸŒ€

πŸ¦‹ DESCRIPTION πŸ¦‹

So here's the vibe: this function checks if the given PM domain can be powered off β€” and it's specifically talking about during system suspend or hibernation, iykyk β€” and then it does that if so. ✨ And get this: also, in that case propagate to its parents. yes ma'am, the whole family tree gets the news. 🌈

okay but fr fr, read this part twice: this function is only called in the "noirq" and "syscore" stages of system power transitions. And the "noirq" callbacks may be executed asynchronously, so in these cases the lock must be held. 😭 not a suggestion, bestie β€” hold the lock.

πŸ‘‘ SEE ALSO πŸ‘‘

Kernel file ./drivers/pmdomain/core.c β€” the mothership. πŸš€

And now, the extended genpd cinematic universe (all section 9, no cap):

  • dev_pm_genpd_set_performance_state(9), dev_pm_genpd_set_next_wakeup(9), dev_pm_genpd_get_next_hrtimer(9), dev_pm_genpd_set_hwmode(9), dev_pm_genpd_get_hwmode(9), dev_pm_genpd_rpm_always_on(9), dev_pm_genpd_is_on(9), pm_genpd_inc_rejected(9)
  • genpd_queue_power_off_work(9), genpd_power_off(9), genpd_power_on(9), genpd_power_off_work_fn(9), __genpd_runtime_suspend(9), __genpd_runtime_resume(9), genpd_runtime_suspend(9), genpd_runtime_resume(9), genpd_power_off_unused(9), genpd_sync_power_on(9)
  • genpd_prepare(9), genpd_finish_suspend(9), genpd_suspend_noirq(9), genpd_finish_resume(9), genpd_resume_noirq(9), genpd_freeze_noirq(9), genpd_thaw_noirq(9), genpd_poweroff_noirq(9), genpd_restore_noirq(9), genpd_complete(9)
  • dev_pm_genpd_suspend(9), dev_pm_genpd_resume(9), pm_genpd_add_device(9), pm_genpd_remove_device(9), dev_pm_genpd_add_notifier(9), dev_pm_genpd_remove_notifier(9), pm_genpd_add_subdomain(9), pm_genpd_remove_subdomain(9), pm_genpd_init(9), pm_genpd_remove(9)
  • struct of_genpd_provider(9), genpd_xlate_simple(9), genpd_xlate_onecell(9), genpd_add_provider(9), of_genpd_add_provider_simple(9), of_genpd_add_provider_onecell(9), of_genpd_del_provider(9), genpd_get_from_provider(9)
  • of_genpd_add_child_ids(9), of_genpd_remove_child_ids(9), of_genpd_add_device(9), of_genpd_add_subdomain(9), of_genpd_remove_subdomain(9), of_genpd_remove_last(9)
  • genpd_dev_pm_detach(9), genpd_dev_pm_attach(9), genpd_dev_pm_attach_by_id(9), genpd_dev_pm_attach_by_name(9), of_genpd_parse_idle_states(9), of_genpd_sync_state(9)

like, that's the whole friend group. go say hi to all of them. πŸ«ΆπŸ’–


later bestie β€” this page came out of ./drivers/pmdomain, dated October 2026, and it'll be waiting for you under the very slay name genpd_sync_power_off(9). mwah. πŸ’‹βœ¨

πŸ“¦ where this page comes from