wait_for_init_devices_probe(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… wait_for_init_devices_probe(9) β€” like, the Kernel API Manual's most dramatic little helper

okay so bestie, welcome to section 9 of the Kernel API Manual ✨ this one's a whole function and honestly it's giving "emergency boot intervention" energy. sit down, grab a strawberry πŸ“, let's get into it.


🌸 NAME 🌸

wait_for_init_devices_probe β€” literally "try to probe any device needed for init" 🫢


⭐ SYNOPSIS ⭐

void wait_for_init_devices_probe (void );

πŸŽ€ ARGUMENTS πŸŽ€

  • void β€” no arguments. none. zero. she takes nothing and she gives everything πŸ’…

πŸ¦‹ DESCRIPTION πŸ¦‹

okay so picture this: some devices need to get probed and bound successfully before the kernel boot sequence can finish and move on to init/userspace. like, the boot train cannot leave the station until these divas are seated. πŸš‚βœ¨

for example?? a network interface might need to be bound so you can mount a NFS rootfs. no interface, no rootfs, no vibes. 😭

now here's the messy part: with fw_devlink=on by default, some of these devices might be blocked from probing because they're waiting on an optional supplier that doesn't have a driver. like girl, the supplier ghosted and everyone's just sitting there. πŸ™ˆ

and yeah, fw_devlink will eventually identify such devices and unblock the probing automatically β€” but it might be too late by the time it unblocks the probing of devices. for example, the IP4 autoconfig might timeout before fw_devlink unblocks probing of the network interface. highkey tragic. πŸ’€

so THIS function exists to temporarily try and probe all devices that have a driver, even if some of their suppliers haven't been added or don't have drivers. bestie said "we're going in anyway." πŸ”₯

then the drivers can decide which of the suppliers are optional vs mandatory, and probe the device if possible. and by the time this function returns, all such "best effort" probes are guaranteed to be completed. periodt.

here's the slay detail πŸ‘‘: if a device successfully probes in this mode, we delete all fw_devlink discovered dependencies of that device where the supplier hasn't yet probed successfully β€” because they have to be optional dependencies.

and any devices that didn't successfully probe go back to being treated as if this function was never called. no harm, no foul, no memories. 🧚

⚠️ okay but real talk β€” this also means that some devices that aren't needed for init and could have waited for their optional supplier to probe (like, when the supplier's module is loaded later on) would end up probing prematurely with limited functionality. so call this function only when boot would fail without it. not me being dramatic, that's literally the rule. πŸ™

🌈 SEE ALSO 🌈

the whole fam lives in the kernel file ./drivers/base/core.c πŸ“ β€” go say hi to:

__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), 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(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) πŸ’–


okay that's the whole page, bestie!! this one came straight out of ./drivers/base in the Kernel API Manual, dated October 2026, and it's called wait_for_init_devices_probe(9) β€” go be a main character at boot time, but only when boot would actually fail without you πŸ«Άβœ¨πŸŽ€

πŸ“¦ where this page comes from