chiark / gitweb /
[PATCH] namedev: if SUBSYSTEM or KERNEL key doesn't match, give up immediately
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>
Fri, 11 Feb 2005 04:21:03 +0000 (05:21 +0100)
committerGreg KH <gregkh@suse.de>
Wed, 27 Apr 2005 06:35:15 +0000 (23:35 -0700)
We don't need to look at the parents in the device chain. There
will never be another kernel name or subsystem.

namedev.c

index 90d9883..bbc5b40 100644 (file)
--- 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)