9
0
Fork 0

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 <andrew.smirnov@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Andrey Smirnov 2015-12-06 23:52:38 -08:00 committed by Sascha Hauer
parent 87dde1730d
commit cf694d44da
1 changed files with 2 additions and 3 deletions

View File

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