dev_warn_probe(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– dev_warn_probe(9) β€” Kernel API Manual πŸ’–

okay so bestie, welcome to the dev_warn_probe(9) page, freshly served from the Kernel API Manual ✨


🌸 NAME 🌸

dev_warn_probe β€” the probe error check and log helper, and honestly? it's giving "one line instead of five" πŸŽ€


⭐ SYNOPSIS ⭐

int dev_warn_probe (const struct device *dev , int err , const char *fmt
, ... );

πŸ¦‹ ARGUMENTS πŸ¦‹

  • dev β€” the pointer to the struct device. like, the actual device you're working with πŸ’œ
  • err β€” the error value to test. this is the little guy we're vibe-checking πŸ”₯
  • fmt β€” a printf-style format string
  • ... β€” arguments as specified in the format string. yes, the variadic gang is here 🫢

✨ DESCRIPTION ✨

so this helper lowkey implements the common pattern that's just everywhere in probe functions for error checking: it prints a debug or a warning message depending on whether the error value is -EPROBE_DEFER, and it propagates the error upwards. no cap πŸ’…

and in the case of -EPROBE_DEFER it also sets the defer probe reason, which you can check later by reading the devices_deferred debugfs attribute. obsessed, honestly πŸŽ€

it replaces this whole code sequence:

if (err != -EPROBE_DEFER)
        dev_warn(dev, ...);
else
        dev_dbg(dev, ...);
return err;

with just this:

return dev_warn_probe(dev, err, ...);

iconic. the way that's literally five lines down to one πŸ¦‹

using this helper in your probe function is totally fine even if err is known to never be -EPROBE_DEFER β€” like, don't even stress about it. the benefit compared to a normal dev_warn is the standardized format of the error code, which is emitted symbolically (i.e. you get "EAGAIN" instead of -35), and having the error code returned allows more compact error paths. slay πŸ’…

it returns err. that's the whole return value. main character behaviour fr fr 🌟

Returns err.


πŸ‘‘ SEE ALSO πŸ‘‘

kernel file ./drivers/base/core.c

and now the whole squad, in order, no skips, no cuts, all of them bestie πŸ’–:

__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(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), 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 page!! this came out of ./drivers/base, dated October 2026, and it's still filed under dev_warn_probe(9). mwah, go forth and probe responsibly bestie πŸ’–βœ¨πŸŽ€
πŸ“¦ where this page comes from