]> xenbits.xensource.com Git - libvirt.git/commitdiff
Add nomatch filters when enumerating udev devices
authorJán Tomko <jtomko@redhat.com>
Thu, 2 Jun 2016 16:09:56 +0000 (18:09 +0200)
committerJán Tomko <jtomko@redhat.com>
Tue, 7 Jun 2016 11:23:22 +0000 (13:23 +0200)
Filter out some subsystems we are not interested in.

src/node_device/node_device_udev.c

index 1a7ea3ea84f523c729db3e6312b38f18765cb07d..76c60ea9bcd12260e56f6dc49518ce2a4a8cfd49 100644 (file)
@@ -1165,13 +1165,38 @@ static int udevProcessDeviceListEntry(struct udev *udev,
 }
 
 
+/* We do not care about every device (see udevGetDeviceType).
+ * Do not bother enumerating over subsystems that do not
+ * contain interesting devices.
+ */
+const char *subsystem_blacklist[] = {
+    "acpi", "tty", "vc", "i2c",
+};
+
+static int udevEnumerateAddMatches(struct udev_enumerate *udev_enumerate)
+{
+    size_t i;
+
+    for (i = 0; i < ARRAY_CARDINALITY(subsystem_blacklist); i++) {
+        const char *s = subsystem_blacklist[i];
+        if (udev_enumerate_add_nomatch_subsystem(udev_enumerate, s) < 0) {
+            virReportSystemError(errno, "%s", _("failed to add susbsystem filter"));
+            return -1;
+        }
+    }
+    return 0;
+}
+
+
 static int udevEnumerateDevices(struct udev *udev)
 {
     struct udev_enumerate *udev_enumerate = NULL;
     struct udev_list_entry *list_entry = NULL;
-    int ret = 0;
+    int ret = -1;
 
     udev_enumerate = udev_enumerate_new(udev);
+    if (udevEnumerateAddMatches(udev_enumerate) < 0)
+        goto cleanup;
 
     ret = udev_enumerate_scan_devices(udev_enumerate);
     if (ret != 0) {