device_link...nd_consumers(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

okay so real talk, this is a page from the Kernel API Manual and it's about making devices let go of each other. bestie, it's giving "forced breakup" energy and honestly? iconic. let's get into it 🫢


✨ NAME ✨

device_links_unbind_consumers β€” force the consumers of the given device to unbind. not a drill, not a vibe, an actual force-unbind 😭


🌸 SYNOPSIS 🌸

void device_links_unbind_consumers (struct device *dev );

literally one argument, no cap. one singular struct device * and that's the whole cast πŸŽ€


πŸ¦‹ ARGUMENTS πŸ¦‹

  • dev β€” the device whose consumers you're about to unbind. yes, that device. the one you're holding. the main character πŸ”₯

πŸ’– DESCRIPTION πŸ’–

so here's the tea, bestie. it walks the list of links to consumers for dev, and if any of them is sitting in the "consumer probe" state, it waits for all device probes in progress to complete and then starts over. like, it doesn't fight the in-flight probes, it just waits politely and tries again. so patient. so mature. we love to see it ✨

if that's not the case β€” like, no consumer is mid-probe β€” then it changes the status of the link to "supplier unbind" and checks whether the link was in the "active" state. and if it was? boom. it forces the consumer driver to unbind and starts over. πŸ’€

and no, the consumer does not re-probe β€” because we already changed the state of the link, so it's not coming back. that door is closed. periodt. πŸšͺπŸ‘‘

also, important: links without the DL_FLAG_MANAGED flag set are ignored. if it's not managed, it's not our business. minding our own business is a full-time job tbh πŸ™ˆ


⭐ SEE ALSO ⭐

the full friend group, lowercase and in order, no cap β€” and yeah, the kernel file is ./drivers/base/core.c:

__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_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(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)


and that's the whole page, bestie, you ate that πŸ“

πŸ’œ sign-off time: this one lives in ./drivers/base, and the page is dated October 2026. go forth and unbind responsibly, iykyk πŸ’…βœ¨
πŸ“¦ where this page comes from