From: Michel Dänzer <[email protected]>

We get multiple udev events for actions like docking a laptop into its
station or plugging a monitor to the station. By consuming as many
events as we can, we reduce the number of output re-evalutions.

It depends on the timing how many events can be consumed at once.

(Inspired by xserver commit 363f4273dd4aec3e26cc57ecb6c20f27e6c813d8)
(Ported from radeon commit 22b5ce9548393ba2ff73ee234ecd82eeaf0ef6c4)

Signed-off-by: Michel Dänzer <[email protected]>
---
 src/drmmode_display.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 9dfef40..b03a8a7 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -2479,12 +2479,15 @@ static void drmmode_handle_uevents(int fd, void 
*closure)
        drmmode_ptr drmmode = closure;
        ScrnInfoPtr scrn = drmmode->scrn;
        struct udev_device *dev;
-       dev = udev_monitor_receive_device(drmmode->uevent_monitor);
-       if (!dev)
-               return;
+       Bool received = FALSE;
+
+       while ((dev = udev_monitor_receive_device(drmmode->uevent_monitor))) {
+               udev_device_unref(dev);
+               received = TRUE;
+       }
 
-       amdgpu_mode_hotplug(scrn, drmmode);
-       udev_device_unref(dev);
+       if (received)
+               amdgpu_mode_hotplug(scrn, drmmode);
 }
 #endif
 
-- 
2.10.1

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to