summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>2005-02-11 05:21:03 +0100
committerGreg KH <gregkh@suse.de>2005-04-26 23:35:15 -0700
commit82b1698314f004b9d69a14c5054e5f7699aa33ad (patch)
tree6b7e9ed2f9d6e6875b65f51f0dfdef5ddfebc080
parentf51d8ec66139fd907d971c64e951decdc20eeecb (diff)
[PATCH] namedev: if SUBSYSTEM or KERNEL key doesn't match, give up immediately
We don't need to look at the parents in the device chain. There will never be another kernel name or subsystem.
-rw-r--r--namedev.c48
1 files changed, 24 insertions, 24 deletions
diff --git a/namedev.c b/namedev.c
index 90d988311e..bbc5b40069 100644
--- a/namedev.c
+++ b/namedev.c
@@ -583,32 +583,15 @@ static int match_rule(struct udevice *udev, struct config_device *dev,
struct sysfs_class_device *class_dev, struct sysfs_device *sysfs_device)
{
while (1) {
- /* check for matching bus value */
- if (dev->bus[0] != '\0') {
- if (sysfs_device == NULL) {
- dbg("device has no bus");
- goto try_parent;
- }
- dbg("check for " FIELD_BUS " dev->bus='%s' sysfs_device->bus='%s'",
- dev->bus, sysfs_device->bus);
- if (strcmp_pattern(dev->bus, sysfs_device->bus) != 0) {
- dbg(FIELD_BUS " is not matching");
- goto try_parent;
- } else {
- dbg(FIELD_BUS " matches");
- }
- }
-
/* check for matching kernel name */
if (dev->kernel[0] != '\0') {
dbg("check for " FIELD_KERNEL " dev->kernel='%s' class_dev->name='%s'",
dev->kernel, class_dev->name);
if (strcmp_pattern(dev->kernel, class_dev->name) != 0) {
dbg(FIELD_KERNEL " is not matching");
- goto try_parent;
- } else {
- dbg(FIELD_KERNEL " matches");
+ goto exit;
}
+ dbg(FIELD_KERNEL " matches");
}
/* check for matching subsystem */
@@ -617,10 +600,9 @@ static int match_rule(struct udevice *udev, struct config_device *dev,
dev->subsystem, class_dev->name);
if (strcmp_pattern(dev->subsystem, udev->subsystem) != 0) {
dbg(FIELD_SUBSYSTEM " is not matching");
- goto try_parent;
- } else {
- dbg(FIELD_SUBSYSTEM " matches");
+ goto exit;
}
+ dbg(FIELD_SUBSYSTEM " matches");
}
/* check for matching driver */
@@ -635,6 +617,21 @@ static int match_rule(struct udevice *udev, struct config_device *dev,
}
}
+ /* check for matching bus value */
+ if (dev->bus[0] != '\0') {
+ if (sysfs_device == NULL) {
+ dbg("device has no bus");
+ goto try_parent;
+ }
+ dbg("check for " FIELD_BUS " dev->bus='%s' sysfs_device->bus='%s'",
+ dev->bus, sysfs_device->bus);
+ if (strcmp_pattern(dev->bus, sysfs_device->bus) != 0) {
+ dbg(FIELD_BUS " is not matching");
+ goto try_parent;
+ }
+ dbg(FIELD_BUS " matches");
+ }
+
/* check for matching bus id */
if (dev->id[0] != '\0') {
dbg("check " FIELD_ID);
@@ -695,17 +692,20 @@ static int match_rule(struct udevice *udev, struct config_device *dev,
}
}
- /* Yeah, we matched! */
+ /* we matched */
return 0;
try_parent:
dbg("try parent sysfs device");
sysfs_device = sysfs_get_device_parent(sysfs_device);
if (sysfs_device == NULL)
- return -ENODEV;
+ goto exit;
dbg("sysfs_device->path='%s'", sysfs_device->path);
dbg("sysfs_device->bus_id='%s'", sysfs_device->bus_id);
}
+
+exit:
+ return -1;
}
int namedev_name_device(struct udevice *udev, struct sysfs_class_device *class_dev)