From 6969782b69ffa77d21c64b57e95941d399cc2ad1 Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe <jfalempe@redhat.com> Date: Fri, 21 Oct 2022 09:06:56 +0200 Subject: [PATCH] x86/logind fix suspend/resume when there are no input devices Make sure info->active and info->vt_active are false after dropping drm master. Normally, this is done when pausing the first input device, so it breaks when there are no input device at all. Fixes: da9d012a9 ("xf86/logind: Fix drm_drop_master before vt_reldisp") Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1387 Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com> --- hw/xfree86/os-support/linux/systemd-logind.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/hw/xfree86/os-support/linux/systemd-logind.c b/hw/xfree86/os-support/linux/systemd-logind.c index dbb00cd852..d97e92ff8d 100644 --- a/hw/xfree86/os-support/linux/systemd-logind.c +++ b/hw/xfree86/os-support/linux/systemd-logind.c @@ -310,15 +310,19 @@ cleanup: */ void systemd_logind_drop_master(void) { + struct systemd_logind_info *info = &logind_info; int i; + /* Our VT_PROCESS usage guarantees we've already given up the vt */ + info->active = info->vt_active = FALSE; for (i = 0; i < xf86_num_platform_devices; i++) { if (xf86_platform_devices[i].flags & XF86_PDEV_SERVER_FD) { dbus_int32_t major, minor; - struct systemd_logind_info *info = &logind_info; xf86_platform_devices[i].flags |= XF86_PDEV_PAUSED; major = xf86_platform_odev_attributes(i)->major; minor = xf86_platform_odev_attributes(i)->minor; + LogMessage(X_INFO, "systemd-logind: drop master for %u:%u\n", + major, minor); systemd_logind_ack_pause(info, minor, major); } } -- GitLab