[PATCH 2/7] drivers: bus: Match against id_table first
Andrey Smirnov
andrew.smirnov at gmail.com
Sun Dec 6 23:52:38 PST 2015
Matching against driver's name before looking throught its id_table
can lead to a somewhat strange and unintuitive behaviour where a
device whose driver's name matches one of the lines in id_table (which
is not unheard of in Linux kernel) will be probed against said driver
with 'id_table' field set to NULL which in turn will result in
dev_get_drvdata erroring out with -ENODEV.
This patch changes the behaviour such that device_match() only tries
to match against driver's name only if id_table of that driver is not
present.
Signed-off-by: Andrey Smirnov <andrew.smirnov at gmail.com>
---
drivers/base/bus.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/base/bus.c b/drivers/base/bus.c
index 1264e40..b889a48 100644
--- a/drivers/base/bus.c
+++ b/drivers/base/bus.c
@@ -54,9 +54,6 @@ int device_match(struct device_d *dev, struct driver_d *drv)
drv->of_compatible)
return of_match(dev, drv);
- if (!strcmp(dev->name, drv->name))
- return 0;
-
if (drv->id_table) {
const struct platform_device_id *id = drv->id_table;
@@ -67,6 +64,8 @@ int device_match(struct device_d *dev, struct driver_d *drv)
}
id++;
}
+ } else if (!strcmp(dev->name, drv->name)) {
+ return 0;
}
return -1;
--
2.5.0
More information about the barebox
mailing list