dev_err_probe(9)
π dev_err_probe β probe error check and log helper β¨
okay bestie, so this page is dev_err_probe(9) from the Kernel API Manual β yes, that kernel, the big one π§ β and it's honestly such a glow-up of a helper. let me tell you all about it π«Ά
β¨ SYNOPSIS β¨
int dev_err_probe (const struct device *dev , int err , const char *fmt
, ... );
like, that's the whole vibe. one function, three-ish args, infinite slay π
π ARGUMENTS π
devβ the pointer to thestruct device. your device. the main character πerrβ the error value to test. yes we're testing it, hold that thought π§fmtβ printf-style format string. you know the drill π...β arguments as specified in the format string. the lil entourage πΈ
π DESCRIPTION π
so this helper implements the common pattern that's literally everywhere in probe functions for error checking. it prints a debug or error message depending on whether the error value is -EPROBE_DEFER, and then propagates the error upwards. iconique behavior, no notes π
and bestie, in case of -EPROBE_DEFER it also sets the defer probe reason, which you can check later by reading the devices_deferred debugfs attribute. so it's not just logging, it's leaving receipts πβ¨
it replaces this whole code sequence:
if (err != -EPROBE_DEFER)
dev_err(dev, ...);
else
dev_dbg(dev, ...);
return err;
with just:
return dev_err_probe(dev, err, ...);
the way that's so much shorter?? like, the compiler girlies ate with this one π₯
π¦ a couple little things you should know π¦
using this helper in your probe function is totally fine even if err is known to never be -EPROBE_DEFER. no gatekeeping here, it's valid π
the benefit compared to a normal dev_err is the standardized format of the error code, which gets emitted symbolically β i.e. you get "EAGAIN" instead of "-35". way more readable, way more cutesy π and having the error code returned allows more compact error paths. tidy queen behavior β¨
Returns err. that's it. that's the return. it returns err π
πΈ SEE ALSO πΈ
kernel file ./drivers/base/core.c, plus the whole extended friend group of device/devlink/fwnode lore β not me listing every single one, but bestie i promised no skips so here we go π
__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_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 page!! mwah π this one lives in ./drivers/base and it's dated October 2026, and the page itself is literally just dev_err_probe(9) β so yeah, go forth and return your errors cute and symbolic β¨ππ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms