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:
parent
cf0dd1196b
commit
b734bb97a2
1 changed files with 2 additions and 3 deletions
|
@ -54,9 +54,6 @@ int device_match(struct device_d *dev, struct driver_d *drv)
|
||||||
drv->of_compatible)
|
drv->of_compatible)
|
||||||
return of_match(dev, drv);
|
return of_match(dev, drv);
|
||||||
|
|
||||||
if (!strcmp(dev->name, drv->name))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (drv->id_table) {
|
if (drv->id_table) {
|
||||||
const struct platform_device_id *id = 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++;
|
id++;
|
||||||
}
|
}
|
||||||
|
} else if (!strcmp(dev->name, drv->name)) {
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in a new issue