device_for_...hild_reverse(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… device_for_...hild_reverse(9) β€” Kernel API Manual, bestie edition πŸŽ€

okay so picture this: it's a Kernel API Manual page, section 9, and the name got a lil truncated in the header (we don't talk about that, it's giving "username taken so I added an underscore"). Anyway. Sit down, grab a strawberry drink πŸ“, and let's talk about walking a device tree backwards.


✨ NAME ✨

device_for_each_child_reverse β€” the device child iterator but in reversed order, no cap πŸ¦‹


✨ SYNOPSIS ✨

int device_for_each_child_reverse (struct device *parent , void *data ,
device_iter_t fn );

🌸 ARGUMENTS 🌸

  • parent β€” the parent struct device. the main character of this whole operation πŸ‘‘
  • data β€” the data you're handing off to the callback. consider it the little gift bag you pass along πŸŽ€
  • fn β€” the function that gets called for each device. your callback, your moment to shine ✨

πŸ’– DESCRIPTION πŸ’–

so basically you iterate over parent's child devices, and for each one you call fn, passing it data. like a little roll call but in reverse and way cuter πŸ’…

and the way that we check the return of fn every single time β€” not once, not twice, every time β€” because we're thorough like that. if it returns anything other than 0, we break out and return that value. periodt. 🫢


πŸ”₯ SEE ALSO πŸ”₯

it's in the kernel file ./drivers/base/core.c, and honestly the whole friend group is here, iykyk:

__fwnode_link_add(9), __fwnode_link_del(9), __fwnode_link_cycle(9), fwnode_links_purge_suppliers(9), fwnode_links_purge_consumers(9), fwnode_links_purge(9), __fwnode_links_move_consumers(9), __fw_devlink_pickup_dangling_consumers(9), fw_devlink_refresh_fwnode(9), device_is_dependent(9), device_pm_move_to_tail(9), device_link_wait_removal(9), device_link_add(9), device_link_del(9), device_link_remove(9), device_links_check_suppliers(9), __device_links_queue_sync_state(9), device_links_flush_sync_list(9), device_links_force_bind(9), device_links_driver_bound(9), __device_links_no_driver(9), device_links_no_driver(9), device_links_driver_cleanup(9), device_links_busy(9), device_links_unbind_consumers(9), device_links_purge(9), wait_for_init_devices_probe(9),

fwnode_is_ancestor_of(9), fwnode_get_next_parent_dev(9), __fw_devlink_relax_cycles(9), fw_devlink_create_devlink(9), __fw_devlink_link_to_consumers(9), __fw_devlink_link_to_suppliers(9), dev_driver_string(9), device_release(9), devm_device_add_group(9), devices_kset_move_before(9), devices_kset_move_after(9), devices_kset_move_last(9), device_create_file(9), device_remove_file(9), device_remove_file_self(9), device_create_bin_file(9), device_remove_bin_file(9), device_initialize(9), kobject_has_children(9), dev_set_name(9), device_add(9), device_register(9),

get_device(9), put_device(9), device_del(9), device_unregister(9), device_get_devnode(9), device_for_each_child(9), device_for_each_child_reverse_from(9), device_find_child(9), device_offline(9), device_online(9), __root_device_register(9), root_device_unregister(9), device_create(9), device_create_with_groups(9), device_destroy(9), device_rename(9), device_move(9), device_change_owner(9), device_shutdown(9), dev_err_probe(9), dev_warn_probe(9), set_primary_fwnode(9), set_secondary_fwnode(9), device_remove_of_node(9), device_add_of_node(9), device_set_of_node_from_dev(9), get_dev_from_fwnode(9)


πŸ’€ real talk: if fn returns anything other than 0, iteration stops right there and that value comes right back at you. not a drill, just the rules 🫢

and that's the whole page bestie!! sourced straight from ./drivers/base, dated October 2026, part of the Kernel API Manual β€” go forth and iterate in reverse, you absolute icon πŸŒˆπŸ’œπŸ‘‘

πŸ“¦ where this page comes from