[PATCH v2 1/5] driver: refactor probe return value handling into switch statement
Ahmad Fatoum
a.fatoum at pengutronix.de
Mon Feb 19 09:29:21 PST 2024
The return values of the bus probe function called inside device_probe()
are classified into 4 categories and they are checked by if statement
distributed across device_probe().
For clarity and easier changes, collect all of them into a switch
statement and while at it, use helpers to make use of %pe, list_move and
list_del_init instead of opencoding them.
Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
---
v1 -> v2:
- new patch
---
drivers/base/driver.c | 33 ++++++++++++++++++---------------
1 file changed, 18 insertions(+), 15 deletions(-)
diff --git a/drivers/base/driver.c b/drivers/base/driver.c
index 6548aec9b27b..4884e8fda8ef 100644
--- a/drivers/base/driver.c
+++ b/drivers/base/driver.c
@@ -129,12 +129,14 @@ int device_probe(struct device *dev)
list_add(&dev->active, &active_device_list);
ret = dev->bus->probe(dev);
- if (ret == 0)
- goto out;
- if (ret == -EPROBE_DEFER) {
- list_del(&dev->active);
- list_add(&dev->active, &deferred);
+ depth--;
+
+ switch (ret) {
+ case 0:
+ return 0;
+ case -EPROBE_DEFER:
+ list_move(&dev->active, &deferred);
/*
* -EPROBE_DEFER should never appear on a deep-probe machine so
@@ -144,19 +146,20 @@ int device_probe(struct device *dev)
dev_err(dev, "probe deferred\n");
else
dev_dbg(dev, "probe deferred\n");
- goto out;
+
+ return -EPROBE_DEFER;
+ case -ENODEV:
+ case -ENXIO:
+ dev_dbg(dev, "probe failed: %pe\n", ERR_PTR(ret));
+ break;
+ default:
+ dev_err(dev, "probe failed: %pe\n", ERR_PTR(ret));
+ break;
+
}
- list_del(&dev->active);
- INIT_LIST_HEAD(&dev->active);
+ list_del_init(&dev->active);
- if (ret == -ENODEV || ret == -ENXIO)
- dev_dbg(dev, "probe failed: %s\n", strerror(-ret));
- else
- dev_err(dev, "probe failed: %s\n", strerror(-ret));
-
-out:
- depth--;
return ret;
}
--
2.39.2
More information about the barebox
mailing list