diff options
Diffstat (limited to 'xorg-server/config')
-rw-r--r-- | xorg-server/config/udev.c | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/xorg-server/config/udev.c b/xorg-server/config/udev.c index 1e4a9d7a6..28c265817 100644 --- a/xorg-server/config/udev.c +++ b/xorg-server/config/udev.c @@ -69,6 +69,24 @@ static const char *itoa(int i) return itoa_buf; } +static Bool +check_seat(struct udev_device *udev_device) +{ + const char *dev_seat; + + dev_seat = udev_device_get_property_value(udev_device, "ID_SEAT"); + if (!dev_seat) + dev_seat = "seat0"; + + if (SeatId && strcmp(dev_seat, SeatId)) + return FALSE; + + if (!SeatId && strcmp(dev_seat, "seat0")) + return FALSE; + + return TRUE; +} + static void device_added(struct udev_device *udev_device) { @@ -83,7 +101,6 @@ device_added(struct udev_device *udev_device) struct udev_list_entry *set, *entry; struct udev_device *parent; int rc; - const char *dev_seat; dev_t devnum; path = udev_device_get_devnode(udev_device); @@ -93,14 +110,7 @@ device_added(struct udev_device *udev_device) if (!path || !syspath) return; - dev_seat = udev_device_get_property_value(udev_device, "ID_SEAT"); - if (!dev_seat) - dev_seat = "seat0"; - - if (SeatId && strcmp(dev_seat, SeatId)) - return; - - if (!SeatId && strcmp(dev_seat, "seat0")) + if (!check_seat(udev_device)) return; devnum = udev_device_get_devnum(udev_device); @@ -300,12 +310,11 @@ device_removed(struct udev_device *device) const char *path = udev_device_get_devnode(device); dev_t devnum = udev_device_get_devnum(device); - if (strncmp(sysname,"card", 4) != 0) - return; - ErrorF("removing GPU device %s %s\n", syspath, path); - if (!path) + if ((strncmp(sysname,"card", 4) != 0) || (path == NULL)) return; + LogMessage(X_INFO, "config/udev: removing GPU device %s %s\n", + syspath, path); config_udev_odev_setup_attribs(path, syspath, major(devnum), minor(devnum), DeleteGPUDeviceRequest); /* Retry vtenter after a drm node removal */ @@ -506,6 +515,8 @@ config_udev_odev_probe(config_odev_probe_proc_ptr probe_callback) goto no_probe; else if (strncmp(sysname, "card", 4) != 0) goto no_probe; + else if (!check_seat(udev_device)) + goto no_probe; config_udev_odev_setup_attribs(path, syspath, major(devnum), minor(devnum), probe_callback); |