[PATCH 2/7] drivers: bus: Match against id_table first

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxx>
---
 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

_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox



[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux