[PATCH v3] Respect seat assignments when assigning drm devices to server.

Jonathan Dieter jdieter at lesbg.com
Thu Jan 22 23:50:41 PST 2015


Currently, drm devices go to whichever server can get them first.

See https://bugzilla.redhat.com/show_bug.cgi?id=1183654

Signed-off-by: Jonathan Dieter <jdieter at lesbg.com>
---
 config/udev.c                              | 42 +++++++++++++++++++++++++++++-
 hw/xfree86/os-support/linux/lnx_platform.c |  9 +++++++
 include/config-udev.h                      | 32 +++++++++++++++++++++++
 3 files changed, 82 insertions(+), 1 deletion(-)
 create mode 100644 include/config-udev.h

diff --git a/config/udev.c b/config/udev.c
index 1d2140a..7f17bc7 100644
--- a/config/udev.c
+++ b/config/udev.c
@@ -514,5 +514,45 @@ config_udev_odev_probe(config_odev_probe_proc_ptr probe_callback)
     udev_enumerate_unref(enumerate);
     return;
 }
-#endif
 
+BOOL
+config_udev_check_assigned_to_this_seat(struct OdevAttributes *attribs, char *path)
+{
+    struct udev_device *udev_device;
+    const char *dev_seat;
+    char *syspath = NULL;
+    struct udev *udev;
+
+    udev = udev_new();
+    if (!udev)
+        return FALSE;
+
+    syspath = config_odev_get_attribute(attribs, ODEV_ATTRIB_SYSPATH);
+    if (!syspath) {
+        udev_unref(udev);
+        return FALSE;
+    }
+
+    udev_device = udev_device_new_from_syspath(udev, syspath);
+    if (!udev_device) {
+        udev_unref(udev);
+        return FALSE;
+    }
+
+    dev_seat = udev_device_get_property_value(udev_device, "ID_SEAT");
+    if (!dev_seat)
+        dev_seat = "seat0";
+
+    if ((SeatId && strcmp(dev_seat, SeatId)) ||
+        (!SeatId && strcmp(dev_seat, "seat0"))) {
+        LogMessage(X_INFO, "config/udev: Not adding drm device (%s) as it's assigned to seat: %s\n", path, dev_seat);
+        udev_unref(udev);
+        udev_device_unref(udev_device);
+        return FALSE;
+    }
+
+    udev_unref(udev);
+    udev_device_unref(udev_device);
+    return TRUE;
+}
+#endif
diff --git a/hw/xfree86/os-support/linux/lnx_platform.c b/hw/xfree86/os-support/linux/lnx_platform.c
index 1d145b3..61601a5 100644
--- a/hw/xfree86/os-support/linux/lnx_platform.c
+++ b/hw/xfree86/os-support/linux/lnx_platform.c
@@ -20,6 +20,10 @@
 #include "hotplug.h"
 #include "systemd-logind.h"
 
+#ifdef CONFIG_UDEV_KMS
+#include "config-udev.h"
+#endif
+
 static Bool
 get_drm_info(struct OdevAttributes *attribs, char *path, int delayed_index)
 {
@@ -161,6 +165,11 @@ xf86PlatformDeviceProbe(struct OdevAttributes *attribs)
     if (i != xf86_num_platform_devices)
         goto out_free;
 
+#ifdef CONFIG_UDEV_KMS
+    if(!config_udev_check_assigned_to_this_seat(attribs, path))
+        goto out_free;
+#endif
+
     LogMessage(X_INFO, "xfree86: Adding drm device (%s)\n", path);
 
     if (!xf86VTOwner()) {
diff --git a/include/config-udev.h b/include/config-udev.h
new file mode 100644
index 0000000..a165415
--- /dev/null
+++ b/include/config-udev.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright © 2015 Jonathan Dieter
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Author: Jonathan Dieter <jdieter at lesbg.com>
+ */
+#ifndef CONFIG_UDEV_H
+#define CONFIG_UDEV_H
+
+#ifdef CONFIG_UDEV_KMS
+BOOL config_udev_check_assigned_to_this_seat(struct OdevAttributes *attribs, char *path);
+#endif
+
+#endif
-- 
2.1.0



More information about the xorg-devel mailing list