From b734bb97a22f1c3e96f10eb235050808f661778b Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Sun, 6 Dec 2015 23:52:38 -0800 Subject: [PATCH] drivers: bus: Match against id_table first 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 Signed-off-by: Sascha Hauer --- 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 1264e4025..b889a4866 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;