xserver 1.20.9 + all current fixes from upstream
- Update to xserver 1.20.9 - Add all current fixes from the stable server-1.20-branch upstream - Backport latest Xwayland randr resolution change emulation support patches.
This commit is contained in:
		
							parent
							
								
									eb8a79641e
								
							
						
					
					
						commit
						eaf4422969
					
				| @ -0,0 +1,61 @@ | |||||||
|  | From 4b6fce5975c2f931a0478cf4deeec97529b05eb6 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Olivier Fourdan <ofourdan@redhat.com> | ||||||
|  | Date: Tue, 8 Sep 2020 10:01:55 +0200 | ||||||
|  | Subject: [PATCH xserver 01/16] Revert "linux: Fix platform device probe for | ||||||
|  |  DT-based PCI" | ||||||
|  | 
 | ||||||
|  | This reverts commit 249a12c54a9316b089bd22683c011519348496df. | ||||||
|  | 
 | ||||||
|  | https://gitlab.freedesktop.org/xorg/xserver/-/issues/1068 | ||||||
|  | ---
 | ||||||
|  |  config/udev.c | 27 +-------------------------- | ||||||
|  |  1 file changed, 1 insertion(+), 26 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/config/udev.c b/config/udev.c
 | ||||||
|  | index b00d90237..14409549b 100644
 | ||||||
|  | --- a/config/udev.c
 | ||||||
|  | +++ b/config/udev.c
 | ||||||
|  | @@ -464,31 +464,6 @@ config_udev_fini(void)
 | ||||||
|  |   | ||||||
|  |  #ifdef CONFIG_UDEV_KMS | ||||||
|  |   | ||||||
|  | -/* Find the last occurrence of the needle in haystack */
 | ||||||
|  | -static char *strrstr(const char *haystack, const char *needle)
 | ||||||
|  | -{
 | ||||||
|  | -    char *prev, *last, *tmp;
 | ||||||
|  | -
 | ||||||
|  | -    prev = strstr(haystack, needle);
 | ||||||
|  | -    if (!prev)
 | ||||||
|  | -        return NULL;
 | ||||||
|  | -
 | ||||||
|  | -    last = prev;
 | ||||||
|  | -    tmp = prev + 1;
 | ||||||
|  | -
 | ||||||
|  | -    while (tmp) {
 | ||||||
|  | -        last = strstr(tmp, needle);
 | ||||||
|  | -        if (!last)
 | ||||||
|  | -            return prev;
 | ||||||
|  | -        else {
 | ||||||
|  | -            prev = last;
 | ||||||
|  | -            tmp = prev + 1;
 | ||||||
|  | -        }
 | ||||||
|  | -    }
 | ||||||
|  | -
 | ||||||
|  | -    return last;
 | ||||||
|  | -}
 | ||||||
|  | -
 | ||||||
|  |  static void | ||||||
|  |  config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path, const char *syspath, | ||||||
|  |                                 int major, int minor, | ||||||
|  | @@ -503,7 +478,7 @@ config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path
 | ||||||
|  |      attribs->minor = minor; | ||||||
|  |   | ||||||
|  |      value = udev_device_get_property_value(udev_device, "ID_PATH"); | ||||||
|  | -    if (value && (str = strrstr(value, "pci-"))) {
 | ||||||
|  | +    if (value && (str = strstr(value, "pci-"))) {
 | ||||||
|  |          attribs->busid = XNFstrdup(str); | ||||||
|  |          attribs->busid[3] = ':'; | ||||||
|  |      } | ||||||
|  | -- 
 | ||||||
|  | 2.28.0 | ||||||
|  | 
 | ||||||
| @ -1,4 +1,4 @@ | |||||||
| From e78e96157efb523272404a85a9433c7b9803c1db Mon Sep 17 00:00:00 2001 | From 3d78af269556f554c517801d0de481ba56d4e603 Mon Sep 17 00:00:00 2001 | ||||||
| From: Hans de Goede <hdegoede@redhat.com> | From: Hans de Goede <hdegoede@redhat.com> | ||||||
| Date: Thu, 29 Aug 2019 14:18:28 +0200 | Date: Thu, 29 Aug 2019 14:18:28 +0200 | ||||||
| Subject: [PATCH xserver 01/24] dix: Add GetCurrentClient helper | Subject: [PATCH xserver 01/24] dix: Add GetCurrentClient helper | ||||||
| @ -112,5 +112,5 @@ index b6e2bcfde..d65060cb6 100644 | |||||||
|  extern _X_EXPORT void SetInputCheck(HWEventQueuePtr /*c0 */ , |  extern _X_EXPORT void SetInputCheck(HWEventQueuePtr /*c0 */ , | ||||||
|                                      HWEventQueuePtr /*c1 */ ); |                                      HWEventQueuePtr /*c1 */ ); | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,33 +0,0 @@ | |||||||
| From aac28e162e5108510065ad4c323affd6deffd816 Mon Sep 17 00:00:00 2001 |  | ||||||
| From: Matthieu Herrb <matthieu@herrb.eu> |  | ||||||
| Date: Sat, 25 Jul 2020 19:33:50 +0200 |  | ||||||
| Subject: [PATCH xserver] fix for ZDI-11426 |  | ||||||
| 
 |  | ||||||
| Avoid leaking un-initalized memory to clients by zeroing the |  | ||||||
| whole pixmap on initial allocation. |  | ||||||
| 
 |  | ||||||
| This vulnerability was discovered by: |  | ||||||
| Jan-Niklas Sohn working with Trend Micro Zero Day Initiative |  | ||||||
| 
 |  | ||||||
| Signed-off-by: Matthieu Herrb <matthieu@herrb.eu> |  | ||||||
| Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> |  | ||||||
| ---
 |  | ||||||
|  dix/pixmap.c | 2 +- |  | ||||||
|  1 file changed, 1 insertion(+), 1 deletion(-) |  | ||||||
| 
 |  | ||||||
| diff --git a/dix/pixmap.c b/dix/pixmap.c
 |  | ||||||
| index 1186d7dbbf..5a0146bbb6 100644
 |  | ||||||
| --- a/dix/pixmap.c
 |  | ||||||
| +++ b/dix/pixmap.c
 |  | ||||||
| @@ -116,7 +116,7 @@ AllocatePixmap(ScreenPtr pScreen, int pixDataSize)
 |  | ||||||
|      if (pScreen->totalPixmapSize > ((size_t) - 1) - pixDataSize) |  | ||||||
|          return NullPixmap; |  | ||||||
|   |  | ||||||
| -    pPixmap = malloc(pScreen->totalPixmapSize + pixDataSize);
 |  | ||||||
| +    pPixmap = calloc(1, pScreen->totalPixmapSize + pixDataSize);
 |  | ||||||
|      if (!pPixmap) |  | ||||||
|          return NullPixmap; |  | ||||||
|   |  | ||||||
| -- 
 |  | ||||||
| 2.23.0 |  | ||||||
| 
 |  | ||||||
| @ -0,0 +1,40 @@ | |||||||
|  | From 39cb95e959fab97a7e255dda1a1599b096fb0f7e Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Olivier Fourdan <ofourdan@redhat.com> | ||||||
|  | Date: Tue, 8 Sep 2020 10:03:11 +0200 | ||||||
|  | Subject: [PATCH xserver 02/16] Revert "linux: Fix platform device PCI | ||||||
|  |  detection for complex bus topologies" | ||||||
|  | 
 | ||||||
|  | This reverts commit 5c96eb5f44e62a4cfe835023cde304eb5795b8fd. | ||||||
|  | 
 | ||||||
|  | https://gitlab.freedesktop.org/xorg/xserver/-/issues/1068 | ||||||
|  | ---
 | ||||||
|  |  config/udev.c | 6 +++--- | ||||||
|  |  1 file changed, 3 insertions(+), 3 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/config/udev.c b/config/udev.c
 | ||||||
|  | index 14409549b..8c6c4b666 100644
 | ||||||
|  | --- a/config/udev.c
 | ||||||
|  | +++ b/config/udev.c
 | ||||||
|  | @@ -470,7 +470,7 @@ config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path
 | ||||||
|  |                                 config_odev_probe_proc_ptr probe_callback) | ||||||
|  |  { | ||||||
|  |      struct OdevAttributes *attribs = config_odev_allocate_attributes(); | ||||||
|  | -    const char *value, *str;
 | ||||||
|  | +    const char *value;
 | ||||||
|  |   | ||||||
|  |      attribs->path = XNFstrdup(path); | ||||||
|  |      attribs->syspath = XNFstrdup(syspath); | ||||||
|  | @@ -478,8 +478,8 @@ config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path
 | ||||||
|  |      attribs->minor = minor; | ||||||
|  |   | ||||||
|  |      value = udev_device_get_property_value(udev_device, "ID_PATH"); | ||||||
|  | -    if (value && (str = strstr(value, "pci-"))) {
 | ||||||
|  | -        attribs->busid = XNFstrdup(str);
 | ||||||
|  | +    if (value && !strncmp(value, "pci-", 4)) {
 | ||||||
|  | +        attribs->busid = XNFstrdup(value);
 | ||||||
|  |          attribs->busid[3] = ':'; | ||||||
|  |      } | ||||||
|  |   | ||||||
|  | -- 
 | ||||||
|  | 2.28.0 | ||||||
|  | 
 | ||||||
| @ -1,4 +1,4 @@ | |||||||
| From c0981af6a683266e3f2adfdd7d6539104f502233 Mon Sep 17 00:00:00 2001 | From 14e9b030449611a7a80f640129138c49ab46774e Mon Sep 17 00:00:00 2001 | ||||||
| From: Robert Mader <robert.mader@posteo.de> | From: Robert Mader <robert.mader@posteo.de> | ||||||
| Date: Mon, 22 Jan 2018 22:02:32 +0100 | Date: Mon, 22 Jan 2018 22:02:32 +0100 | ||||||
| Subject: [PATCH xserver 02/24] xwayland: Add wp_viewport wayland extension | Subject: [PATCH xserver 02/24] xwayland: Add wp_viewport wayland extension | ||||||
| @ -81,10 +81,10 @@ index 36bf2133a..4a8d171bb 100644 | |||||||
|  xwayland_glamor = [] |  xwayland_glamor = [] | ||||||
|  eglstream_srcs = [] |  eglstream_srcs = [] | ||||||
| diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | ||||||
| index ed9f2e3c2..2084f2afb 100644
 | index d02934cd5..98592025a 100644
 | ||||||
| --- a/hw/xwayland/xwayland.c
 | --- a/hw/xwayland/xwayland.c
 | ||||||
| +++ b/hw/xwayland/xwayland.c
 | +++ b/hw/xwayland/xwayland.c
 | ||||||
| @@ -923,6 +923,9 @@ registry_global(void *data, struct wl_registry *registry, uint32_t id,
 | @@ -925,6 +925,9 @@ registry_global(void *data, struct wl_registry *registry, uint32_t id,
 | ||||||
|              wl_registry_bind(registry, id, &zxdg_output_manager_v1_interface, 1); |              wl_registry_bind(registry, id, &zxdg_output_manager_v1_interface, 1); | ||||||
|          xwl_screen_init_xdg_output(xwl_screen); |          xwl_screen_init_xdg_output(xwl_screen); | ||||||
|      } |      } | ||||||
| @ -95,7 +95,7 @@ index ed9f2e3c2..2084f2afb 100644 | |||||||
|      else if (xwl_screen->glamor) { |      else if (xwl_screen->glamor) { | ||||||
|          xwl_glamor_init_wl_registry(xwl_screen, registry, id, interface, |          xwl_glamor_init_wl_registry(xwl_screen, registry, id, interface, | ||||||
| diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | ||||||
| index daa719209..f949ea157 100644
 | index b9495b313..91ae21eeb 100644
 | ||||||
| --- a/hw/xwayland/xwayland.h
 | --- a/hw/xwayland/xwayland.h
 | ||||||
| +++ b/hw/xwayland/xwayland.h
 | +++ b/hw/xwayland/xwayland.h
 | ||||||
| @@ -48,6 +48,7 @@
 | @@ -48,6 +48,7 @@
 | ||||||
| @ -115,5 +115,5 @@ index daa719209..f949ea157 100644 | |||||||
|   |   | ||||||
|  #define XWL_FORMAT_ARGB8888 (1 << 0) |  #define XWL_FORMAT_ARGB8888 (1 << 0) | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										133
									
								
								0003-Revert-linux-Make-platform-device-probe-less-fragile.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								0003-Revert-linux-Make-platform-device-probe-less-fragile.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,133 @@ | |||||||
|  | From af4c84ce8855e84c0ad89b929bc972e884f0b8e3 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Olivier Fourdan <ofourdan@redhat.com> | ||||||
|  | Date: Tue, 8 Sep 2020 10:03:33 +0200 | ||||||
|  | Subject: [PATCH xserver 03/16] Revert "linux: Make platform device probe less | ||||||
|  |  fragile" | ||||||
|  | 
 | ||||||
|  | This reverts commit 74b7427c41b4e4104af7abf70a996c086d3d7628. | ||||||
|  | 
 | ||||||
|  | https://gitlab.freedesktop.org/xorg/xserver/-/issues/1068 | ||||||
|  | ---
 | ||||||
|  |  config/udev.c                              | 17 +++++------------ | ||||||
|  |  hw/xfree86/os-support/linux/lnx_platform.c | 20 ++++++++++++++++++-- | ||||||
|  |  2 files changed, 23 insertions(+), 14 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/config/udev.c b/config/udev.c
 | ||||||
|  | index 8c6c4b666..3a73189e2 100644
 | ||||||
|  | --- a/config/udev.c
 | ||||||
|  | +++ b/config/udev.c
 | ||||||
|  | @@ -56,7 +56,7 @@ static struct udev_monitor *udev_monitor;
 | ||||||
|  |   | ||||||
|  |  #ifdef CONFIG_UDEV_KMS | ||||||
|  |  static void | ||||||
|  | -config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path, const char *syspath,
 | ||||||
|  | +config_udev_odev_setup_attribs(const char *path, const char *syspath,
 | ||||||
|  |                                 int major, int minor, | ||||||
|  |                                 config_odev_probe_proc_ptr probe_callback); | ||||||
|  |  #endif | ||||||
|  | @@ -128,7 +128,7 @@ device_added(struct udev_device *udev_device)
 | ||||||
|  |   | ||||||
|  |          LogMessage(X_INFO, "config/udev: Adding drm device (%s)\n", path); | ||||||
|  |   | ||||||
|  | -        config_udev_odev_setup_attribs(udev_device, path, syspath, major(devnum),
 | ||||||
|  | +        config_udev_odev_setup_attribs(path, syspath, major(devnum),
 | ||||||
|  |                                         minor(devnum), NewGPUDeviceRequest); | ||||||
|  |          return; | ||||||
|  |      } | ||||||
|  | @@ -322,7 +322,7 @@ device_removed(struct udev_device *device)
 | ||||||
|  |   | ||||||
|  |          LogMessage(X_INFO, "config/udev: removing GPU device %s %s\n", | ||||||
|  |                     syspath, path); | ||||||
|  | -        config_udev_odev_setup_attribs(device, path, syspath, major(devnum),
 | ||||||
|  | +        config_udev_odev_setup_attribs(path, syspath, major(devnum),
 | ||||||
|  |                                         minor(devnum), DeleteGPUDeviceRequest); | ||||||
|  |          /* Retry vtenter after a drm node removal */ | ||||||
|  |          systemd_logind_vtenter(); | ||||||
|  | @@ -465,24 +465,17 @@ config_udev_fini(void)
 | ||||||
|  |  #ifdef CONFIG_UDEV_KMS | ||||||
|  |   | ||||||
|  |  static void | ||||||
|  | -config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path, const char *syspath,
 | ||||||
|  | +config_udev_odev_setup_attribs(const char *path, const char *syspath,
 | ||||||
|  |                                 int major, int minor, | ||||||
|  |                                 config_odev_probe_proc_ptr probe_callback) | ||||||
|  |  { | ||||||
|  |      struct OdevAttributes *attribs = config_odev_allocate_attributes(); | ||||||
|  | -    const char *value;
 | ||||||
|  |   | ||||||
|  |      attribs->path = XNFstrdup(path); | ||||||
|  |      attribs->syspath = XNFstrdup(syspath); | ||||||
|  |      attribs->major = major; | ||||||
|  |      attribs->minor = minor; | ||||||
|  |   | ||||||
|  | -    value = udev_device_get_property_value(udev_device, "ID_PATH");
 | ||||||
|  | -    if (value && !strncmp(value, "pci-", 4)) {
 | ||||||
|  | -        attribs->busid = XNFstrdup(value);
 | ||||||
|  | -        attribs->busid[3] = ':';
 | ||||||
|  | -    }
 | ||||||
|  | -
 | ||||||
|  |      /* ownership of attribs is passed to probe layer */ | ||||||
|  |      probe_callback(attribs); | ||||||
|  |  } | ||||||
|  | @@ -523,7 +516,7 @@ config_udev_odev_probe(config_odev_probe_proc_ptr probe_callback)
 | ||||||
|  |          else if (!check_seat(udev_device)) | ||||||
|  |              goto no_probe; | ||||||
|  |   | ||||||
|  | -        config_udev_odev_setup_attribs(udev_device, path, syspath, major(devnum),
 | ||||||
|  | +        config_udev_odev_setup_attribs(path, syspath, major(devnum),
 | ||||||
|  |                                         minor(devnum), probe_callback); | ||||||
|  |      no_probe: | ||||||
|  |          udev_device_unref(udev_device); | ||||||
|  | diff --git a/hw/xfree86/os-support/linux/lnx_platform.c b/hw/xfree86/os-support/linux/lnx_platform.c
 | ||||||
|  | index e62306219..70374ace8 100644
 | ||||||
|  | --- a/hw/xfree86/os-support/linux/lnx_platform.c
 | ||||||
|  | +++ b/hw/xfree86/os-support/linux/lnx_platform.c
 | ||||||
|  | @@ -23,13 +23,13 @@
 | ||||||
|  |  static Bool | ||||||
|  |  get_drm_info(struct OdevAttributes *attribs, char *path, int delayed_index) | ||||||
|  |  { | ||||||
|  | +    drmSetVersion sv;
 | ||||||
|  |      drmVersionPtr v; | ||||||
|  | +    char *buf;
 | ||||||
|  |      int fd; | ||||||
|  |      int err = 0; | ||||||
|  |      Bool paused, server_fd = FALSE; | ||||||
|  |   | ||||||
|  | -    LogMessage(X_INFO, "Platform probe for %s\n", attribs->syspath);
 | ||||||
|  | -
 | ||||||
|  |      fd = systemd_logind_take_fd(attribs->major, attribs->minor, path, &paused); | ||||||
|  |      if (fd != -1) { | ||||||
|  |          if (paused) { | ||||||
|  | @@ -48,6 +48,18 @@ get_drm_info(struct OdevAttributes *attribs, char *path, int delayed_index)
 | ||||||
|  |      if (fd == -1) | ||||||
|  |          return FALSE; | ||||||
|  |   | ||||||
|  | +    sv.drm_di_major = 1;
 | ||||||
|  | +    sv.drm_di_minor = 4;
 | ||||||
|  | +    sv.drm_dd_major = -1;       /* Don't care */
 | ||||||
|  | +    sv.drm_dd_minor = -1;       /* Don't care */
 | ||||||
|  | +
 | ||||||
|  | +    err = drmSetInterfaceVersion(fd, &sv);
 | ||||||
|  | +    if (err) {
 | ||||||
|  | +        xf86Msg(X_ERROR, "%s: failed to set DRM interface version 1.4: %s\n",
 | ||||||
|  | +                path, strerror(-err));
 | ||||||
|  | +        goto out;
 | ||||||
|  | +    }
 | ||||||
|  | +
 | ||||||
|  |      /* for a delayed probe we've already added the device */ | ||||||
|  |      if (delayed_index == -1) { | ||||||
|  |              xf86_add_platform_device(attribs, FALSE); | ||||||
|  | @@ -57,6 +69,10 @@ get_drm_info(struct OdevAttributes *attribs, char *path, int delayed_index)
 | ||||||
|  |      if (server_fd) | ||||||
|  |          xf86_platform_devices[delayed_index].flags |= XF86_PDEV_SERVER_FD; | ||||||
|  |   | ||||||
|  | +    buf = drmGetBusid(fd);
 | ||||||
|  | +    xf86_platform_odev_attributes(delayed_index)->busid = XNFstrdup(buf);
 | ||||||
|  | +    drmFreeBusid(buf);
 | ||||||
|  | +
 | ||||||
|  |      v = drmGetVersion(fd); | ||||||
|  |      if (!v) { | ||||||
|  |          xf86Msg(X_ERROR, "%s: failed to query DRM version\n", path); | ||||||
|  | -- 
 | ||||||
|  | 2.28.0 | ||||||
|  | 
 | ||||||
| @ -1,4 +1,4 @@ | |||||||
| From ce5eef7d33d7ba37cabee6b2bb020ed62abe6208 Mon Sep 17 00:00:00 2001 | From a86c70ed7e9c2b4e8e2f93beddbc51c0cdad57f2 Mon Sep 17 00:00:00 2001 | ||||||
| From: Robert Mader <robert.mader@posteo.de> | From: Robert Mader <robert.mader@posteo.de> | ||||||
| Date: Tue, 2 Jul 2019 12:03:12 +0200 | Date: Tue, 2 Jul 2019 12:03:12 +0200 | ||||||
| Subject: [PATCH xserver 03/24] xwayland: Use buffer_damage instead of surface | Subject: [PATCH xserver 03/24] xwayland: Use buffer_damage instead of surface | ||||||
| @ -28,10 +28,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
| (cherry picked from commit 7c6f17790d3aedb164481264b0f05a8a14103731) | (cherry picked from commit 7c6f17790d3aedb164481264b0f05a8a14103731) | ||||||
| ---
 | ---
 | ||||||
|  hw/xwayland/xwayland-cursor.c  | 12 ++++++------ |  hw/xwayland/xwayland-cursor.c  | 12 ++++++------ | ||||||
|  hw/xwayland/xwayland-present.c |  6 +++--- |  hw/xwayland/xwayland-present.c | 10 +++++----- | ||||||
|  hw/xwayland/xwayland.c         | 29 +++++++++++++++++++++++------ |  hw/xwayland/xwayland.c         | 29 +++++++++++++++++++++++------ | ||||||
|  hw/xwayland/xwayland.h         |  3 +++ |  hw/xwayland/xwayland.h         |  3 +++ | ||||||
|  4 files changed, 35 insertions(+), 15 deletions(-) |  4 files changed, 37 insertions(+), 17 deletions(-) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland-cursor.c b/hw/xwayland/xwayland-cursor.c
 | diff --git a/hw/xwayland/xwayland-cursor.c b/hw/xwayland/xwayland-cursor.c
 | ||||||
| index 66720bcc0..cbc715061 100644
 | index 66720bcc0..cbc715061 100644
 | ||||||
| @ -64,27 +64,31 @@ index 66720bcc0..cbc715061 100644 | |||||||
|      xwl_cursor->frame_cb = wl_surface_frame(xwl_cursor->surface); |      xwl_cursor->frame_cb = wl_surface_frame(xwl_cursor->surface); | ||||||
|      wl_callback_add_listener(xwl_cursor->frame_cb, &frame_listener, xwl_cursor); |      wl_callback_add_listener(xwl_cursor->frame_cb, &frame_listener, xwl_cursor); | ||||||
| diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c
 | diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c
 | ||||||
| index 5ba7dce08..58c32941d 100644
 | index 6076f6498..ef75ad2ef 100644
 | ||||||
| --- a/hw/xwayland/xwayland-present.c
 | --- a/hw/xwayland/xwayland-present.c
 | ||||||
| +++ b/hw/xwayland/xwayland-present.c
 | +++ b/hw/xwayland/xwayland-present.c
 | ||||||
| @@ -495,9 +495,9 @@ xwl_present_flip(WindowPtr present_window,
 | @@ -497,11 +497,11 @@ xwl_present_flip(WindowPtr present_window,
 | ||||||
|      /* Realign timer */ |      /* Realign timer */ | ||||||
|      xwl_present_reset_timer(xwl_present_window); |      xwl_present_reset_timer(xwl_present_window); | ||||||
|   |   | ||||||
| -    wl_surface_damage(xwl_window->surface, 0, 0,
 | -    wl_surface_damage(xwl_window->surface,
 | ||||||
|  | -                      damage_box->x1 - present_window->drawable.x,
 | ||||||
|  | -                      damage_box->y1 - present_window->drawable.y,
 | ||||||
| -                      damage_box->x2 - damage_box->x1,
 | -                      damage_box->x2 - damage_box->x1,
 | ||||||
| -                      damage_box->y2 - damage_box->y1);
 | -                      damage_box->y2 - damage_box->y1);
 | ||||||
| +    xwl_surface_damage(xwl_window->xwl_screen, xwl_window->surface, 0, 0,
 | +    xwl_surface_damage(xwl_window->xwl_screen, xwl_window->surface,
 | ||||||
|  | +                       damage_box->x1 - present_window->drawable.x,
 | ||||||
|  | +                       damage_box->y1 - present_window->drawable.y,
 | ||||||
| +                       damage_box->x2 - damage_box->x1,
 | +                       damage_box->x2 - damage_box->x1,
 | ||||||
| +                       damage_box->y2 - damage_box->y1);
 | +                       damage_box->y2 - damage_box->y1);
 | ||||||
|   |   | ||||||
|      wl_surface_commit(xwl_window->surface); |      wl_surface_commit(xwl_window->surface); | ||||||
|   |   | ||||||
| diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | ||||||
| index 2084f2afb..942981834 100644
 | index 98592025a..f7fcd1e32 100644
 | ||||||
| --- a/hw/xwayland/xwayland.c
 | --- a/hw/xwayland/xwayland.c
 | ||||||
| +++ b/hw/xwayland/xwayland.c
 | +++ b/hw/xwayland/xwayland.c
 | ||||||
| @@ -803,6 +803,16 @@ xwl_destroy_window(WindowPtr window)
 | @@ -805,6 +805,16 @@ xwl_destroy_window(WindowPtr window)
 | ||||||
|      return ret; |      return ret; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -101,7 +105,7 @@ index 2084f2afb..942981834 100644 | |||||||
|  static void |  static void | ||||||
|  xwl_window_post_damage(struct xwl_window *xwl_window) |  xwl_window_post_damage(struct xwl_window *xwl_window) | ||||||
|  { |  { | ||||||
| @@ -839,13 +849,15 @@ xwl_window_post_damage(struct xwl_window *xwl_window)
 | @@ -841,13 +851,15 @@ xwl_window_post_damage(struct xwl_window *xwl_window)
 | ||||||
|       */ |       */ | ||||||
|      if (RegionNumRects(region) > 256) { |      if (RegionNumRects(region) > 256) { | ||||||
|          box = RegionExtents(region); |          box = RegionExtents(region); | ||||||
| @ -122,7 +126,7 @@ index 2084f2afb..942981834 100644 | |||||||
|      } |      } | ||||||
|   |   | ||||||
|      xwl_window_create_frame_callback(xwl_window); |      xwl_window_create_frame_callback(xwl_window); | ||||||
| @@ -904,8 +916,13 @@ registry_global(void *data, struct wl_registry *registry, uint32_t id,
 | @@ -906,8 +918,13 @@ registry_global(void *data, struct wl_registry *registry, uint32_t id,
 | ||||||
|      struct xwl_screen *xwl_screen = data; |      struct xwl_screen *xwl_screen = data; | ||||||
|   |   | ||||||
|      if (strcmp(interface, "wl_compositor") == 0) { |      if (strcmp(interface, "wl_compositor") == 0) { | ||||||
| @ -138,7 +142,7 @@ index 2084f2afb..942981834 100644 | |||||||
|      else if (strcmp(interface, "wl_shm") == 0) { |      else if (strcmp(interface, "wl_shm") == 0) { | ||||||
|          xwl_screen->shm = wl_registry_bind(registry, id, &wl_shm_interface, 1); |          xwl_screen->shm = wl_registry_bind(registry, id, &wl_shm_interface, 1); | ||||||
| diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | ||||||
| index f949ea157..fa78b5ab9 100644
 | index 91ae21eeb..1244d2e91 100644
 | ||||||
| --- a/hw/xwayland/xwayland.h
 | --- a/hw/xwayland/xwayland.h
 | ||||||
| +++ b/hw/xwayland/xwayland.h
 | +++ b/hw/xwayland/xwayland.h
 | ||||||
| @@ -382,6 +382,9 @@ struct xwl_output {
 | @@ -382,6 +382,9 @@ struct xwl_output {
 | ||||||
| @ -149,8 +153,8 @@ index f949ea157..fa78b5ab9 100644 | |||||||
| +                        struct wl_surface *surface,
 | +                        struct wl_surface *surface,
 | ||||||
| +                        int32_t x, int32_t y, int32_t width, int32_t height);
 | +                        int32_t x, int32_t y, int32_t width, int32_t height);
 | ||||||
|   |   | ||||||
|  Bool xwl_screen_init_cursor(struct xwl_screen *xwl_screen); |  void xwl_screen_roundtrip (struct xwl_screen *xwl_screen); | ||||||
|   |   | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -0,0 +1,35 @@ | |||||||
|  | From b28c882889cbea9be3748d3dee1b21ba6eb90b66 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Arthur Williams <taaparthur@gmail.com> | ||||||
|  | Date: Fri, 25 Sep 2020 04:52:57 +0000 | ||||||
|  | Subject: [PATCH xserver 04/16] include: Increase the number of max. input | ||||||
|  |  devices to 256. | ||||||
|  | 
 | ||||||
|  | Extending the decade old f0124ed93, to increase the number of input | ||||||
|  | devices from 40 to 256. 40 translates at most 9 MD, while 256 will allow | ||||||
|  | 63 MD. It is an arbitrary number, but people are hitting the current | ||||||
|  | limit under reasonable conditions. | ||||||
|  | 
 | ||||||
|  | Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=64793 | ||||||
|  | Signed-off-by: Arthur Williams <taaparthur@gmail.com> | ||||||
|  | 
 | ||||||
|  | (cherry picked from commit fe439596b99db65bbae35eff1ea0b79db167f8d6) | ||||||
|  | ---
 | ||||||
|  |  include/misc.h | 2 +- | ||||||
|  |  1 file changed, 1 insertion(+), 1 deletion(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/include/misc.h b/include/misc.h
 | ||||||
|  | index 14920c3c3..9b422e53b 100644
 | ||||||
|  | --- a/include/misc.h
 | ||||||
|  | +++ b/include/misc.h
 | ||||||
|  | @@ -91,7 +91,7 @@ OF THIS SOFTWARE.
 | ||||||
|  |  #define LIMITCLIENTS	256     /* Must be a power of 2 and <= MAXCLIENTS */ | ||||||
|  |  #define MAXEXTENSIONS   128 | ||||||
|  |  #define MAXFORMATS	8 | ||||||
|  | -#define MAXDEVICES	40      /* input devices */
 | ||||||
|  | +#define MAXDEVICES	256      /* input devices */
 | ||||||
|  |  #define GPU_SCREEN_OFFSET 256 | ||||||
|  |   | ||||||
|  |  /* 128 event opcodes for core + extension events, excluding GE */ | ||||||
|  | -- 
 | ||||||
|  | 2.28.0 | ||||||
|  | 
 | ||||||
| @ -1,4 +1,4 @@ | |||||||
| From 6ff9bf9f005ce81b587d3b4345232c73fc12da53 Mon Sep 17 00:00:00 2001 | From c0595515c65571d6304530c51331013381eea1dd Mon Sep 17 00:00:00 2001 | ||||||
| From: Hans de Goede <hdegoede@redhat.com> | From: Hans de Goede <hdegoede@redhat.com> | ||||||
| Date: Wed, 26 Jun 2019 16:46:54 +0200 | Date: Wed, 26 Jun 2019 16:46:54 +0200 | ||||||
| Subject: [PATCH xserver 04/24] xwayland: Add fake output modes to xrandr | Subject: [PATCH xserver 04/24] xwayland: Add fake output modes to xrandr | ||||||
| @ -25,10 +25,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  3 files changed, 124 insertions(+), 6 deletions(-) |  3 files changed, 124 insertions(+), 6 deletions(-) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
 | diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
 | ||||||
| index aa6f37864..2ccc3ca60 100644
 | index ae646c663..4036ba681 100644
 | ||||||
| --- a/hw/xwayland/xwayland-output.c
 | --- a/hw/xwayland/xwayland-output.c
 | ||||||
| +++ b/hw/xwayland/xwayland-output.c
 | +++ b/hw/xwayland/xwayland-output.c
 | ||||||
| @@ -245,14 +245,110 @@ update_screen_size(struct xwl_output *xwl_output, int width, int height)
 | @@ -208,14 +208,110 @@ update_screen_size(struct xwl_output *xwl_output, int width, int height)
 | ||||||
|      update_desktop_dimensions(); |      update_desktop_dimensions(); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -141,7 +141,7 @@ index aa6f37864..2ccc3ca60 100644 | |||||||
|      Bool need_rotate; |      Bool need_rotate; | ||||||
|   |   | ||||||
|      /* Clear out the "done" received flags */ |      /* Clear out the "done" received flags */ | ||||||
| @@ -271,12 +367,16 @@ apply_output_change(struct xwl_output *xwl_output)
 | @@ -234,12 +330,16 @@ apply_output_change(struct xwl_output *xwl_output)
 | ||||||
|          mode_height = xwl_output->width; |          mode_height = xwl_output->width; | ||||||
|      } |      } | ||||||
|   |   | ||||||
| @ -163,10 +163,10 @@ index aa6f37864..2ccc3ca60 100644 | |||||||
|      xorg_list_for_each_entry(it, &xwl_screen->output_list, link) { |      xorg_list_for_each_entry(it, &xwl_screen->output_list, link) { | ||||||
|          /* output done event is sent even when some property |          /* output done event is sent even when some property | ||||||
| diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | ||||||
| index 942981834..3c50396f1 100644
 | index f7fcd1e32..ffd4809df 100644
 | ||||||
| --- a/hw/xwayland/xwayland.c
 | --- a/hw/xwayland/xwayland.c
 | ||||||
| +++ b/hw/xwayland/xwayland.c
 | +++ b/hw/xwayland/xwayland.c
 | ||||||
| @@ -152,6 +152,23 @@ xwl_screen_get(ScreenPtr screen)
 | @@ -154,6 +154,23 @@ xwl_screen_get(ScreenPtr screen)
 | ||||||
|      return dixLookupPrivate(&screen->devPrivates, &xwl_screen_private_key); |      return dixLookupPrivate(&screen->devPrivates, &xwl_screen_private_key); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -191,10 +191,10 @@ index 942981834..3c50396f1 100644 | |||||||
|  xwl_window_set_allow_commits(struct xwl_window *xwl_window, Bool allow, |  xwl_window_set_allow_commits(struct xwl_window *xwl_window, Bool allow, | ||||||
|                               const char *debug_msg) |                               const char *debug_msg) | ||||||
| diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | ||||||
| index fa78b5ab9..c66997f00 100644
 | index 1244d2e91..200e18a8d 100644
 | ||||||
| --- a/hw/xwayland/xwayland.h
 | --- a/hw/xwayland/xwayland.h
 | ||||||
| +++ b/hw/xwayland/xwayland.h
 | +++ b/hw/xwayland/xwayland.h
 | ||||||
| @@ -389,6 +389,7 @@ void xwl_surface_damage(struct xwl_screen *xwl_screen,
 | @@ -391,6 +391,7 @@ void xwl_screen_roundtrip (struct xwl_screen *xwl_screen);
 | ||||||
|  Bool xwl_screen_init_cursor(struct xwl_screen *xwl_screen); |  Bool xwl_screen_init_cursor(struct xwl_screen *xwl_screen); | ||||||
|   |   | ||||||
|  struct xwl_screen *xwl_screen_get(ScreenPtr screen); |  struct xwl_screen *xwl_screen_get(ScreenPtr screen); | ||||||
| @ -203,5 +203,5 @@ index fa78b5ab9..c66997f00 100644 | |||||||
|  void xwl_tablet_tool_set_cursor(struct xwl_tablet_tool *tool); |  void xwl_tablet_tool_set_cursor(struct xwl_tablet_tool *tool); | ||||||
|  void xwl_seat_set_cursor(struct xwl_seat *xwl_seat); |  void xwl_seat_set_cursor(struct xwl_seat *xwl_seat); | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -0,0 +1,71 @@ | |||||||
|  | From 8c3c8bda2c44fb3d62b954b02b08e3b1771ef5bc Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com> | ||||||
|  | Date: Tue, 25 Aug 2020 17:26:56 +0200 | ||||||
|  | Subject: [PATCH xserver 05/16] glamor: Fix glamor_poly_fill_rect_gl | ||||||
|  |  xRectangle::width/height handling | ||||||
|  | 
 | ||||||
|  | (Using GLSL 1.30 or newer) | ||||||
|  | 
 | ||||||
|  | The width/height members of xRectangle are unsigned, but they were | ||||||
|  | being interpreted as signed when converting to floating point for the | ||||||
|  | vertex shader, producing incorrect drawing for values > 32767. | ||||||
|  | 
 | ||||||
|  | v2: | ||||||
|  | * Use separate GL_UNSIGNED_SHORT vertex attribute for width/height. | ||||||
|  |   (Eric Anholt) | ||||||
|  | 
 | ||||||
|  | Reviewed-by: Eric Anholt <eric@anholt.net> | ||||||
|  | (cherry picked from commit 032af35657aa95c6bbdb74ff8c72e535b9b56cfa) | ||||||
|  | ---
 | ||||||
|  |  glamor/glamor_rects.c | 18 ++++++++++++++---- | ||||||
|  |  1 file changed, 14 insertions(+), 4 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/glamor/glamor_rects.c b/glamor/glamor_rects.c
 | ||||||
|  | index 6cbb040c1..ae4fe8bcc 100644
 | ||||||
|  | --- a/glamor/glamor_rects.c
 | ||||||
|  | +++ b/glamor/glamor_rects.c
 | ||||||
|  | @@ -27,8 +27,10 @@
 | ||||||
|  |  static const glamor_facet glamor_facet_polyfillrect_130 = { | ||||||
|  |      .name = "poly_fill_rect", | ||||||
|  |      .version = 130, | ||||||
|  | -    .vs_vars = "attribute vec4 primitive;\n",
 | ||||||
|  | -    .vs_exec = ("       vec2 pos = primitive.zw * vec2(gl_VertexID&1, (gl_VertexID&2)>>1);\n"
 | ||||||
|  | +    .source_name = "size",
 | ||||||
|  | +    .vs_vars = "attribute vec2 primitive;\n"
 | ||||||
|  | +               "attribute vec2 size;\n",
 | ||||||
|  | +    .vs_exec = ("       vec2 pos = size * vec2(gl_VertexID&1, (gl_VertexID&2)>>1);\n"
 | ||||||
|  |                  GLAMOR_POS(gl_Position, (primitive.xy + pos))), | ||||||
|  |  }; | ||||||
|  |   | ||||||
|  | @@ -81,9 +83,14 @@ glamor_poly_fill_rect_gl(DrawablePtr drawable,
 | ||||||
|  |   | ||||||
|  |          glEnableVertexAttribArray(GLAMOR_VERTEX_POS); | ||||||
|  |          glVertexAttribDivisor(GLAMOR_VERTEX_POS, 1); | ||||||
|  | -        glVertexAttribPointer(GLAMOR_VERTEX_POS, 4, GL_SHORT, GL_FALSE,
 | ||||||
|  | +        glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_SHORT, GL_FALSE,
 | ||||||
|  |                                4 * sizeof (short), vbo_offset); | ||||||
|  |   | ||||||
|  | +        glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
 | ||||||
|  | +        glVertexAttribDivisor(GLAMOR_VERTEX_SOURCE, 1);
 | ||||||
|  | +        glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, GL_UNSIGNED_SHORT, GL_FALSE,
 | ||||||
|  | +                              4 * sizeof (short), vbo_offset + 2 * sizeof (short));
 | ||||||
|  | +
 | ||||||
|  |          memcpy(v, prect, nrect * sizeof (xRectangle)); | ||||||
|  |   | ||||||
|  |          glamor_put_vbo_space(screen); | ||||||
|  | @@ -156,8 +163,11 @@ glamor_poly_fill_rect_gl(DrawablePtr drawable,
 | ||||||
|  |   | ||||||
|  |  bail: | ||||||
|  |      glDisable(GL_SCISSOR_TEST); | ||||||
|  | -    if (glamor_priv->glsl_version >= 130)
 | ||||||
|  | +    if (glamor_priv->glsl_version >= 130) {
 | ||||||
|  | +        glVertexAttribDivisor(GLAMOR_VERTEX_SOURCE, 0);
 | ||||||
|  | +        glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE);
 | ||||||
|  |          glVertexAttribDivisor(GLAMOR_VERTEX_POS, 0); | ||||||
|  | +    }
 | ||||||
|  |      glDisableVertexAttribArray(GLAMOR_VERTEX_POS); | ||||||
|  |   | ||||||
|  |      return ret; | ||||||
|  | -- 
 | ||||||
|  | 2.28.0 | ||||||
|  | 
 | ||||||
| @ -1,4 +1,4 @@ | |||||||
| From d837f7003d22c5e0d5bd05d41e872e7ee331dfa4 Mon Sep 17 00:00:00 2001 | From 19e725dd368e25c057770530cdd622234303003e Mon Sep 17 00:00:00 2001 | ||||||
| From: Robert Mader <robert.mader@posteo.de> | From: Robert Mader <robert.mader@posteo.de> | ||||||
| Date: Mon, 22 Jan 2018 17:57:38 +0100 | Date: Mon, 22 Jan 2018 17:57:38 +0100 | ||||||
| Subject: [PATCH xserver 05/24] xwayland: Use RandR 1.2 interface (rev 2) | Subject: [PATCH xserver 05/24] xwayland: Use RandR 1.2 interface (rev 2) | ||||||
| @ -29,10 +29,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  1 file changed, 81 insertions(+) |  1 file changed, 81 insertions(+) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
 | diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
 | ||||||
| index 2ccc3ca60..67e99bdab 100644
 | index 4036ba681..633ebb89e 100644
 | ||||||
| --- a/hw/xwayland/xwayland-output.c
 | --- a/hw/xwayland/xwayland-output.c
 | ||||||
| +++ b/hw/xwayland/xwayland-output.c
 | +++ b/hw/xwayland/xwayland-output.c
 | ||||||
| @@ -561,12 +561,80 @@ xwl_randr_get_info(ScreenPtr pScreen, Rotation * rotations)
 | @@ -524,12 +524,80 @@ xwl_randr_get_info(ScreenPtr pScreen, Rotation * rotations)
 | ||||||
|      return TRUE; |      return TRUE; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -113,7 +113,7 @@ index 2ccc3ca60..67e99bdab 100644 | |||||||
|   |   | ||||||
|  Bool |  Bool | ||||||
|  xwl_screen_init_output(struct xwl_screen *xwl_screen) |  xwl_screen_init_output(struct xwl_screen *xwl_screen) | ||||||
| @@ -580,7 +648,20 @@ xwl_screen_init_output(struct xwl_screen *xwl_screen)
 | @@ -543,7 +611,20 @@ xwl_screen_init_output(struct xwl_screen *xwl_screen)
 | ||||||
|   |   | ||||||
|      rp = rrGetScrPriv(xwl_screen->screen); |      rp = rrGetScrPriv(xwl_screen->screen); | ||||||
|      rp->rrGetInfo = xwl_randr_get_info; |      rp->rrGetInfo = xwl_randr_get_info; | ||||||
| @ -135,5 +135,5 @@ index 2ccc3ca60..67e99bdab 100644 | |||||||
|      return TRUE; |      return TRUE; | ||||||
|  } |  } | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -0,0 +1,34 @@ | |||||||
|  | From 1e84fda2020b12a83c6b9c6d31ab84f993c6176c Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com> | ||||||
|  | Date: Tue, 1 Sep 2020 11:24:57 +0200 | ||||||
|  | Subject: [PATCH xserver 06/16] xfree86: Take second reference for SavedCursor | ||||||
|  |  in xf86CursorSetCursor | ||||||
|  | 
 | ||||||
|  | The same pointer is kept in CurrentCursor as well, therefore two | ||||||
|  | RefCursor calls are needed. | ||||||
|  | 
 | ||||||
|  | Fixes use-after-free after switching VTs. | ||||||
|  | 
 | ||||||
|  | Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1067 | ||||||
|  | (cherry picked from commit 919f1f46fc67dae93b2b3f278fcbfc77af34ec58) | ||||||
|  | ---
 | ||||||
|  |  hw/xfree86/ramdac/xf86CursorRD.c | 3 +++ | ||||||
|  |  1 file changed, 3 insertions(+) | ||||||
|  | 
 | ||||||
|  | diff --git a/hw/xfree86/ramdac/xf86CursorRD.c b/hw/xfree86/ramdac/xf86CursorRD.c
 | ||||||
|  | index ee1d98916..02dab36fe 100644
 | ||||||
|  | --- a/hw/xfree86/ramdac/xf86CursorRD.c
 | ||||||
|  | +++ b/hw/xfree86/ramdac/xf86CursorRD.c
 | ||||||
|  | @@ -334,6 +334,9 @@ xf86CursorSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCurs,
 | ||||||
|  |          ScreenPriv->HotY = cursor->bits->yhot; | ||||||
|  |   | ||||||
|  |          if (!infoPtr->pScrn->vtSema) { | ||||||
|  | +            cursor = RefCursor(cursor);
 | ||||||
|  | +            if (ScreenPriv->SavedCursor)
 | ||||||
|  | +                FreeCursor(ScreenPriv->SavedCursor, None);
 | ||||||
|  |              ScreenPriv->SavedCursor = cursor; | ||||||
|  |              return; | ||||||
|  |          } | ||||||
|  | -- 
 | ||||||
|  | 2.28.0 | ||||||
|  | 
 | ||||||
| @ -1,4 +1,4 @@ | |||||||
| From 80ca38c4428a499a795084dc696c390b707749b9 Mon Sep 17 00:00:00 2001 | From e6ba28eb96b227e47c371a7063f778fb2ab82a0b Mon Sep 17 00:00:00 2001 | ||||||
| From: Hans de Goede <hdegoede@redhat.com> | From: Hans de Goede <hdegoede@redhat.com> | ||||||
| Date: Thu, 29 Aug 2019 22:45:12 +0200 | Date: Thu, 29 Aug 2019 22:45:12 +0200 | ||||||
| Subject: [PATCH xserver 06/24] xwayland: Add per client private data | Subject: [PATCH xserver 06/24] xwayland: Add per client private data | ||||||
| @ -21,10 +21,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  2 files changed, 19 insertions(+) |  2 files changed, 19 insertions(+) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | ||||||
| index 3c50396f1..b0e37ceb9 100644
 | index ffd4809df..e00dba334 100644
 | ||||||
| --- a/hw/xwayland/xwayland.c
 | --- a/hw/xwayland/xwayland.c
 | ||||||
| +++ b/hw/xwayland/xwayland.c
 | +++ b/hw/xwayland/xwayland.c
 | ||||||
| @@ -135,11 +135,18 @@ ddxProcessArgument(int argc, char *argv[], int i)
 | @@ -137,11 +137,18 @@ ddxProcessArgument(int argc, char *argv[], int i)
 | ||||||
|      return 0; |      return 0; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -43,7 +43,7 @@ index 3c50396f1..b0e37ceb9 100644 | |||||||
|  static struct xwl_window * |  static struct xwl_window * | ||||||
|  xwl_window_get(WindowPtr window) |  xwl_window_get(WindowPtr window) | ||||||
|  { |  { | ||||||
| @@ -1143,6 +1150,13 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv)
 | @@ -1158,6 +1165,13 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv)
 | ||||||
|          return FALSE; |          return FALSE; | ||||||
|      if (!dixRegisterPrivateKey(&xwl_damage_private_key, PRIVATE_WINDOW, 0)) |      if (!dixRegisterPrivateKey(&xwl_damage_private_key, PRIVATE_WINDOW, 0)) | ||||||
|          return FALSE; |          return FALSE; | ||||||
| @ -58,7 +58,7 @@ index 3c50396f1..b0e37ceb9 100644 | |||||||
|      dixSetPrivate(&pScreen->devPrivates, &xwl_screen_private_key, xwl_screen); |      dixSetPrivate(&pScreen->devPrivates, &xwl_screen_private_key, xwl_screen); | ||||||
|      xwl_screen->screen = pScreen; |      xwl_screen->screen = pScreen; | ||||||
| diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | ||||||
| index c66997f00..593e92b64 100644
 | index 200e18a8d..19626d394 100644
 | ||||||
| --- a/hw/xwayland/xwayland.h
 | --- a/hw/xwayland/xwayland.h
 | ||||||
| +++ b/hw/xwayland/xwayland.h
 | +++ b/hw/xwayland/xwayland.h
 | ||||||
| @@ -379,8 +379,13 @@ struct xwl_output {
 | @@ -379,8 +379,13 @@ struct xwl_output {
 | ||||||
| @ -76,5 +76,5 @@ index c66997f00..593e92b64 100644 | |||||||
|  void xwl_surface_damage(struct xwl_screen *xwl_screen, |  void xwl_surface_damage(struct xwl_screen *xwl_screen, | ||||||
|                          struct wl_surface *surface, |                          struct wl_surface *surface, | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -0,0 +1,37 @@ | |||||||
|  | From f4006d795cb199bf7deeb00f542c592db6a5becb Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com> | ||||||
|  | Date: Mon, 7 Sep 2020 18:35:10 +0200 | ||||||
|  | Subject: [PATCH xserver 07/16] present/wnmd: Can't use page flipping for | ||||||
|  |  windows clipped by children | ||||||
|  | 
 | ||||||
|  | Noticed this was missing while working on the following fix. | ||||||
|  | 
 | ||||||
|  | v2: | ||||||
|  | * Dropped present_wnmd_can_window_flip hunk (that function is never | ||||||
|  |   called, will be cleaned up in a follow-up MR). | ||||||
|  | 
 | ||||||
|  | Reviewed-by: Olivier Fourdan <ofourdan@redhat.com> # v1 | ||||||
|  | Reviewed-by: Roman Gilg <subdiff@gmail.com> | ||||||
|  | (cherry picked from commit 7ac303c7b1e3b1be79ba3648e217798683e65a99) | ||||||
|  | ---
 | ||||||
|  |  present/present_wnmd.c | 4 ++++ | ||||||
|  |  1 file changed, 4 insertions(+) | ||||||
|  | 
 | ||||||
|  | diff --git a/present/present_wnmd.c b/present/present_wnmd.c
 | ||||||
|  | index 32c4d55f1..6a3d1035b 100644
 | ||||||
|  | --- a/present/present_wnmd.c
 | ||||||
|  | +++ b/present/present_wnmd.c
 | ||||||
|  | @@ -291,6 +291,10 @@ present_wnmd_check_flip(RRCrtcPtr           crtc,
 | ||||||
|  |      if ( !RegionEqual(&window->winSize, &toplvl_window->winSize) ) | ||||||
|  |          return FALSE; | ||||||
|  |   | ||||||
|  | +    /* Can't flip if window clipped by children */
 | ||||||
|  | +    if (!RegionEqual(&window->clipList, &window->winSize))
 | ||||||
|  | +        return FALSE;
 | ||||||
|  | +
 | ||||||
|  |      /* Ask the driver for permission */ | ||||||
|  |      if (screen_priv->wnmd_info->check_flip2) { | ||||||
|  |          if (!(*screen_priv->wnmd_info->check_flip2) (crtc, window, pixmap, sync_flip, reason)) { | ||||||
|  | -- 
 | ||||||
|  | 2.28.0 | ||||||
|  | 
 | ||||||
| @ -1,4 +1,4 @@ | |||||||
| From 879fed575deea57462217fc31eb331db8d23637c Mon Sep 17 00:00:00 2001 | From 575c8b49a715d45115625643b8495ad786961e38 Mon Sep 17 00:00:00 2001 | ||||||
| From: Hans de Goede <hdegoede@redhat.com> | From: Hans de Goede <hdegoede@redhat.com> | ||||||
| Date: Thu, 29 Aug 2019 23:04:36 +0200 | Date: Thu, 29 Aug 2019 23:04:36 +0200 | ||||||
| Subject: [PATCH xserver 07/24] xwayland: Add support for storing per client | Subject: [PATCH xserver 07/24] xwayland: Add support for storing per client | ||||||
| @ -31,10 +31,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  2 files changed, 84 insertions(+) |  2 files changed, 84 insertions(+) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
 | diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
 | ||||||
| index 67e99bdab..82ff5db70 100644
 | index 633ebb89e..64794dee7 100644
 | ||||||
| --- a/hw/xwayland/xwayland-output.c
 | --- a/hw/xwayland/xwayland-output.c
 | ||||||
| +++ b/hw/xwayland/xwayland-output.c
 | +++ b/hw/xwayland/xwayland-output.c
 | ||||||
| @@ -245,6 +245,73 @@ update_screen_size(struct xwl_output *xwl_output, int width, int height)
 | @@ -208,6 +208,73 @@ update_screen_size(struct xwl_output *xwl_output, int width, int height)
 | ||||||
|      update_desktop_dimensions(); |      update_desktop_dimensions(); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -109,7 +109,7 @@ index 67e99bdab..82ff5db70 100644 | |||||||
|  const int32_t xwl_output_fake_modes[][2] = { |  const int32_t xwl_output_fake_modes[][2] = { | ||||||
|      /* 4:3 (1.33) */ |      /* 4:3 (1.33) */ | ||||||
| diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | ||||||
| index 593e92b64..0e6f92e63 100644
 | index 19626d394..c886d77e9 100644
 | ||||||
| --- a/hw/xwayland/xwayland.h
 | --- a/hw/xwayland/xwayland.h
 | ||||||
| +++ b/hw/xwayland/xwayland.h
 | +++ b/hw/xwayland/xwayland.h
 | ||||||
| @@ -379,7 +379,21 @@ struct xwl_output {
 | @@ -379,7 +379,21 @@ struct xwl_output {
 | ||||||
| @ -134,7 +134,7 @@ index 593e92b64..0e6f92e63 100644 | |||||||
|  }; |  }; | ||||||
|   |   | ||||||
|  void xwl_window_create_frame_callback(struct xwl_window *xwl_window); |  void xwl_window_create_frame_callback(struct xwl_window *xwl_window); | ||||||
| @@ -425,6 +439,9 @@ void xwl_output_destroy(struct xwl_output *xwl_output);
 | @@ -427,6 +441,9 @@ void xwl_output_destroy(struct xwl_output *xwl_output);
 | ||||||
|   |   | ||||||
|  void xwl_output_remove(struct xwl_output *xwl_output); |  void xwl_output_remove(struct xwl_output *xwl_output); | ||||||
|   |   | ||||||
| @ -145,5 +145,5 @@ index 593e92b64..0e6f92e63 100644 | |||||||
|                         float VRefresh, Bool Reduced, Bool Interlaced); |                         float VRefresh, Bool Reduced, Bool Interlaced); | ||||||
|   |   | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| From a640802d33e0daccf2d4045ecb3e70cbf56bf0ac Mon Sep 17 00:00:00 2001 | From 1317f1f02fd0037e2bf7a678f2c3a9a4170161e9 Mon Sep 17 00:00:00 2001 | ||||||
| From: Hans de Goede <hdegoede@redhat.com> | From: Hans de Goede <hdegoede@redhat.com> | ||||||
| Date: Tue, 2 Jul 2019 11:55:26 +0200 | Date: Tue, 2 Jul 2019 11:55:26 +0200 | ||||||
| Subject: [PATCH xserver 08/24] xwayland: Add support for randr-resolution | Subject: [PATCH xserver 08/24] xwayland: Add support for randr-resolution | ||||||
| @ -37,10 +37,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  4 files changed, 276 insertions(+), 6 deletions(-) |  4 files changed, 276 insertions(+), 6 deletions(-) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c
 | diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c
 | ||||||
| index fa46ac3e7..97b8cd132 100644
 | index a05d178ff..7d75a8f54 100644
 | ||||||
| --- a/hw/xwayland/xwayland-input.c
 | --- a/hw/xwayland/xwayland-input.c
 | ||||||
| +++ b/hw/xwayland/xwayland-input.c
 | +++ b/hw/xwayland/xwayland-input.c
 | ||||||
| @@ -486,6 +486,11 @@ dispatch_pointer_motion_event(struct xwl_seat *xwl_seat)
 | @@ -488,6 +488,11 @@ dispatch_pointer_motion_event(struct xwl_seat *xwl_seat)
 | ||||||
|              int dx = xwl_seat->focus_window->window->drawable.x; |              int dx = xwl_seat->focus_window->window->drawable.x; | ||||||
|              int dy = xwl_seat->focus_window->window->drawable.y; |              int dy = xwl_seat->focus_window->window->drawable.y; | ||||||
|   |   | ||||||
| @ -53,10 +53,10 @@ index fa46ac3e7..97b8cd132 100644 | |||||||
|              y = dy + sy; |              y = dy + sy; | ||||||
|          } else { |          } else { | ||||||
| diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
 | diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
 | ||||||
| index 82ff5db70..99ab1b288 100644
 | index 64794dee7..e09d00108 100644
 | ||||||
| --- a/hw/xwayland/xwayland-output.c
 | --- a/hw/xwayland/xwayland-output.c
 | ||||||
| +++ b/hw/xwayland/xwayland-output.c
 | +++ b/hw/xwayland/xwayland-output.c
 | ||||||
| @@ -408,6 +408,42 @@ err:
 | @@ -371,6 +371,42 @@ err:
 | ||||||
|      FatalError("Failed to allocate memory for list of RR modes"); |      FatalError("Failed to allocate memory for list of RR modes"); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -99,7 +99,7 @@ index 82ff5db70..99ab1b288 100644 | |||||||
|  static void |  static void | ||||||
|  apply_output_change(struct xwl_output *xwl_output) |  apply_output_change(struct xwl_output *xwl_output) | ||||||
|  { |  { | ||||||
| @@ -650,21 +686,36 @@ xwl_randr_screen_set_size(ScreenPtr pScreen,
 | @@ -613,21 +649,36 @@ xwl_randr_screen_set_size(ScreenPtr pScreen,
 | ||||||
|  static Bool |  static Bool | ||||||
|  xwl_randr_crtc_set(ScreenPtr pScreen, |  xwl_randr_crtc_set(ScreenPtr pScreen, | ||||||
|                     RRCrtcPtr crtc, |                     RRCrtcPtr crtc, | ||||||
| @ -143,10 +143,10 @@ index 82ff5db70..99ab1b288 100644 | |||||||
|   |   | ||||||
|  static Bool |  static Bool | ||||||
| diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | ||||||
| index b0e37ceb9..1ab5b3a28 100644
 | index e00dba334..9c6cf7cf5 100644
 | ||||||
| --- a/hw/xwayland/xwayland.c
 | --- a/hw/xwayland/xwayland.c
 | ||||||
| +++ b/hw/xwayland/xwayland.c
 | +++ b/hw/xwayland/xwayland.c
 | ||||||
| @@ -176,6 +176,23 @@ xwl_screen_has_resolution_change_emulation(struct xwl_screen *xwl_screen)
 | @@ -178,6 +178,23 @@ xwl_screen_has_resolution_change_emulation(struct xwl_screen *xwl_screen)
 | ||||||
|      return xwl_screen->rootless && xwl_screen_has_viewport_support(xwl_screen); |      return xwl_screen->rootless && xwl_screen_has_viewport_support(xwl_screen); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -170,7 +170,7 @@ index b0e37ceb9..1ab5b3a28 100644 | |||||||
|  static void |  static void | ||||||
|  xwl_window_set_allow_commits(struct xwl_window *xwl_window, Bool allow, |  xwl_window_set_allow_commits(struct xwl_window *xwl_window, Bool allow, | ||||||
|                               const char *debug_msg) |                               const char *debug_msg) | ||||||
| @@ -512,6 +529,150 @@ xwl_pixmap_get(PixmapPtr pixmap)
 | @@ -514,6 +531,150 @@ xwl_pixmap_get(PixmapPtr pixmap)
 | ||||||
|      return dixLookupPrivate(&pixmap->devPrivates, &xwl_pixmap_private_key); |      return dixLookupPrivate(&pixmap->devPrivates, &xwl_pixmap_private_key); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -321,7 +321,7 @@ index b0e37ceb9..1ab5b3a28 100644 | |||||||
|  static void |  static void | ||||||
|  xwl_window_init_allow_commits(struct xwl_window *xwl_window) |  xwl_window_init_allow_commits(struct xwl_window *xwl_window) | ||||||
|  { |  { | ||||||
| @@ -582,6 +743,8 @@ ensure_surface_for_window(WindowPtr window)
 | @@ -584,6 +745,8 @@ ensure_surface_for_window(WindowPtr window)
 | ||||||
|   |   | ||||||
|      xwl_window->xwl_screen = xwl_screen; |      xwl_window->xwl_screen = xwl_screen; | ||||||
|      xwl_window->window = window; |      xwl_window->window = window; | ||||||
| @ -330,7 +330,7 @@ index b0e37ceb9..1ab5b3a28 100644 | |||||||
|      xwl_window->surface = wl_compositor_create_surface(xwl_screen->compositor); |      xwl_window->surface = wl_compositor_create_surface(xwl_screen->compositor); | ||||||
|      if (xwl_window->surface == NULL) { |      if (xwl_window->surface == NULL) { | ||||||
|          ErrorF("wl_display_create_surface failed\n"); |          ErrorF("wl_display_create_surface failed\n"); | ||||||
| @@ -623,6 +786,7 @@ ensure_surface_for_window(WindowPtr window)
 | @@ -625,6 +788,7 @@ ensure_surface_for_window(WindowPtr window)
 | ||||||
|   |   | ||||||
|      dixSetPrivate(&window->devPrivates, &xwl_window_private_key, xwl_window); |      dixSetPrivate(&window->devPrivates, &xwl_window_private_key, xwl_window); | ||||||
|      xorg_list_init(&xwl_window->link_damage); |      xorg_list_init(&xwl_window->link_damage); | ||||||
| @ -338,7 +338,7 @@ index b0e37ceb9..1ab5b3a28 100644 | |||||||
|   |   | ||||||
|  #ifdef GLAMOR_HAS_GBM |  #ifdef GLAMOR_HAS_GBM | ||||||
|      xorg_list_init(&xwl_window->frame_callback_list); |      xorg_list_init(&xwl_window->frame_callback_list); | ||||||
| @@ -716,8 +880,12 @@ xwl_unrealize_window(WindowPtr window)
 | @@ -718,8 +882,12 @@ xwl_unrealize_window(WindowPtr window)
 | ||||||
|      if (!xwl_window) |      if (!xwl_window) | ||||||
|          return ret; |          return ret; | ||||||
|   |   | ||||||
| @ -351,7 +351,7 @@ index b0e37ceb9..1ab5b3a28 100644 | |||||||
|      unregister_damage(window); |      unregister_damage(window); | ||||||
|   |   | ||||||
|      if (xwl_window->frame_callback) |      if (xwl_window->frame_callback) | ||||||
| @@ -767,6 +935,33 @@ xwl_set_window_pixmap(WindowPtr window,
 | @@ -769,6 +937,33 @@ xwl_set_window_pixmap(WindowPtr window,
 | ||||||
|      ensure_surface_for_window(window); |      ensure_surface_for_window(window); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -385,15 +385,15 @@ index b0e37ceb9..1ab5b3a28 100644 | |||||||
|  static void |  static void | ||||||
|  frame_callback(void *data, |  frame_callback(void *data, | ||||||
|                 struct wl_callback *callback, |                 struct wl_callback *callback, | ||||||
| @@ -1218,6 +1413,7 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv)
 | @@ -1246,6 +1441,7 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv)
 | ||||||
|      xorg_list_init(&xwl_screen->output_list); |      xorg_list_init(&xwl_screen->output_list); | ||||||
|      xorg_list_init(&xwl_screen->seat_list); |      xorg_list_init(&xwl_screen->seat_list); | ||||||
|      xorg_list_init(&xwl_screen->damage_window_list); |      xorg_list_init(&xwl_screen->damage_window_list); | ||||||
| +    xorg_list_init(&xwl_screen->window_list);
 | +    xorg_list_init(&xwl_screen->window_list);
 | ||||||
|      xwl_screen->depth = 24; |      xwl_screen->depth = 24; | ||||||
|   |   | ||||||
|      xwl_screen->display = wl_display_connect(NULL); |      if (!monitorResolution) | ||||||
| @@ -1316,6 +1512,9 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv)
 | @@ -1340,6 +1536,9 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv)
 | ||||||
|      xwl_screen->CloseScreen = pScreen->CloseScreen; |      xwl_screen->CloseScreen = pScreen->CloseScreen; | ||||||
|      pScreen->CloseScreen = xwl_close_screen; |      pScreen->CloseScreen = xwl_close_screen; | ||||||
|   |   | ||||||
| @ -404,7 +404,7 @@ index b0e37ceb9..1ab5b3a28 100644 | |||||||
|          xwl_screen->SetWindowPixmap = pScreen->SetWindowPixmap; |          xwl_screen->SetWindowPixmap = pScreen->SetWindowPixmap; | ||||||
|          pScreen->SetWindowPixmap = xwl_set_window_pixmap; |          pScreen->SetWindowPixmap = xwl_set_window_pixmap; | ||||||
| diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | ||||||
| index 0e6f92e63..9adf3af76 100644
 | index c886d77e9..36c4c4c8b 100644
 | ||||||
| --- a/hw/xwayland/xwayland.h
 | --- a/hw/xwayland/xwayland.h
 | ||||||
| +++ b/hw/xwayland/xwayland.h
 | +++ b/hw/xwayland/xwayland.h
 | ||||||
| @@ -135,10 +135,12 @@ struct xwl_screen {
 | @@ -135,10 +135,12 @@ struct xwl_screen {
 | ||||||
| @ -434,7 +434,7 @@ index 0e6f92e63..9adf3af76 100644 | |||||||
|      struct wl_callback *frame_callback; |      struct wl_callback *frame_callback; | ||||||
|      Bool allow_commits; |      Bool allow_commits; | ||||||
|  #ifdef GLAMOR_HAS_GBM |  #ifdef GLAMOR_HAS_GBM | ||||||
| @@ -409,6 +415,9 @@ Bool xwl_screen_init_cursor(struct xwl_screen *xwl_screen);
 | @@ -411,6 +417,9 @@ Bool xwl_screen_init_cursor(struct xwl_screen *xwl_screen);
 | ||||||
|   |   | ||||||
|  struct xwl_screen *xwl_screen_get(ScreenPtr screen); |  struct xwl_screen *xwl_screen_get(ScreenPtr screen); | ||||||
|  Bool xwl_screen_has_resolution_change_emulation(struct xwl_screen *xwl_screen); |  Bool xwl_screen_has_resolution_change_emulation(struct xwl_screen *xwl_screen); | ||||||
| @ -444,7 +444,7 @@ index 0e6f92e63..9adf3af76 100644 | |||||||
|   |   | ||||||
|  void xwl_tablet_tool_set_cursor(struct xwl_tablet_tool *tool); |  void xwl_tablet_tool_set_cursor(struct xwl_tablet_tool *tool); | ||||||
|  void xwl_seat_set_cursor(struct xwl_seat *xwl_seat); |  void xwl_seat_set_cursor(struct xwl_seat *xwl_seat); | ||||||
| @@ -442,6 +451,12 @@ void xwl_output_remove(struct xwl_output *xwl_output);
 | @@ -444,6 +453,12 @@ void xwl_output_remove(struct xwl_output *xwl_output);
 | ||||||
|  struct xwl_emulated_mode *xwl_output_get_emulated_mode_for_client( |  struct xwl_emulated_mode *xwl_output_get_emulated_mode_for_client( | ||||||
|                              struct xwl_output *xwl_output, ClientPtr client); |                              struct xwl_output *xwl_output, ClientPtr client); | ||||||
|   |   | ||||||
| @ -458,5 +458,5 @@ index 0e6f92e63..9adf3af76 100644 | |||||||
|                         float VRefresh, Bool Reduced, Bool Interlaced); |                         float VRefresh, Bool Reduced, Bool Interlaced); | ||||||
|   |   | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -0,0 +1,45 @@ | |||||||
|  | From 51ee6e5ceb0cacc8e2fa225ad5391ffb159e36a0 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com> | ||||||
|  | Date: Mon, 7 Sep 2020 18:39:17 +0200 | ||||||
|  | Subject: [PATCH xserver 08/16] xwayland: Check window pixmap in | ||||||
|  |  xwl_present_check_flip2 | ||||||
|  | 
 | ||||||
|  | We can only flip if the window pixmap matches that of the toplevel | ||||||
|  | window. Doing so regardless could cause the toplevel window pixmap to | ||||||
|  | get destroyed while it was still referenced by the window, resulting in | ||||||
|  | use-after-free and likely a crash. | ||||||
|  | 
 | ||||||
|  | Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1033 | ||||||
|  | Reviewed-by: Olivier Fourdan <ofourdan@redhat.com> | ||||||
|  | Reviewed-by: Roman Gilg <subdiff@gmail.com> | ||||||
|  | (cherry picked from commit 4c25356d6cd908c5030c70e712076dff318ac00d) | ||||||
|  | ---
 | ||||||
|  |  hw/xwayland/xwayland-present.c | 8 ++++++++ | ||||||
|  |  1 file changed, 8 insertions(+) | ||||||
|  | 
 | ||||||
|  | diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c
 | ||||||
|  | index 6076f6498..d177abdd8 100644
 | ||||||
|  | --- a/hw/xwayland/xwayland-present.c
 | ||||||
|  | +++ b/hw/xwayland/xwayland-present.c
 | ||||||
|  | @@ -421,10 +421,18 @@ xwl_present_check_flip2(RRCrtcPtr crtc,
 | ||||||
|  |                          PresentFlipReason *reason) | ||||||
|  |  { | ||||||
|  |      struct xwl_window *xwl_window = xwl_window_from_window(present_window); | ||||||
|  | +    ScreenPtr screen = pixmap->drawable.pScreen;
 | ||||||
|  |   | ||||||
|  |      if (!xwl_window) | ||||||
|  |          return FALSE; | ||||||
|  |   | ||||||
|  | +    /* Can't flip if the window pixmap doesn't match the xwl_window parent
 | ||||||
|  | +     * window's, e.g. because a client redirected this window or one of its
 | ||||||
|  | +     * parents.
 | ||||||
|  | +     */
 | ||||||
|  | +    if (screen->GetWindowPixmap(xwl_window->window) != screen->GetWindowPixmap(present_window))
 | ||||||
|  | +        return FALSE;
 | ||||||
|  | +
 | ||||||
|  |      /* | ||||||
|  |       * We currently only allow flips of windows, that have the same | ||||||
|  |       * dimensions as their xwl_window parent window. For the case of | ||||||
|  | -- 
 | ||||||
|  | 2.28.0 | ||||||
|  | 
 | ||||||
| @ -0,0 +1,33 @@ | |||||||
|  | From 174cb91d82d643f78d8ba2b9999312b9d7dea98c Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com> | ||||||
|  | Date: Mon, 7 Sep 2020 18:40:34 +0200 | ||||||
|  | Subject: [PATCH xserver 09/16] present/wnmd: Remove dead check from | ||||||
|  |  present_wnmd_check_flip | ||||||
|  | 
 | ||||||
|  | present_wnmd_toplvl_pixmap_window returns a window with the same window | ||||||
|  | pixmap, so the check could never fail. | ||||||
|  | 
 | ||||||
|  | Reviewed-by: Roman Gilg <subdiff@gmail.com> | ||||||
|  | (cherry picked from commit b6b1161fd7ac409156fb69439897bcabdeacf393) | ||||||
|  | ---
 | ||||||
|  |  present/present_wnmd.c | 4 ---- | ||||||
|  |  1 file changed, 4 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/present/present_wnmd.c b/present/present_wnmd.c
 | ||||||
|  | index 6a3d1035b..35ea12968 100644
 | ||||||
|  | --- a/present/present_wnmd.c
 | ||||||
|  | +++ b/present/present_wnmd.c
 | ||||||
|  | @@ -270,10 +270,6 @@ present_wnmd_check_flip(RRCrtcPtr           crtc,
 | ||||||
|  |      if (!screen_priv->wnmd_info->flip) | ||||||
|  |          return FALSE; | ||||||
|  |   | ||||||
|  | -    /* Can't flip redirected child windows */
 | ||||||
|  | -    if (screen->GetWindowPixmap(window) != screen->GetWindowPixmap(toplvl_window))
 | ||||||
|  | -        return FALSE;
 | ||||||
|  | -
 | ||||||
|  |      /* Source pixmap must align with window exactly */ | ||||||
|  |      if (x_off || y_off) | ||||||
|  |          return FALSE; | ||||||
|  | -- 
 | ||||||
|  | 2.28.0 | ||||||
|  | 
 | ||||||
| @ -1,4 +1,4 @@ | |||||||
| From 62e8b2ff7471f1a48b8bac9f41cceecea4931c03 Mon Sep 17 00:00:00 2001 | From 0efb1df3a2ef4bc2dd329af63e1bd3dbda3445e4 Mon Sep 17 00:00:00 2001 | ||||||
| From: Hans de Goede <hdegoede@redhat.com> | From: Hans de Goede <hdegoede@redhat.com> | ||||||
| Date: Mon, 8 Jul 2019 14:00:27 +0200 | Date: Mon, 8 Jul 2019 14:00:27 +0200 | ||||||
| Subject: [PATCH xserver 09/24] xwayland: Add xwlRRModeToDisplayMode() helper | Subject: [PATCH xserver 09/24] xwayland: Add xwlRRModeToDisplayMode() helper | ||||||
| @ -20,7 +20,7 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  1 file changed, 28 insertions(+), 23 deletions(-) |  1 file changed, 28 insertions(+), 23 deletions(-) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland-vidmode.c b/hw/xwayland/xwayland-vidmode.c
 | diff --git a/hw/xwayland/xwayland-vidmode.c b/hw/xwayland/xwayland-vidmode.c
 | ||||||
| index 0bcd11401..a59c9f6a9 100644
 | index d25d1aca1..428af716d 100644
 | ||||||
| --- a/hw/xwayland/xwayland-vidmode.c
 | --- a/hw/xwayland/xwayland-vidmode.c
 | ||||||
| +++ b/hw/xwayland/xwayland-vidmode.c
 | +++ b/hw/xwayland/xwayland-vidmode.c
 | ||||||
| @@ -78,13 +78,37 @@ mode_refresh(const xRRModeInfo *mode_info)
 | @@ -78,13 +78,37 @@ mode_refresh(const xRRModeInfo *mode_info)
 | ||||||
| @ -97,5 +97,5 @@ index 0bcd11401..a59c9f6a9 100644 | |||||||
|      return TRUE; |      return TRUE; | ||||||
|  } |  } | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| From 3ecabb250841ff0423744cd2291aaebf87b4239a Mon Sep 17 00:00:00 2001 | From fdbc9904d5af48db56877369f8b4671985ffc363 Mon Sep 17 00:00:00 2001 | ||||||
| From: Hans de Goede <hdegoede@redhat.com> | From: Hans de Goede <hdegoede@redhat.com> | ||||||
| Date: Mon, 8 Jul 2019 18:35:27 +0200 | Date: Mon, 8 Jul 2019 18:35:27 +0200 | ||||||
| Subject: [PATCH xserver 10/24] xwayland: Add xwlVidModeGetCurrentRRMode helper | Subject: [PATCH xserver 10/24] xwayland: Add xwlVidModeGetCurrentRRMode helper | ||||||
| @ -30,7 +30,7 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  1 file changed, 56 insertions(+), 34 deletions(-) |  1 file changed, 56 insertions(+), 34 deletions(-) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland-vidmode.c b/hw/xwayland/xwayland-vidmode.c
 | diff --git a/hw/xwayland/xwayland-vidmode.c b/hw/xwayland/xwayland-vidmode.c
 | ||||||
| index a59c9f6a9..e9aea7269 100644
 | index 428af716d..7cf982fcc 100644
 | ||||||
| --- a/hw/xwayland/xwayland-vidmode.c
 | --- a/hw/xwayland/xwayland-vidmode.c
 | ||||||
| +++ b/hw/xwayland/xwayland-vidmode.c
 | +++ b/hw/xwayland/xwayland-vidmode.c
 | ||||||
| @@ -103,26 +103,56 @@ xwlRRModeToDisplayMode(RRModePtr rrmode, DisplayModePtr mode)
 | @@ -103,26 +103,56 @@ xwlRRModeToDisplayMode(RRModePtr rrmode, DisplayModePtr mode)
 | ||||||
| @ -189,5 +189,5 @@ index a59c9f6a9..e9aea7269 100644 | |||||||
|   |   | ||||||
|  static void |  static void | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -0,0 +1,73 @@ | |||||||
|  | From d108c2c82cba242ea5998d7c91254d90d3a5db71 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Olivier Fourdan <ofourdan@redhat.com> | ||||||
|  | Date: Fri, 11 Sep 2020 11:30:18 +0200 | ||||||
|  | Subject: [PATCH xserver 10/16] xwayland: Do not discard frame callbacks on | ||||||
|  |  allow commits | ||||||
|  | MIME-Version: 1.0 | ||||||
|  | Content-Type: text/plain; charset=UTF-8 | ||||||
|  | Content-Transfer-Encoding: 8bit | ||||||
|  | 
 | ||||||
|  | Currently, when a X11 client (usually the X11 window manager from a | ||||||
|  | Wayland compositor) changes the value of the X11 property | ||||||
|  | `_XWAYLAND_ALLOW_COMMITS` from `false` to `true`, all pending frame | ||||||
|  | callbacks on the window are discarded so that the commit occurs | ||||||
|  | immediately. | ||||||
|  | 
 | ||||||
|  | Weston uses that mechanism to prevent the content of the window from | ||||||
|  | showing before it's ready when mapping the window initially, but | ||||||
|  | discarding the pending frame callbacks has no effect on the initial | ||||||
|  | mapping of the X11 window since at that point there cannot be any frame | ||||||
|  | callback on a surface which hasn't been committed yet anyway. | ||||||
|  | 
 | ||||||
|  | However, discarding pending frame callbacks can be problematic if we | ||||||
|  | were to use the same `_XWAYLAND_ALLOW_COMMITS` mechanism to prevent | ||||||
|  | damages to be posted before the X11 toplevel is updated completely | ||||||
|  | (including the window decorations from the X11 window manager). | ||||||
|  | 
 | ||||||
|  | Remove the portion of code discarding the pending frame callback, | ||||||
|  | Xwayland should always wait for a pending frame callback if there's one | ||||||
|  | before posting new damages. | ||||||
|  | 
 | ||||||
|  | Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> | ||||||
|  | Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.com> | ||||||
|  | Reviewed-by: Michel Dänzer <mdaenzer@redhat.com> | ||||||
|  | https://gitlab.freedesktop.org/xorg/xserver/merge_requests/333 | ||||||
|  | (cherry picked from commit 66da95a172c4941b75ffedcdaa0138c0a48f11fb) | ||||||
|  | ---
 | ||||||
|  |  hw/xwayland/xwayland.c | 13 ------------- | ||||||
|  |  1 file changed, 13 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | ||||||
|  | index d02934cd5..a69188c0f 100644
 | ||||||
|  | --- a/hw/xwayland/xwayland.c
 | ||||||
|  | +++ b/hw/xwayland/xwayland.c
 | ||||||
|  | @@ -193,8 +193,6 @@ static void
 | ||||||
|  |  xwl_window_property_allow_commits(struct xwl_window *xwl_window, | ||||||
|  |                                    PropertyStateRec *propstate) | ||||||
|  |  { | ||||||
|  | -    Bool old_allow_commits = xwl_window->allow_commits;
 | ||||||
|  | -
 | ||||||
|  |      switch (propstate->state) { | ||||||
|  |      case PropertyNewValue: | ||||||
|  |          xwl_window_set_allow_commits_from_property(xwl_window, propstate->prop); | ||||||
|  | @@ -207,17 +205,6 @@ xwl_window_property_allow_commits(struct xwl_window *xwl_window,
 | ||||||
|  |      default: | ||||||
|  |          break; | ||||||
|  |      } | ||||||
|  | -
 | ||||||
|  | -    /* If allow_commits turned from off to on, discard any frame
 | ||||||
|  | -     * callback we might be waiting for so that a new buffer is posted
 | ||||||
|  | -     * immediately through block_handler() if there is damage to post.
 | ||||||
|  | -     */
 | ||||||
|  | -    if (!old_allow_commits && xwl_window->allow_commits) {
 | ||||||
|  | -        if (xwl_window->frame_callback) {
 | ||||||
|  | -            wl_callback_destroy(xwl_window->frame_callback);
 | ||||||
|  | -            xwl_window->frame_callback = NULL;
 | ||||||
|  | -        }
 | ||||||
|  | -    }
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static void | ||||||
|  | -- 
 | ||||||
|  | 2.28.0 | ||||||
|  | 
 | ||||||
| @ -1,4 +1,4 @@ | |||||||
| From 86e32a877ded8d67ec26ed2bcc06bd80ec2a5915 Mon Sep 17 00:00:00 2001 | From aa5920519dff3dc3dfb33af342e454627fa5402c Mon Sep 17 00:00:00 2001 | ||||||
| From: Hans de Goede <hdegoede@redhat.com> | From: Hans de Goede <hdegoede@redhat.com> | ||||||
| Date: Tue, 9 Jul 2019 09:31:13 +0200 | Date: Tue, 9 Jul 2019 09:31:13 +0200 | ||||||
| Subject: [PATCH xserver 11/24] xwayland: Add vidmode mode changing emulation | Subject: [PATCH xserver 11/24] xwayland: Add vidmode mode changing emulation | ||||||
| @ -19,7 +19,7 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  1 file changed, 86 insertions(+), 44 deletions(-) |  1 file changed, 86 insertions(+), 44 deletions(-) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland-vidmode.c b/hw/xwayland/xwayland-vidmode.c
 | diff --git a/hw/xwayland/xwayland-vidmode.c b/hw/xwayland/xwayland-vidmode.c
 | ||||||
| index e9aea7269..56aac693a 100644
 | index 7cf982fcc..99a4d2c92 100644
 | ||||||
| --- a/hw/xwayland/xwayland-vidmode.c
 | --- a/hw/xwayland/xwayland-vidmode.c
 | ||||||
| +++ b/hw/xwayland/xwayland-vidmode.c
 | +++ b/hw/xwayland/xwayland-vidmode.c
 | ||||||
| @@ -106,26 +106,25 @@ xwlRRModeToDisplayMode(RRModePtr rrmode, DisplayModePtr mode)
 | @@ -106,26 +106,25 @@ xwlRRModeToDisplayMode(RRModePtr rrmode, DisplayModePtr mode)
 | ||||||
| @ -232,5 +232,5 @@ index e9aea7269..56aac693a 100644 | |||||||
|   |   | ||||||
|  static Bool |  static Bool | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -0,0 +1,68 @@ | |||||||
|  | From 1ac389dda89b2882c80767c91bbe88e01818491c Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Greg V <greg@unrelenting.technology> | ||||||
|  | Date: Tue, 15 Sep 2020 17:41:04 +0300 | ||||||
|  | Subject: [PATCH xserver 11/16] xwayland: use drmGetNodeTypeFromFd for checking | ||||||
|  |  if a node is a render one | ||||||
|  | 
 | ||||||
|  | Major/minor numbers are a.. major (ha) source of pain in FreeBSD porting. | ||||||
|  | In this case, Xwayland was thinking that /dev/dri/card0 is already a render node, | ||||||
|  | because the st_rdev on FreeBSD was passing the Linux-style check, | ||||||
|  | and because of the assumption, acceleration would fail because | ||||||
|  | various ioctls like AMDGPU_INFO would be denied on the non-render node. | ||||||
|  | 
 | ||||||
|  | Switch to libdrm's function that already works correctly on all platforms. | ||||||
|  | 
 | ||||||
|  | Signed-off-by: Greg V <greg@unrelenting.technology> | ||||||
|  | Reviewed-by: Emmanuel Vadot <manu@FreeBSD.org> | ||||||
|  | (cherry picked from commit 239ebdc9e447d4f836d0c2aa6068c6064fffb46c) | ||||||
|  | ---
 | ||||||
|  |  hw/xwayland/xwayland-glamor-gbm.c | 19 ++----------------- | ||||||
|  |  1 file changed, 2 insertions(+), 17 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/hw/xwayland/xwayland-glamor-gbm.c b/hw/xwayland/xwayland-glamor-gbm.c
 | ||||||
|  | index ebff70a00..b519492cc 100644
 | ||||||
|  | --- a/hw/xwayland/xwayland-glamor-gbm.c
 | ||||||
|  | +++ b/hw/xwayland/xwayland-glamor-gbm.c
 | ||||||
|  | @@ -110,21 +110,6 @@ wl_drm_format_for_depth(int depth)
 | ||||||
|  |      } | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -static char
 | ||||||
|  | -is_fd_render_node(int fd)
 | ||||||
|  | -{
 | ||||||
|  | -    struct stat render;
 | ||||||
|  | -
 | ||||||
|  | -    if (fstat(fd, &render))
 | ||||||
|  | -        return 0;
 | ||||||
|  | -    if (!S_ISCHR(render.st_mode))
 | ||||||
|  | -        return 0;
 | ||||||
|  | -    if (render.st_rdev & 0x80)
 | ||||||
|  | -        return 1;
 | ||||||
|  | -
 | ||||||
|  | -    return 0;
 | ||||||
|  | -}
 | ||||||
|  | -
 | ||||||
|  |  static char | ||||||
|  |  is_device_path_render_node (const char *device_path) | ||||||
|  |  { | ||||||
|  | @@ -135,7 +120,7 @@ is_device_path_render_node (const char *device_path)
 | ||||||
|  |      if (fd < 0) | ||||||
|  |          return 0; | ||||||
|  |   | ||||||
|  | -    is_render_node = is_fd_render_node(fd);
 | ||||||
|  | +    is_render_node = (drmGetNodeTypeFromFd(fd) == DRM_NODE_RENDER);
 | ||||||
|  |      close(fd); | ||||||
|  |   | ||||||
|  |      return is_render_node; | ||||||
|  | @@ -767,7 +752,7 @@ xwl_drm_handle_device(void *data, struct wl_drm *drm, const char *device)
 | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |   | ||||||
|  | -   if (is_fd_render_node(xwl_gbm->drm_fd)) {
 | ||||||
|  | +   if (drmGetNodeTypeFromFd(xwl_gbm->drm_fd) == DRM_NODE_RENDER) {
 | ||||||
|  |         xwl_gbm->fd_render_node = 1; | ||||||
|  |         xwl_screen->expecting_event--; | ||||||
|  |     } else { | ||||||
|  | -- 
 | ||||||
|  | 2.28.0 | ||||||
|  | 
 | ||||||
| @ -0,0 +1,43 @@ | |||||||
|  | From 1930ed233fdec5d22e4fc192769a0126faabb3ea Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Olivier Fourdan <ofourdan@redhat.com> | ||||||
|  | Date: Mon, 14 Sep 2020 15:39:10 +0200 | ||||||
|  | Subject: [PATCH xserver 12/16] xwayland: Remove pending stream reference when | ||||||
|  |  freeing | ||||||
|  | 
 | ||||||
|  | The EGLStream backend keeps a queue of pending streams for each Xwayland | ||||||
|  | window. | ||||||
|  | 
 | ||||||
|  | However, when this pending queue is freed, the corresponding private | ||||||
|  | data may not be cleared (typically if the pixmap for this window has | ||||||
|  | changed before the compositor finished attaching the consumer for the | ||||||
|  | window's pixmap's original eglstream), leading to a use-after-free and a | ||||||
|  | crash when trying to use that data as the window pixmap. | ||||||
|  | 
 | ||||||
|  | Make sure to clear the private data when the pending stream is freed. | ||||||
|  | 
 | ||||||
|  | Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1055 | ||||||
|  | Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> | ||||||
|  | Tested-by: Karol Szuster <karolsz9898@gmail.com> | ||||||
|  | Reviewed-by: Adam Jackson <ajax@redhat.com> | ||||||
|  | (cherry picked from commit a5f439dcd21b4fda093cb382bb1a758b434a1444) | ||||||
|  | ---
 | ||||||
|  |  hw/xwayland/xwayland-glamor-eglstream.c | 2 +- | ||||||
|  |  1 file changed, 1 insertion(+), 1 deletion(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/hw/xwayland/xwayland-glamor-eglstream.c b/hw/xwayland/xwayland-glamor-eglstream.c
 | ||||||
|  | index 36b749aaf..0c32fff4d 100644
 | ||||||
|  | --- a/hw/xwayland/xwayland-glamor-eglstream.c
 | ||||||
|  | +++ b/hw/xwayland/xwayland-glamor-eglstream.c
 | ||||||
|  | @@ -431,8 +431,8 @@ xwl_eglstream_consumer_ready_callback(void *data,
 | ||||||
|  |      DebugF("eglstream: win %d completes eglstream for pixmap %p, congrats!\n", | ||||||
|  |             pending->window->drawable.id, pending->pixmap); | ||||||
|  |   | ||||||
|  | -    xwl_eglstream_window_set_pending(pending->window, NULL);
 | ||||||
|  |  out: | ||||||
|  | +    xwl_eglstream_window_set_pending(pending->window, NULL);
 | ||||||
|  |      xorg_list_del(&pending->link); | ||||||
|  |      free(pending); | ||||||
|  |  } | ||||||
|  | -- 
 | ||||||
|  | 2.28.0 | ||||||
|  | 
 | ||||||
| @ -1,4 +1,4 @@ | |||||||
| From fd95c9a52e35e994e140a925cfc01587257d4511 Mon Sep 17 00:00:00 2001 | From a090b038c45732676d9b7e367848d5bee7ab0ea5 Mon Sep 17 00:00:00 2001 | ||||||
| From: Hans de Goede <hdegoede@redhat.com> | From: Hans de Goede <hdegoede@redhat.com> | ||||||
| Date: Mon, 26 Aug 2019 12:26:34 +0200 | Date: Mon, 26 Aug 2019 12:26:34 +0200 | ||||||
| Subject: [PATCH xserver 12/24] xwayland: xwl_window_should_enable_viewport: | Subject: [PATCH xserver 12/24] xwayland: xwl_window_should_enable_viewport: | ||||||
| @ -25,10 +25,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  1 file changed, 17 insertions(+) |  1 file changed, 17 insertions(+) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | ||||||
| index 1ab5b3a28..85036adfe 100644
 | index 9c6cf7cf5..2e01822fd 100644
 | ||||||
| --- a/hw/xwayland/xwayland.c
 | --- a/hw/xwayland/xwayland.c
 | ||||||
| +++ b/hw/xwayland/xwayland.c
 | +++ b/hw/xwayland/xwayland.c
 | ||||||
| @@ -649,6 +649,23 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window,
 | @@ -651,6 +651,23 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window,
 | ||||||
|          } |          } | ||||||
|      } |      } | ||||||
|   |   | ||||||
| @ -53,5 +53,5 @@ index 1ab5b3a28..85036adfe 100644 | |||||||
|  } |  } | ||||||
|   |   | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										121
									
								
								0013-present-Move-flip-target_msc-adjustment-out-of-prese.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								0013-present-Move-flip-target_msc-adjustment-out-of-prese.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,121 @@ | |||||||
|  | From dae234efdb7bba75744aa1697386df3c0db5348a Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com> | ||||||
|  | Date: Fri, 11 Sep 2020 17:00:18 +0200 | ||||||
|  | Subject: [PATCH xserver 13/16] present: Move flip target_msc adjustment out of | ||||||
|  |  present_vblank_create | ||||||
|  | 
 | ||||||
|  | Preparation for different handling between SCMD & WNMD. No functional | ||||||
|  | change intended. | ||||||
|  | 
 | ||||||
|  | Reviewed-by: Roman Gilg <subdiff@gmail.com> | ||||||
|  | Tested-by: Roman Gilg <subdiff@gmail.com> | ||||||
|  | (cherry picked from commit 4c92dea952f7fed19857904f0f552900257ef4b9) | ||||||
|  | ---
 | ||||||
|  |  present/present_priv.h   | 2 +- | ||||||
|  |  present/present_scmd.c   | 5 ++++- | ||||||
|  |  present/present_vblank.c | 9 ++++----- | ||||||
|  |  present/present_wnmd.c   | 5 ++++- | ||||||
|  |  4 files changed, 13 insertions(+), 8 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/present/present_priv.h b/present/present_priv.h
 | ||||||
|  | index 5849b9e0b..90c3f4e79 100644
 | ||||||
|  | --- a/present/present_priv.h
 | ||||||
|  | +++ b/present/present_priv.h
 | ||||||
|  | @@ -469,7 +469,7 @@ present_vblank_create(WindowPtr window,
 | ||||||
|  |                        const uint32_t *capabilities, | ||||||
|  |                        present_notify_ptr notifies, | ||||||
|  |                        int num_notifies, | ||||||
|  | -                      uint64_t *target_msc,
 | ||||||
|  | +                      uint64_t target_msc,
 | ||||||
|  |                        uint64_t crtc_msc); | ||||||
|  |   | ||||||
|  |  void | ||||||
|  | diff --git a/present/present_scmd.c b/present/present_scmd.c
 | ||||||
|  | index 6a580cb7a..a4d046ca8 100644
 | ||||||
|  | --- a/present/present_scmd.c
 | ||||||
|  | +++ b/present/present_scmd.c
 | ||||||
|  | @@ -745,12 +745,15 @@ present_scmd_pixmap(WindowPtr window,
 | ||||||
|  |                                     screen_priv->info ? &screen_priv->info->capabilities : NULL, | ||||||
|  |                                     notifies, | ||||||
|  |                                     num_notifies, | ||||||
|  | -                                   &target_msc,
 | ||||||
|  | +                                   target_msc,
 | ||||||
|  |                                     crtc_msc); | ||||||
|  |   | ||||||
|  |      if (!vblank) | ||||||
|  |          return BadAlloc; | ||||||
|  |   | ||||||
|  | +    if (vblank->flip && vblank->sync_flip)
 | ||||||
|  | +        target_msc--;
 | ||||||
|  | +
 | ||||||
|  |      xorg_list_append(&vblank->event_queue, &present_exec_queue); | ||||||
|  |      vblank->queued = TRUE; | ||||||
|  |      if (msc_is_after(target_msc, crtc_msc)) { | ||||||
|  | diff --git a/present/present_vblank.c b/present/present_vblank.c
 | ||||||
|  | index 2c124f4bb..a4b70c0d9 100644
 | ||||||
|  | --- a/present/present_vblank.c
 | ||||||
|  | +++ b/present/present_vblank.c
 | ||||||
|  | @@ -57,7 +57,7 @@ present_vblank_create(WindowPtr window,
 | ||||||
|  |                        const uint32_t *capabilities, | ||||||
|  |                        present_notify_ptr notifies, | ||||||
|  |                        int num_notifies, | ||||||
|  | -                      uint64_t *target_msc,
 | ||||||
|  | +                      uint64_t target_msc,
 | ||||||
|  |                        uint64_t crtc_msc) | ||||||
|  |  { | ||||||
|  |      ScreenPtr                   screen = window->drawable.pScreen; | ||||||
|  | @@ -100,7 +100,7 @@ present_vblank_create(WindowPtr window,
 | ||||||
|  |   | ||||||
|  |      vblank->x_off = x_off; | ||||||
|  |      vblank->y_off = y_off; | ||||||
|  | -    vblank->target_msc = *target_msc;
 | ||||||
|  | +    vblank->target_msc = target_msc;
 | ||||||
|  |      vblank->crtc = target_crtc; | ||||||
|  |      vblank->msc_offset = window_priv->msc_offset; | ||||||
|  |      vblank->notifies = notifies; | ||||||
|  | @@ -111,12 +111,11 @@ present_vblank_create(WindowPtr window,
 | ||||||
|  |      if (pixmap != NULL && | ||||||
|  |          !(options & PresentOptionCopy) && | ||||||
|  |          capabilities) { | ||||||
|  | -        if (msc_is_after(*target_msc, crtc_msc) &&
 | ||||||
|  | +        if (msc_is_after(target_msc, crtc_msc) &&
 | ||||||
|  |              screen_priv->check_flip (target_crtc, window, pixmap, TRUE, valid, x_off, y_off, &reason)) | ||||||
|  |          { | ||||||
|  |              vblank->flip = TRUE; | ||||||
|  |              vblank->sync_flip = TRUE; | ||||||
|  | -            *target_msc = *target_msc - 1;
 | ||||||
|  |          } else if ((*capabilities & PresentCapabilityAsync) && | ||||||
|  |              screen_priv->check_flip (target_crtc, window, pixmap, FALSE, valid, x_off, y_off, &reason)) | ||||||
|  |          { | ||||||
|  | @@ -139,7 +138,7 @@ present_vblank_create(WindowPtr window,
 | ||||||
|  |   | ||||||
|  |      if (pixmap) | ||||||
|  |          DebugPresent(("q %" PRIu64 " %p %" PRIu64 ": %08" PRIx32 " -> %08" PRIx32 " (crtc %p) flip %d vsync %d serial %d\n", | ||||||
|  | -                      vblank->event_id, vblank, *target_msc,
 | ||||||
|  | +                      vblank->event_id, vblank, target_msc,
 | ||||||
|  |                        vblank->pixmap->drawable.id, vblank->window->drawable.id, | ||||||
|  |                        target_crtc, vblank->flip, vblank->sync_flip, vblank->serial)); | ||||||
|  |      return vblank; | ||||||
|  | diff --git a/present/present_wnmd.c b/present/present_wnmd.c
 | ||||||
|  | index 35ea12968..31e83d6ee 100644
 | ||||||
|  | --- a/present/present_wnmd.c
 | ||||||
|  | +++ b/present/present_wnmd.c
 | ||||||
|  | @@ -626,11 +626,14 @@ present_wnmd_pixmap(WindowPtr window,
 | ||||||
|  |                                     &screen_priv->wnmd_info->capabilities, | ||||||
|  |                                     notifies, | ||||||
|  |                                     num_notifies, | ||||||
|  | -                                   &target_msc,
 | ||||||
|  | +                                   target_msc,
 | ||||||
|  |                                     crtc_msc); | ||||||
|  |      if (!vblank) | ||||||
|  |          return BadAlloc; | ||||||
|  |   | ||||||
|  | +    if (vblank->flip && vblank->sync_flip)
 | ||||||
|  | +        target_msc--;
 | ||||||
|  | +
 | ||||||
|  |      xorg_list_append(&vblank->event_queue, &window_priv->exec_queue); | ||||||
|  |      vblank->queued = TRUE; | ||||||
|  |      if (crtc_msc < target_msc) { | ||||||
|  | -- 
 | ||||||
|  | 2.28.0 | ||||||
|  | 
 | ||||||
| @ -1,4 +1,4 @@ | |||||||
| From dda4a8b2f672eb5791f39222dd0996e07b416eb7 Mon Sep 17 00:00:00 2001 | From e40d94637207543481769fb570515b782225ff09 Mon Sep 17 00:00:00 2001 | ||||||
| From: Hans de Goede <hdegoede@redhat.com> | From: Hans de Goede <hdegoede@redhat.com> | ||||||
| Date: Mon, 2 Sep 2019 17:32:45 +0200 | Date: Mon, 2 Sep 2019 17:32:45 +0200 | ||||||
| Subject: [PATCH xserver 13/24] xwayland: Set _XWAYLAND_RANDR_EMU_MONITOR_RECTS | Subject: [PATCH xserver 13/24] xwayland: Set _XWAYLAND_RANDR_EMU_MONITOR_RECTS | ||||||
| @ -37,7 +37,7 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  3 files changed, 103 insertions(+) |  3 files changed, 103 insertions(+) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
 | diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
 | ||||||
| index 99ab1b288..20c254962 100644
 | index e09d00108..0d6b9ac9f 100644
 | ||||||
| --- a/hw/xwayland/xwayland-output.c
 | --- a/hw/xwayland/xwayland-output.c
 | ||||||
| +++ b/hw/xwayland/xwayland-output.c
 | +++ b/hw/xwayland/xwayland-output.c
 | ||||||
| @@ -29,6 +29,7 @@
 | @@ -29,6 +29,7 @@
 | ||||||
| @ -46,9 +46,9 @@ index 99ab1b288..20c254962 100644 | |||||||
|  #include <randrstr.h> |  #include <randrstr.h> | ||||||
| +#include <X11/Xatom.h>
 | +#include <X11/Xatom.h>
 | ||||||
|   |   | ||||||
|  #define DEFAULT_DPI 96 |  | ||||||
|  #define ALL_ROTATIONS (RR_Rotate_0   | \ |  #define ALL_ROTATIONS (RR_Rotate_0   | \ | ||||||
| @@ -428,6 +429,80 @@ xwl_output_find_mode(struct xwl_output *xwl_output,
 |                         RR_Rotate_90  | \ | ||||||
|  | @@ -391,6 +392,80 @@ xwl_output_find_mode(struct xwl_output *xwl_output,
 | ||||||
|      return NULL; |      return NULL; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -129,7 +129,7 @@ index 99ab1b288..20c254962 100644 | |||||||
|  void |  void | ||||||
|  xwl_output_set_emulated_mode(struct xwl_output *xwl_output, ClientPtr client, |  xwl_output_set_emulated_mode(struct xwl_output *xwl_output, ClientPtr client, | ||||||
|                               RRModePtr mode, Bool from_vidmode) |                               RRModePtr mode, Bool from_vidmode) | ||||||
| @@ -442,6 +517,8 @@ xwl_output_set_emulated_mode(struct xwl_output *xwl_output, ClientPtr client,
 | @@ -405,6 +480,8 @@ xwl_output_set_emulated_mode(struct xwl_output *xwl_output, ClientPtr client,
 | ||||||
|          xwl_output_add_emulated_mode_for_client(xwl_output, client, mode, from_vidmode); |          xwl_output_add_emulated_mode_for_client(xwl_output, client, mode, from_vidmode); | ||||||
|   |   | ||||||
|      xwl_screen_check_resolution_change_emulation(xwl_output->xwl_screen); |      xwl_screen_check_resolution_change_emulation(xwl_output->xwl_screen); | ||||||
| @ -139,10 +139,10 @@ index 99ab1b288..20c254962 100644 | |||||||
|   |   | ||||||
|  static void |  static void | ||||||
| diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | ||||||
| index 85036adfe..e43f3de96 100644
 | index 2e01822fd..ac4d98e6a 100644
 | ||||||
| --- a/hw/xwayland/xwayland.c
 | --- a/hw/xwayland/xwayland.c
 | ||||||
| +++ b/hw/xwayland/xwayland.c
 | +++ b/hw/xwayland/xwayland.c
 | ||||||
| @@ -690,6 +690,27 @@ xwl_screen_check_resolution_change_emulation(struct xwl_screen *xwl_screen)
 | @@ -692,6 +692,27 @@ xwl_screen_check_resolution_change_emulation(struct xwl_screen *xwl_screen)
 | ||||||
|          xwl_window_check_resolution_change_emulation(xwl_window); |          xwl_window_check_resolution_change_emulation(xwl_window); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -170,7 +170,7 @@ index 85036adfe..e43f3de96 100644 | |||||||
|  static void |  static void | ||||||
|  xwl_window_init_allow_commits(struct xwl_window *xwl_window) |  xwl_window_init_allow_commits(struct xwl_window *xwl_window) | ||||||
|  { |  { | ||||||
| @@ -855,6 +876,8 @@ xwl_realize_window(WindowPtr window)
 | @@ -857,6 +878,8 @@ xwl_realize_window(WindowPtr window)
 | ||||||
|              return FALSE; |              return FALSE; | ||||||
|      } |      } | ||||||
|   |   | ||||||
| @ -180,10 +180,10 @@ index 85036adfe..e43f3de96 100644 | |||||||
|  } |  } | ||||||
|   |   | ||||||
| diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | ||||||
| index 9adf3af76..eb8c4bd70 100644
 | index 36c4c4c8b..1317ae5bb 100644
 | ||||||
| --- a/hw/xwayland/xwayland.h
 | --- a/hw/xwayland/xwayland.h
 | ||||||
| +++ b/hw/xwayland/xwayland.h
 | +++ b/hw/xwayland/xwayland.h
 | ||||||
| @@ -418,6 +418,7 @@ Bool xwl_screen_has_resolution_change_emulation(struct xwl_screen *xwl_screen);
 | @@ -420,6 +420,7 @@ Bool xwl_screen_has_resolution_change_emulation(struct xwl_screen *xwl_screen);
 | ||||||
|  struct xwl_output *xwl_screen_get_first_output(struct xwl_screen *xwl_screen); |  struct xwl_output *xwl_screen_get_first_output(struct xwl_screen *xwl_screen); | ||||||
|  void xwl_screen_check_resolution_change_emulation(struct xwl_screen *xwl_screen); |  void xwl_screen_check_resolution_change_emulation(struct xwl_screen *xwl_screen); | ||||||
|  Bool xwl_window_has_viewport_enabled(struct xwl_window *xwl_window); |  Bool xwl_window_has_viewport_enabled(struct xwl_window *xwl_window); | ||||||
| @ -191,7 +191,7 @@ index 9adf3af76..eb8c4bd70 100644 | |||||||
|   |   | ||||||
|  void xwl_tablet_tool_set_cursor(struct xwl_tablet_tool *tool); |  void xwl_tablet_tool_set_cursor(struct xwl_tablet_tool *tool); | ||||||
|  void xwl_seat_set_cursor(struct xwl_seat *xwl_seat); |  void xwl_seat_set_cursor(struct xwl_seat *xwl_seat); | ||||||
| @@ -456,6 +457,8 @@ RRModePtr xwl_output_find_mode(struct xwl_output *xwl_output,
 | @@ -458,6 +459,8 @@ RRModePtr xwl_output_find_mode(struct xwl_output *xwl_output,
 | ||||||
|  void xwl_output_set_emulated_mode(struct xwl_output *xwl_output, |  void xwl_output_set_emulated_mode(struct xwl_output *xwl_output, | ||||||
|                                    ClientPtr client, RRModePtr mode, |                                    ClientPtr client, RRModePtr mode, | ||||||
|                                    Bool from_vidmode); |                                    Bool from_vidmode); | ||||||
| @ -201,5 +201,5 @@ index 9adf3af76..eb8c4bd70 100644 | |||||||
|  RRModePtr xwayland_cvt(int HDisplay, int VDisplay, |  RRModePtr xwayland_cvt(int HDisplay, int VDisplay, | ||||||
|                         float VRefresh, Bool Reduced, Bool Interlaced); |                         float VRefresh, Bool Reduced, Bool Interlaced); | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										236
									
								
								0014-present-Add-present_vblank-exec_msc-field.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										236
									
								
								0014-present-Add-present_vblank-exec_msc-field.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,236 @@ | |||||||
|  | From 669e40390c3679b649db33f0aa4ae4cfdd17e2a9 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com> | ||||||
|  | Date: Fri, 11 Sep 2020 17:00:35 +0200 | ||||||
|  | Subject: [PATCH xserver 14/16] present: Add present_vblank::exec_msc field | ||||||
|  | MIME-Version: 1.0 | ||||||
|  | Content-Type: text/plain; charset=UTF-8 | ||||||
|  | Content-Transfer-Encoding: 8bit | ||||||
|  | 
 | ||||||
|  | For tracking the MSC when the present can be executed separately from | ||||||
|  | the target MSC. | ||||||
|  | 
 | ||||||
|  | Allows removing the requeue field instead, plus more later. | ||||||
|  | 
 | ||||||
|  | v2: | ||||||
|  | * Rename wait_msc → exec_msc (Roman Gilg) | ||||||
|  | * Use exec_msc = target_msc instead of exec_msc++, for clarity. | ||||||
|  | * Bug fix: Set exec_msc = target_msc also if present_flip returned | ||||||
|  |   false in present_execute. | ||||||
|  | v3: | ||||||
|  | * Set exec_msc = target_msc also if present_wnmd_flip returned | ||||||
|  |   false in present_wnmd_execute, for consistency. | ||||||
|  | v4: | ||||||
|  | * Specifically check for exec_msc == crtc_msc + 1 in | ||||||
|  |   present_execute_wait/copy, to avoid re-introducing | ||||||
|  |   https://bugs.freedesktop.org/show_bug.cgi?id=94596 . | ||||||
|  | 
 | ||||||
|  | Reviewed-by: Roman Gilg <subdiff@gmail.com> | ||||||
|  | Tested-by: Roman Gilg <subdiff@gmail.com> | ||||||
|  | (cherry picked from commit b0b3159abd8001fa3f6dfc44a288a95a62aa5cf6) | ||||||
|  | ---
 | ||||||
|  |  present/present_execute.c | 23 ++++++++++------------- | ||||||
|  |  present/present_priv.h    |  4 ++-- | ||||||
|  |  present/present_scmd.c    | 13 +++++++------ | ||||||
|  |  present/present_vblank.c  |  9 +++++---- | ||||||
|  |  present/present_wnmd.c    | 13 +++++++------ | ||||||
|  |  5 files changed, 31 insertions(+), 31 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/present/present_execute.c b/present/present_execute.c
 | ||||||
|  | index 8d1ef4a8c..58066db86 100644
 | ||||||
|  | --- a/present/present_execute.c
 | ||||||
|  | +++ b/present/present_execute.c
 | ||||||
|  | @@ -48,16 +48,13 @@ present_execute_wait(present_vblank_ptr vblank, uint64_t crtc_msc)
 | ||||||
|  |      ScreenPtr                   screen = window->drawable.pScreen; | ||||||
|  |      present_screen_priv_ptr screen_priv = present_screen_priv(screen); | ||||||
|  |   | ||||||
|  | -    if (vblank->requeue) {
 | ||||||
|  | -        vblank->requeue = FALSE;
 | ||||||
|  | -        if (msc_is_after(vblank->target_msc, crtc_msc) &&
 | ||||||
|  | -            Success == screen_priv->queue_vblank(screen,
 | ||||||
|  | -                                                 window,
 | ||||||
|  | -                                                 vblank->crtc,
 | ||||||
|  | -                                                 vblank->event_id,
 | ||||||
|  | -                                                 vblank->target_msc))
 | ||||||
|  | -            return TRUE;
 | ||||||
|  | -    }
 | ||||||
|  | +    /* We may have to requeue for the next MSC if check_flip_window prevented
 | ||||||
|  | +     * using a flip.
 | ||||||
|  | +     */
 | ||||||
|  | +    if (vblank->exec_msc == crtc_msc + 1 &&
 | ||||||
|  | +        screen_priv->queue_vblank(screen, window, vblank->crtc, vblank->event_id,
 | ||||||
|  | +                                  vblank->exec_msc) == Success)
 | ||||||
|  | +        return TRUE;
 | ||||||
|  |   | ||||||
|  |      if (vblank->wait_fence) { | ||||||
|  |          if (!present_fence_check_triggered(vblank->wait_fence)) { | ||||||
|  | @@ -75,13 +72,13 @@ present_execute_copy(present_vblank_ptr vblank, uint64_t crtc_msc)
 | ||||||
|  |      ScreenPtr                   screen = window->drawable.pScreen; | ||||||
|  |      present_screen_priv_ptr screen_priv = present_screen_priv(screen); | ||||||
|  |   | ||||||
|  | -    /* If present_flip failed, we may have to requeue for the target MSC */
 | ||||||
|  | -    if (vblank->target_msc == crtc_msc + 1 &&
 | ||||||
|  | +    /* If present_flip failed, we may have to requeue for the next MSC */
 | ||||||
|  | +    if (vblank->exec_msc == crtc_msc + 1 &&
 | ||||||
|  |          Success == screen_priv->queue_vblank(screen, | ||||||
|  |                                               window, | ||||||
|  |                                               vblank->crtc, | ||||||
|  |                                               vblank->event_id, | ||||||
|  | -                                             vblank->target_msc)) {
 | ||||||
|  | +                                             vblank->exec_msc)) {
 | ||||||
|  |          vblank->queued = TRUE; | ||||||
|  |          return; | ||||||
|  |      } | ||||||
|  | diff --git a/present/present_priv.h b/present/present_priv.h
 | ||||||
|  | index 90c3f4e79..f34edd5cf 100644
 | ||||||
|  | --- a/present/present_priv.h
 | ||||||
|  | +++ b/present/present_priv.h
 | ||||||
|  | @@ -70,14 +70,14 @@ struct present_vblank {
 | ||||||
|  |      int16_t             y_off; | ||||||
|  |      CARD16              kind; | ||||||
|  |      uint64_t            event_id; | ||||||
|  | -    uint64_t            target_msc;
 | ||||||
|  | +    uint64_t            target_msc;     /* target MSC when present should complete */
 | ||||||
|  | +    uint64_t            exec_msc;       /* MSC at which present can be executed */
 | ||||||
|  |      uint64_t            msc_offset; | ||||||
|  |      present_fence_ptr   idle_fence; | ||||||
|  |      present_fence_ptr   wait_fence; | ||||||
|  |      present_notify_ptr  notifies; | ||||||
|  |      int                 num_notifies; | ||||||
|  |      Bool                queued;         /* on present_exec_queue */ | ||||||
|  | -    Bool                requeue;        /* on queue, but target_msc has changed */
 | ||||||
|  |      Bool                flip;           /* planning on using flip */ | ||||||
|  |      Bool                flip_ready;     /* wants to flip, but waiting for previous flip or unflip */ | ||||||
|  |      Bool                flip_idler;     /* driver explicitly permitted idling */ | ||||||
|  | diff --git a/present/present_scmd.c b/present/present_scmd.c
 | ||||||
|  | index a4d046ca8..3e3ae3477 100644
 | ||||||
|  | --- a/present/present_scmd.c
 | ||||||
|  | +++ b/present/present_scmd.c
 | ||||||
|  | @@ -361,8 +361,8 @@ present_flip_notify(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc)
 | ||||||
|  |      ScreenPtr                   screen = vblank->screen; | ||||||
|  |      present_screen_priv_ptr     screen_priv = present_screen_priv(screen); | ||||||
|  |   | ||||||
|  | -    DebugPresent(("\tn %" PRIu64 " %p %" PRIu64 ": %08" PRIx32 " -> %08" PRIx32 "\n",
 | ||||||
|  | -                  vblank->event_id, vblank, vblank->target_msc,
 | ||||||
|  | +    DebugPresent(("\tn %" PRIu64 " %p %" PRIu64 " %" PRIu64 ": %08" PRIx32 " -> %08" PRIx32 "\n",
 | ||||||
|  | +                  vblank->event_id, vblank, vblank->exec_msc, vblank->target_msc,
 | ||||||
|  |                    vblank->pixmap ? vblank->pixmap->drawable.id : 0, | ||||||
|  |                    vblank->window ? vblank->window->drawable.id : 0)); | ||||||
|  |   | ||||||
|  | @@ -482,7 +482,7 @@ present_check_flip_window (WindowPtr window)
 | ||||||
|  |              vblank->flip = FALSE; | ||||||
|  |              vblank->reason = reason; | ||||||
|  |              if (vblank->sync_flip) | ||||||
|  | -                vblank->requeue = TRUE;
 | ||||||
|  | +                vblank->exec_msc = vblank->target_msc;
 | ||||||
|  |          } | ||||||
|  |      } | ||||||
|  |  } | ||||||
|  | @@ -608,6 +608,7 @@ present_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc)
 | ||||||
|  |                */ | ||||||
|  |              screen_priv->flip_pending = NULL; | ||||||
|  |              vblank->flip = FALSE; | ||||||
|  | +            vblank->exec_msc = vblank->target_msc;
 | ||||||
|  |          } | ||||||
|  |          DebugPresent(("\tc %p %" PRIu64 ": %08" PRIx32 " -> %08" PRIx32 "\n", | ||||||
|  |                        vblank, crtc_msc, vblank->pixmap->drawable.id, vblank->window->drawable.id)); | ||||||
|  | @@ -752,12 +753,12 @@ present_scmd_pixmap(WindowPtr window,
 | ||||||
|  |          return BadAlloc; | ||||||
|  |   | ||||||
|  |      if (vblank->flip && vblank->sync_flip) | ||||||
|  | -        target_msc--;
 | ||||||
|  | +        vblank->exec_msc--;
 | ||||||
|  |   | ||||||
|  |      xorg_list_append(&vblank->event_queue, &present_exec_queue); | ||||||
|  |      vblank->queued = TRUE; | ||||||
|  | -    if (msc_is_after(target_msc, crtc_msc)) {
 | ||||||
|  | -        ret = present_queue_vblank(screen, window, target_crtc, vblank->event_id, target_msc);
 | ||||||
|  | +    if (msc_is_after(vblank->exec_msc, crtc_msc)) {
 | ||||||
|  | +        ret = present_queue_vblank(screen, window, target_crtc, vblank->event_id, vblank->exec_msc);
 | ||||||
|  |          if (ret == Success) | ||||||
|  |              return Success; | ||||||
|  |   | ||||||
|  | diff --git a/present/present_vblank.c b/present/present_vblank.c
 | ||||||
|  | index a4b70c0d9..af14fe134 100644
 | ||||||
|  | --- a/present/present_vblank.c
 | ||||||
|  | +++ b/present/present_vblank.c
 | ||||||
|  | @@ -101,6 +101,7 @@ present_vblank_create(WindowPtr window,
 | ||||||
|  |      vblank->x_off = x_off; | ||||||
|  |      vblank->y_off = y_off; | ||||||
|  |      vblank->target_msc = target_msc; | ||||||
|  | +    vblank->exec_msc = target_msc;
 | ||||||
|  |      vblank->crtc = target_crtc; | ||||||
|  |      vblank->msc_offset = window_priv->msc_offset; | ||||||
|  |      vblank->notifies = notifies; | ||||||
|  | @@ -152,8 +153,8 @@ no_mem:
 | ||||||
|  |  void | ||||||
|  |  present_vblank_scrap(present_vblank_ptr vblank) | ||||||
|  |  { | ||||||
|  | -    DebugPresent(("\tx %" PRIu64 " %p %" PRIu64 ": %08" PRIx32 " -> %08" PRIx32 " (crtc %p)\n",
 | ||||||
|  | -                  vblank->event_id, vblank, vblank->target_msc,
 | ||||||
|  | +    DebugPresent(("\tx %" PRIu64 " %p %" PRIu64 " %" PRIu64 ": %08" PRIx32 " -> %08" PRIx32 " (crtc %p)\n",
 | ||||||
|  | +                  vblank->event_id, vblank, vblank->exec_msc, vblank->target_msc,
 | ||||||
|  |                    vblank->pixmap->drawable.id, vblank->window->drawable.id, | ||||||
|  |                    vblank->crtc)); | ||||||
|  |   | ||||||
|  | @@ -174,8 +175,8 @@ present_vblank_destroy(present_vblank_ptr vblank)
 | ||||||
|  |      /* Also make sure vblank is removed from event queue (wnmd) */ | ||||||
|  |      xorg_list_del(&vblank->event_queue); | ||||||
|  |   | ||||||
|  | -    DebugPresent(("\td %" PRIu64 " %p %" PRIu64 ": %08" PRIx32 " -> %08" PRIx32 "\n",
 | ||||||
|  | -                  vblank->event_id, vblank, vblank->target_msc,
 | ||||||
|  | +    DebugPresent(("\td %" PRIu64 " %p %" PRIu64 " %" PRIu64 ": %08" PRIx32 " -> %08" PRIx32 "\n",
 | ||||||
|  | +                  vblank->event_id, vblank, vblank->exec_msc, vblank->target_msc,
 | ||||||
|  |                    vblank->pixmap ? vblank->pixmap->drawable.id : 0, | ||||||
|  |                    vblank->window ? vblank->window->drawable.id : 0)); | ||||||
|  |   | ||||||
|  | diff --git a/present/present_wnmd.c b/present/present_wnmd.c
 | ||||||
|  | index 31e83d6ee..339e93edb 100644
 | ||||||
|  | --- a/present/present_wnmd.c
 | ||||||
|  | +++ b/present/present_wnmd.c
 | ||||||
|  | @@ -168,8 +168,8 @@ present_wnmd_flip_notify(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_
 | ||||||
|  |      WindowPtr                   window = vblank->window; | ||||||
|  |      present_window_priv_ptr     window_priv = present_window_priv(window); | ||||||
|  |   | ||||||
|  | -    DebugPresent(("\tn %" PRIu64 " %p %" PRIu64 ": %08" PRIx32 " -> %08" PRIx32 "\n",
 | ||||||
|  | -                  vblank->event_id, vblank, vblank->target_msc,
 | ||||||
|  | +    DebugPresent(("\tn %" PRIu64 " %p %" PRIu64 " %" PRIu64 ": %08" PRIx32 " -> %08" PRIx32 "\n",
 | ||||||
|  | +                  vblank->event_id, vblank, vblank->exec_msc, vblank->target_msc,
 | ||||||
|  |                    vblank->pixmap ? vblank->pixmap->drawable.id : 0, | ||||||
|  |                    vblank->window ? vblank->window->drawable.id : 0)); | ||||||
|  |   | ||||||
|  | @@ -343,7 +343,7 @@ present_wnmd_check_flip_window (WindowPtr window)
 | ||||||
|  |              vblank->flip = FALSE; | ||||||
|  |              vblank->reason = reason; | ||||||
|  |              if (vblank->sync_flip) | ||||||
|  | -                vblank->requeue = TRUE;
 | ||||||
|  | +                vblank->exec_msc = vblank->target_msc;
 | ||||||
|  |          } | ||||||
|  |      } | ||||||
|  |  } | ||||||
|  | @@ -491,6 +491,7 @@ present_wnmd_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc)
 | ||||||
|  |                */ | ||||||
|  |              window_priv->flip_pending = NULL; | ||||||
|  |              vblank->flip = FALSE; | ||||||
|  | +            vblank->exec_msc = vblank->target_msc;
 | ||||||
|  |          } | ||||||
|  |          DebugPresent(("\tc %p %" PRIu64 ": %08" PRIx32 " -> %08" PRIx32 "\n", | ||||||
|  |                        vblank, crtc_msc, vblank->pixmap->drawable.id, vblank->window->drawable.id)); | ||||||
|  | @@ -632,12 +633,12 @@ present_wnmd_pixmap(WindowPtr window,
 | ||||||
|  |          return BadAlloc; | ||||||
|  |   | ||||||
|  |      if (vblank->flip && vblank->sync_flip) | ||||||
|  | -        target_msc--;
 | ||||||
|  | +        vblank->exec_msc--;
 | ||||||
|  |   | ||||||
|  |      xorg_list_append(&vblank->event_queue, &window_priv->exec_queue); | ||||||
|  |      vblank->queued = TRUE; | ||||||
|  | -    if (crtc_msc < target_msc) {
 | ||||||
|  | -        if (present_wnmd_queue_vblank(screen, window, target_crtc, vblank->event_id, target_msc) == Success) {
 | ||||||
|  | +    if (crtc_msc < vblank->exec_msc) {
 | ||||||
|  | +        if (present_wnmd_queue_vblank(screen, window, target_crtc, vblank->event_id, vblank->exec_msc) == Success) {
 | ||||||
|  |              return Success; | ||||||
|  |          } | ||||||
|  |          DebugPresent(("present_queue_vblank failed\n")); | ||||||
|  | -- 
 | ||||||
|  | 2.28.0 | ||||||
|  | 
 | ||||||
| @ -1,4 +1,4 @@ | |||||||
| From aa0f9ba1aa3f12f7e65ed64ac03114f27c8bff1f Mon Sep 17 00:00:00 2001 | From a35e6f9a2b15a446138f6f3e201a19833a5a2454 Mon Sep 17 00:00:00 2001 | ||||||
| From: Hans de Goede <hdegoede@redhat.com> | From: Hans de Goede <hdegoede@redhat.com> | ||||||
| Date: Mon, 27 Jan 2020 11:08:00 +0100 | Date: Mon, 27 Jan 2020 11:08:00 +0100 | ||||||
| Subject: [PATCH xserver 14/24] xwayland: Cache client-id for the | Subject: [PATCH xserver 14/24] xwayland: Cache client-id for the | ||||||
| @ -24,10 +24,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  2 files changed, 34 insertions(+), 16 deletions(-) |  2 files changed, 34 insertions(+), 16 deletions(-) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | ||||||
| index e43f3de96..f4d433bca 100644
 | index ac4d98e6a..c16da330c 100644
 | ||||||
| --- a/hw/xwayland/xwayland.c
 | --- a/hw/xwayland/xwayland.c
 | ||||||
| +++ b/hw/xwayland/xwayland.c
 | +++ b/hw/xwayland/xwayland.c
 | ||||||
| @@ -576,20 +576,11 @@ xwl_window_enable_viewport(struct xwl_window *xwl_window,
 | @@ -578,20 +578,11 @@ xwl_window_enable_viewport(struct xwl_window *xwl_window,
 | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  static Bool |  static Bool | ||||||
| @ -51,7 +51,7 @@ index e43f3de96..f4d433bca 100644 | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  static ClientPtr |  static ClientPtr | ||||||
| @@ -603,7 +594,7 @@ xwl_window_get_owner(struct xwl_window *xwl_window)
 | @@ -605,7 +596,7 @@ xwl_window_get_owner(struct xwl_window *xwl_window)
 | ||||||
|       * decoration window. In that case return the client of the |       * decoration window. In that case return the client of the | ||||||
|       * first *and only* child of the toplevel (decoration) window. |       * first *and only* child of the toplevel (decoration) window. | ||||||
|       */ |       */ | ||||||
| @ -60,7 +60,7 @@ index e43f3de96..f4d433bca 100644 | |||||||
|          if (window->firstChild && window->firstChild == window->lastChild) |          if (window->firstChild && window->firstChild == window->lastChild) | ||||||
|              return wClient(window->firstChild); |              return wClient(window->firstChild); | ||||||
|          else |          else | ||||||
| @@ -698,9 +689,7 @@ xwl_screen_check_resolution_change_emulation(struct xwl_screen *xwl_screen)
 | @@ -700,9 +691,7 @@ xwl_screen_check_resolution_change_emulation(struct xwl_screen *xwl_screen)
 | ||||||
|  Bool |  Bool | ||||||
|  xwl_window_is_toplevel(WindowPtr window) |  xwl_window_is_toplevel(WindowPtr window) | ||||||
|  { |  { | ||||||
| @ -71,7 +71,7 @@ index e43f3de96..f4d433bca 100644 | |||||||
|          return FALSE; |          return FALSE; | ||||||
|   |   | ||||||
|      /* CSD and override-redirect toplevel windows */ |      /* CSD and override-redirect toplevel windows */ | ||||||
| @@ -975,6 +964,30 @@ xwl_set_window_pixmap(WindowPtr window,
 | @@ -977,6 +966,30 @@ xwl_set_window_pixmap(WindowPtr window,
 | ||||||
|      ensure_surface_for_window(window); |      ensure_surface_for_window(window); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -102,7 +102,7 @@ index e43f3de96..f4d433bca 100644 | |||||||
|  static void |  static void | ||||||
|  xwl_resize_window(WindowPtr window, |  xwl_resize_window(WindowPtr window, | ||||||
|                    int x, int y, |                    int x, int y, | ||||||
| @@ -1552,6 +1565,9 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv)
 | @@ -1576,6 +1589,9 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv)
 | ||||||
|      xwl_screen->CloseScreen = pScreen->CloseScreen; |      xwl_screen->CloseScreen = pScreen->CloseScreen; | ||||||
|      pScreen->CloseScreen = xwl_close_screen; |      pScreen->CloseScreen = xwl_close_screen; | ||||||
|   |   | ||||||
| @ -113,7 +113,7 @@ index e43f3de96..f4d433bca 100644 | |||||||
|      pScreen->ResizeWindow = xwl_resize_window; |      pScreen->ResizeWindow = xwl_resize_window; | ||||||
|   |   | ||||||
| diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | ||||||
| index eb8c4bd70..126af8823 100644
 | index 1317ae5bb..f5ffadfcc 100644
 | ||||||
| --- a/hw/xwayland/xwayland.h
 | --- a/hw/xwayland/xwayland.h
 | ||||||
| +++ b/hw/xwayland/xwayland.h
 | +++ b/hw/xwayland/xwayland.h
 | ||||||
| @@ -118,6 +118,7 @@ struct xwl_screen {
 | @@ -118,6 +118,7 @@ struct xwl_screen {
 | ||||||
| @ -133,5 +133,5 @@ index eb8c4bd70..126af8823 100644 | |||||||
|   |   | ||||||
|      struct xorg_list output_list; |      struct xorg_list output_list; | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										58
									
								
								0015-present-wnmd-Move-up-present_wnmd_queue_vblank.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								0015-present-wnmd-Move-up-present_wnmd_queue_vblank.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,58 @@ | |||||||
|  | From 96ef31e0f20fcffb2edfe4cb9510f994c188785f Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com> | ||||||
|  | Date: Tue, 28 Jul 2020 18:53:45 +0200 | ||||||
|  | Subject: [PATCH xserver 15/16] present/wnmd: Move up present_wnmd_queue_vblank | ||||||
|  | 
 | ||||||
|  | Allowing it to be called from more functions than before. No functional | ||||||
|  | change. | ||||||
|  | 
 | ||||||
|  | Reviewed-by: Roman Gilg <subdiff@gmail.com> | ||||||
|  | Tested-by: Roman Gilg <subdiff@gmail.com> | ||||||
|  | (cherry picked from commit d14ea667feccf085c7d66a7c63f380975e07af66) | ||||||
|  | ---
 | ||||||
|  |  present/present_wnmd.c | 22 +++++++++++----------- | ||||||
|  |  1 file changed, 11 insertions(+), 11 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/present/present_wnmd.c b/present/present_wnmd.c
 | ||||||
|  | index 339e93edb..2c11e53f5 100644
 | ||||||
|  | --- a/present/present_wnmd.c
 | ||||||
|  | +++ b/present/present_wnmd.c
 | ||||||
|  | @@ -42,6 +42,17 @@
 | ||||||
|  |  static void | ||||||
|  |  present_wnmd_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc); | ||||||
|  |   | ||||||
|  | +static int
 | ||||||
|  | +present_wnmd_queue_vblank(ScreenPtr screen,
 | ||||||
|  | +                          WindowPtr window,
 | ||||||
|  | +                          RRCrtcPtr crtc,
 | ||||||
|  | +                          uint64_t event_id,
 | ||||||
|  | +                          uint64_t msc)
 | ||||||
|  | +{
 | ||||||
|  | +    present_screen_priv_ptr screen_priv = present_screen_priv(screen);
 | ||||||
|  | +    return (*screen_priv->wnmd_info->queue_vblank) (window, crtc, event_id, msc);
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  |  static void | ||||||
|  |  present_wnmd_create_event_id(present_window_priv_ptr window_priv, present_vblank_ptr vblank) | ||||||
|  |  { | ||||||
|  | @@ -511,17 +522,6 @@ present_wnmd_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc)
 | ||||||
|  |      present_execute_post(vblank, ust, crtc_msc); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -static int
 | ||||||
|  | -present_wnmd_queue_vblank(ScreenPtr screen,
 | ||||||
|  | -                             WindowPtr window,
 | ||||||
|  | -                             RRCrtcPtr crtc,
 | ||||||
|  | -                             uint64_t event_id,
 | ||||||
|  | -                             uint64_t msc)
 | ||||||
|  | -{
 | ||||||
|  | -    present_screen_priv_ptr screen_priv = present_screen_priv(screen);
 | ||||||
|  | -    return (*screen_priv->wnmd_info->queue_vblank) (window, crtc, event_id, msc);
 | ||||||
|  | -}
 | ||||||
|  | -
 | ||||||
|  |  static uint64_t | ||||||
|  |  present_wnmd_window_to_crtc_msc(WindowPtr window, RRCrtcPtr crtc, uint64_t window_msc, uint64_t new_msc) | ||||||
|  |  { | ||||||
|  | -- 
 | ||||||
|  | 2.28.0 | ||||||
|  | 
 | ||||||
| @ -1,4 +1,4 @@ | |||||||
| From 1f39cb2ef51c72ec0c448c5d9571540bb0d9f3eb Mon Sep 17 00:00:00 2001 | From e4d8f7770e27ed56e23e0ef2a87bed8cb4fa28e0 Mon Sep 17 00:00:00 2001 | ||||||
| From: Roman Gilg <subdiff@gmail.com> | From: Roman Gilg <subdiff@gmail.com> | ||||||
| Date: Fri, 3 Jan 2020 17:12:14 +0100 | Date: Fri, 3 Jan 2020 17:12:14 +0100 | ||||||
| Subject: [PATCH xserver 15/24] xwayland: Reuse viewport instead of recreating | Subject: [PATCH xserver 15/24] xwayland: Reuse viewport instead of recreating | ||||||
| @ -17,10 +17,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  1 file changed, 7 insertions(+), 11 deletions(-) |  1 file changed, 7 insertions(+), 11 deletions(-) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | ||||||
| index f4d433bca..320589dde 100644
 | index c16da330c..ac301ae4a 100644
 | ||||||
| --- a/hw/xwayland/xwayland.c
 | --- a/hw/xwayland/xwayland.c
 | ||||||
| +++ b/hw/xwayland/xwayland.c
 | +++ b/hw/xwayland/xwayland.c
 | ||||||
| @@ -550,17 +550,13 @@ xwl_window_enable_viewport(struct xwl_window *xwl_window,
 | @@ -552,17 +552,13 @@ xwl_window_enable_viewport(struct xwl_window *xwl_window,
 | ||||||
|                             struct xwl_output *xwl_output, |                             struct xwl_output *xwl_output, | ||||||
|                             struct xwl_emulated_mode *emulated_mode) |                             struct xwl_emulated_mode *emulated_mode) | ||||||
|  { |  { | ||||||
| @ -46,5 +46,5 @@ index f4d433bca..320589dde 100644 | |||||||
|      wp_viewport_set_source(xwl_window->viewport, |      wp_viewport_set_source(xwl_window->viewport, | ||||||
|                             wl_fixed_from_int(0), |                             wl_fixed_from_int(0), | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										139
									
								
								0016-present-wnmd-Execute-copies-at-target_msc-1-already.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										139
									
								
								0016-present-wnmd-Execute-copies-at-target_msc-1-already.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,139 @@ | |||||||
|  | From c3e4c1a0fd5d4d6015e9e6317b758018317e56d1 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com> | ||||||
|  | Date: Tue, 28 Jul 2020 18:40:47 +0200 | ||||||
|  | Subject: [PATCH xserver 16/16] present/wnmd: Execute copies at target_msc-1 | ||||||
|  |  already | ||||||
|  | 
 | ||||||
|  | It always takes one update cycle for the copy to become visible on the | ||||||
|  | host windowing system, so waiting for the target MSC resulted in 1 cycle | ||||||
|  | delay. | ||||||
|  | 
 | ||||||
|  | We re-use the idle list for copies which were executed but need their | ||||||
|  | completion event sent. | ||||||
|  | 
 | ||||||
|  | Fixes black seams when resizing the "Builder" sub-window of | ||||||
|  | 
 | ||||||
|  |  GDK_BACKEND=x11 gtk4-demo | ||||||
|  | 
 | ||||||
|  | on Xwayland (see | ||||||
|  | https://gitlab.gnome.org/GNOME/mutter/-/issues/1290#note_873557). | ||||||
|  | 
 | ||||||
|  | Unfortunately, this cannot completely fix the seams with apps which | ||||||
|  | queue up multiple frames in advance, since there's always at least one | ||||||
|  | queued frame corresponding to the old window size. But it should at | ||||||
|  | least help a little in that case as well. | ||||||
|  | 
 | ||||||
|  | v2: | ||||||
|  | * Bug fix: Don't update exec_msc in present_wnmd_check_flip_window. | ||||||
|  |   (Roman Gilg) | ||||||
|  | * Use exec_msc = target_msc - 1 instead of exec_msc--, and add a | ||||||
|  |   comment, for clarity. | ||||||
|  | v3: | ||||||
|  | * Drop exec_msc = target_msc again in present_wnmd_execute. | ||||||
|  | * present_execute_copy should never set vblank->queued in | ||||||
|  |   present_wnmd_execute now, so replace that branch with an assertion. | ||||||
|  |   (Roman Gilg) | ||||||
|  | 
 | ||||||
|  | Reviewed-by: Roman Gilg <subdiff@gmail.com> | ||||||
|  | Tested-by: Roman Gilg <subdiff@gmail.com> | ||||||
|  | (cherry picked from commit 1cccb486d48a5d2e7649836b993805bb65dc09e3) | ||||||
|  | [Since present_wnmd_event_notify hasn't been split up on the 1.20 | ||||||
|  | branch, it needs to check vblank->flip. Doing the same in | ||||||
|  | present_wnmd_free_idle_vblanks to be safe, though I'm not sure it's | ||||||
|  | actually possible to hit non-flips there.] | ||||||
|  | ---
 | ||||||
|  |  present/present_wnmd.c | 28 ++++++++++++++++++---------- | ||||||
|  |  1 file changed, 18 insertions(+), 10 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/present/present_wnmd.c b/present/present_wnmd.c
 | ||||||
|  | index 2c11e53f5..8c31619a2 100644
 | ||||||
|  | --- a/present/present_wnmd.c
 | ||||||
|  | +++ b/present/present_wnmd.c
 | ||||||
|  | @@ -122,7 +122,8 @@ present_wnmd_free_idle_vblanks(WindowPtr window)
 | ||||||
|  |      present_vblank_ptr              vblank, tmp; | ||||||
|  |   | ||||||
|  |      xorg_list_for_each_entry_safe(vblank, tmp, &window_priv->idle_queue, event_queue) { | ||||||
|  | -        present_wnmd_free_idle_vblank(vblank);
 | ||||||
|  | +        if (vblank->flip)
 | ||||||
|  | +            present_wnmd_free_idle_vblank(vblank);
 | ||||||
|  |      } | ||||||
|  |   | ||||||
|  |      if (window_priv->flip_active) { | ||||||
|  | @@ -245,7 +246,12 @@ present_wnmd_event_notify(WindowPtr window, uint64_t event_id, uint64_t ust, uin
 | ||||||
|  |   | ||||||
|  |      xorg_list_for_each_entry(vblank, &window_priv->idle_queue, event_queue) { | ||||||
|  |          if (vblank->event_id == event_id) { | ||||||
|  | -            present_wnmd_free_idle_vblank(vblank);
 | ||||||
|  | +            if (vblank->flip)
 | ||||||
|  | +                present_wnmd_free_idle_vblank(vblank);
 | ||||||
|  | +            else
 | ||||||
|  | +                /* Copies which were executed but need their completion event sent */
 | ||||||
|  | +                present_execute_post(vblank, ust, msc);
 | ||||||
|  | +
 | ||||||
|  |              return; | ||||||
|  |          } | ||||||
|  |      } | ||||||
|  | @@ -353,8 +359,6 @@ present_wnmd_check_flip_window (WindowPtr window)
 | ||||||
|  |                                           vblank->sync_flip, vblank->valid, 0, 0, &reason)) { | ||||||
|  |              vblank->flip = FALSE; | ||||||
|  |              vblank->reason = reason; | ||||||
|  | -            if (vblank->sync_flip)
 | ||||||
|  | -                vblank->exec_msc = vblank->target_msc;
 | ||||||
|  |          } | ||||||
|  |      } | ||||||
|  |  } | ||||||
|  | @@ -454,6 +458,7 @@ present_wnmd_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc)
 | ||||||
|  |      vblank->queued = FALSE; | ||||||
|  |   | ||||||
|  |      if (vblank->pixmap && vblank->window) { | ||||||
|  | +        ScreenPtr screen = window->drawable.pScreen;
 | ||||||
|  |   | ||||||
|  |          if (vblank->flip) { | ||||||
|  |              RegionPtr damage; | ||||||
|  | @@ -479,7 +484,6 @@ present_wnmd_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc)
 | ||||||
|  |              // ask the driver | ||||||
|  |              if (present_wnmd_flip(vblank->window, vblank->crtc, vblank->event_id, | ||||||
|  |                                       vblank->target_msc, vblank->pixmap, vblank->sync_flip, damage)) { | ||||||
|  | -                ScreenPtr screen = window->drawable.pScreen;
 | ||||||
|  |                  WindowPtr toplvl_window = present_wnmd_toplvl_pixmap_window(vblank->window); | ||||||
|  |                  PixmapPtr old_pixmap = screen->GetWindowPixmap(window); | ||||||
|  |   | ||||||
|  | @@ -502,7 +506,6 @@ present_wnmd_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc)
 | ||||||
|  |                */ | ||||||
|  |              window_priv->flip_pending = NULL; | ||||||
|  |              vblank->flip = FALSE; | ||||||
|  | -            vblank->exec_msc = vblank->target_msc;
 | ||||||
|  |          } | ||||||
|  |          DebugPresent(("\tc %p %" PRIu64 ": %08" PRIx32 " -> %08" PRIx32 "\n", | ||||||
|  |                        vblank, crtc_msc, vblank->pixmap->drawable.id, vblank->window->drawable.id)); | ||||||
|  | @@ -510,9 +513,12 @@ present_wnmd_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc)
 | ||||||
|  |          present_wnmd_cancel_flip(window); | ||||||
|  |   | ||||||
|  |          present_execute_copy(vblank, crtc_msc); | ||||||
|  | +        assert(!vblank->queued);
 | ||||||
|  |   | ||||||
|  | -        if (vblank->queued) {
 | ||||||
|  | -            xorg_list_add(&vblank->event_queue, &window_priv->exec_queue);
 | ||||||
|  | +        if (present_wnmd_queue_vblank(screen, window, vblank->crtc,
 | ||||||
|  | +                                      vblank->event_id, crtc_msc + 1)
 | ||||||
|  | +            == Success) {
 | ||||||
|  | +            xorg_list_add(&vblank->event_queue, &window_priv->idle_queue);
 | ||||||
|  |              xorg_list_append(&vblank->window_list, &window_priv->vblank); | ||||||
|  |   | ||||||
|  |              return; | ||||||
|  | @@ -632,8 +638,10 @@ present_wnmd_pixmap(WindowPtr window,
 | ||||||
|  |      if (!vblank) | ||||||
|  |          return BadAlloc; | ||||||
|  |   | ||||||
|  | -    if (vblank->flip && vblank->sync_flip)
 | ||||||
|  | -        vblank->exec_msc--;
 | ||||||
|  | +    /* WNMD presentations always complete (at least) one frame after they
 | ||||||
|  | +     * are executed
 | ||||||
|  | +     */
 | ||||||
|  | +    vblank->exec_msc = vblank->target_msc - 1;
 | ||||||
|  |   | ||||||
|  |      xorg_list_append(&vblank->event_queue, &window_priv->exec_queue); | ||||||
|  |      vblank->queued = TRUE; | ||||||
|  | -- 
 | ||||||
|  | 2.28.0 | ||||||
|  | 
 | ||||||
| @ -1,4 +1,4 @@ | |||||||
| From 8cedbfd448edf410a45c57addcee0e7304f11b86 Mon Sep 17 00:00:00 2001 | From 66a026eeaa49e1042d4d2ec655e78771e1acd9df Mon Sep 17 00:00:00 2001 | ||||||
| From: Roman Gilg <subdiff@gmail.com> | From: Roman Gilg <subdiff@gmail.com> | ||||||
| Date: Fri, 3 Jan 2020 17:27:28 +0100 | Date: Fri, 3 Jan 2020 17:27:28 +0100 | ||||||
| Subject: [PATCH xserver 16/24] xwayland: Recurse on finding the none-wm owner | Subject: [PATCH xserver 16/24] xwayland: Recurse on finding the none-wm owner | ||||||
| @ -28,10 +28,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  1 file changed, 8 insertions(+), 9 deletions(-) |  1 file changed, 8 insertions(+), 9 deletions(-) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | ||||||
| index 320589dde..f42b80b90 100644
 | index ac301ae4a..94e3a18fa 100644
 | ||||||
| --- a/hw/xwayland/xwayland.c
 | --- a/hw/xwayland/xwayland.c
 | ||||||
| +++ b/hw/xwayland/xwayland.c
 | +++ b/hw/xwayland/xwayland.c
 | ||||||
| @@ -580,19 +580,18 @@ window_is_wm_window(WindowPtr window)
 | @@ -582,19 +582,18 @@ window_is_wm_window(WindowPtr window)
 | ||||||
|  } |  } | ||||||
|   |   | ||||||
|  static ClientPtr |  static ClientPtr | ||||||
| @ -56,7 +56,7 @@ index 320589dde..f42b80b90 100644 | |||||||
|          else |          else | ||||||
|              return NULL; /* Should never happen, skip resolution emulation */ |              return NULL; /* Should never happen, skip resolution emulation */ | ||||||
|      } |      } | ||||||
| @@ -613,7 +612,7 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window,
 | @@ -615,7 +614,7 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window,
 | ||||||
|      if (!xwl_screen_has_resolution_change_emulation(xwl_screen)) |      if (!xwl_screen_has_resolution_change_emulation(xwl_screen)) | ||||||
|          return FALSE; |          return FALSE; | ||||||
|   |   | ||||||
| @ -65,7 +65,7 @@ index 320589dde..f42b80b90 100644 | |||||||
|      if (!owner) |      if (!owner) | ||||||
|          return FALSE; |          return FALSE; | ||||||
|   |   | ||||||
| @@ -692,8 +691,8 @@ xwl_window_is_toplevel(WindowPtr window)
 | @@ -694,8 +693,8 @@ xwl_window_is_toplevel(WindowPtr window)
 | ||||||
|      if (window_get_damage(window)) |      if (window_get_damage(window)) | ||||||
|          return TRUE; |          return TRUE; | ||||||
|   |   | ||||||
| @ -77,5 +77,5 @@ index 320589dde..f42b80b90 100644 | |||||||
|   |   | ||||||
|  static void |  static void | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| From 939a78925a1d591e6aaf291a6609b9c6e54ee6ce Mon Sep 17 00:00:00 2001 | From 8b9a66212bacd780f1a8ac37cbb490b650843c28 Mon Sep 17 00:00:00 2001 | ||||||
| From: Roman Gilg <subdiff@gmail.com> | From: Roman Gilg <subdiff@gmail.com> | ||||||
| Date: Wed, 15 Jan 2020 10:07:58 +0100 | Date: Wed, 15 Jan 2020 10:07:58 +0100 | ||||||
| Subject: [PATCH xserver 17/24] xwayland: Make window_get_none_wm_owner return | Subject: [PATCH xserver 17/24] xwayland: Make window_get_none_wm_owner return | ||||||
| @ -25,10 +25,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  1 file changed, 10 insertions(+), 7 deletions(-) |  1 file changed, 10 insertions(+), 7 deletions(-) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | ||||||
| index f42b80b90..d70d729ae 100644
 | index 94e3a18fa..c60a2ce67 100644
 | ||||||
| --- a/hw/xwayland/xwayland.c
 | --- a/hw/xwayland/xwayland.c
 | ||||||
| +++ b/hw/xwayland/xwayland.c
 | +++ b/hw/xwayland/xwayland.c
 | ||||||
| @@ -579,10 +579,10 @@ window_is_wm_window(WindowPtr window)
 | @@ -581,10 +581,10 @@ window_is_wm_window(WindowPtr window)
 | ||||||
|      return CLIENT_ID(window->drawable.id) == xwl_screen->wm_client_id; |      return CLIENT_ID(window->drawable.id) == xwl_screen->wm_client_id; | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -42,7 +42,7 @@ index f42b80b90..d70d729ae 100644 | |||||||
|   |   | ||||||
|      /* If the toplevel window is owned by the window-manager, then the |      /* If the toplevel window is owned by the window-manager, then the | ||||||
|       * actual client toplevel window has been reparented to some window-manager |       * actual client toplevel window has been reparented to some window-manager | ||||||
| @@ -591,12 +591,12 @@ window_get_none_wm_owner(WindowPtr window)
 | @@ -593,12 +593,12 @@ window_get_none_wm_owner(WindowPtr window)
 | ||||||
|       */ |       */ | ||||||
|      if (window_is_wm_window(window)) { |      if (window_is_wm_window(window)) { | ||||||
|          if (window->firstChild && window->firstChild == window->lastChild) |          if (window->firstChild && window->firstChild == window->lastChild) | ||||||
| @ -57,7 +57,7 @@ index f42b80b90..d70d729ae 100644 | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  static Bool |  static Bool | ||||||
| @@ -608,14 +608,17 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window,
 | @@ -610,14 +610,17 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window,
 | ||||||
|      struct xwl_emulated_mode *emulated_mode; |      struct xwl_emulated_mode *emulated_mode; | ||||||
|      struct xwl_output *xwl_output; |      struct xwl_output *xwl_output; | ||||||
|      ClientPtr owner; |      ClientPtr owner; | ||||||
| @ -78,5 +78,5 @@ index f42b80b90..d70d729ae 100644 | |||||||
|       * This path gets hit by most games / libs (e.g. SDL, SFML, OGRE) |       * This path gets hit by most games / libs (e.g. SDL, SFML, OGRE) | ||||||
|       */ |       */ | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| From c5d9cb5f4bc4f703b66fc524a76247c742490b30 Mon Sep 17 00:00:00 2001 | From da3e06f4bed7fa60838ce89a0b45ea73c7d9615c Mon Sep 17 00:00:00 2001 | ||||||
| From: Roman Gilg <subdiff@gmail.com> | From: Roman Gilg <subdiff@gmail.com> | ||||||
| Date: Fri, 3 Jan 2020 17:55:28 +0100 | Date: Fri, 3 Jan 2020 17:55:28 +0100 | ||||||
| Subject: [PATCH xserver 18/24] xwayland: Check emulation on client toplevel | Subject: [PATCH xserver 18/24] xwayland: Check emulation on client toplevel | ||||||
| @ -25,10 +25,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  2 files changed, 11 insertions(+), 17 deletions(-) |  2 files changed, 11 insertions(+), 17 deletions(-) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | ||||||
| index d70d729ae..14227a327 100644
 | index c60a2ce67..898a291fd 100644
 | ||||||
| --- a/hw/xwayland/xwayland.c
 | --- a/hw/xwayland/xwayland.c
 | ||||||
| +++ b/hw/xwayland/xwayland.c
 | +++ b/hw/xwayland/xwayland.c
 | ||||||
| @@ -609,6 +609,7 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window,
 | @@ -611,6 +611,7 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window,
 | ||||||
|      struct xwl_output *xwl_output; |      struct xwl_output *xwl_output; | ||||||
|      ClientPtr owner; |      ClientPtr owner; | ||||||
|      WindowPtr window; |      WindowPtr window; | ||||||
| @ -36,7 +36,7 @@ index d70d729ae..14227a327 100644 | |||||||
|   |   | ||||||
|      if (!xwl_screen_has_resolution_change_emulation(xwl_screen)) |      if (!xwl_screen_has_resolution_change_emulation(xwl_screen)) | ||||||
|          return FALSE; |          return FALSE; | ||||||
| @@ -618,6 +619,7 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window,
 | @@ -620,6 +621,7 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window,
 | ||||||
|          return FALSE; |          return FALSE; | ||||||
|   |   | ||||||
|      owner = wClient(window); |      owner = wClient(window); | ||||||
| @ -44,7 +44,7 @@ index d70d729ae..14227a327 100644 | |||||||
|   |   | ||||||
|      /* 1. Test if the window matches the emulated mode on one of the outputs |      /* 1. Test if the window matches the emulated mode on one of the outputs | ||||||
|       * This path gets hit by most games / libs (e.g. SDL, SFML, OGRE) |       * This path gets hit by most games / libs (e.g. SDL, SFML, OGRE) | ||||||
| @@ -627,10 +629,10 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window,
 | @@ -629,10 +631,10 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window,
 | ||||||
|          if (!emulated_mode) |          if (!emulated_mode) | ||||||
|              continue; |              continue; | ||||||
|   |   | ||||||
| @ -59,7 +59,7 @@ index d70d729ae..14227a327 100644 | |||||||
|   |   | ||||||
|              *emulated_mode_ret = emulated_mode; |              *emulated_mode_ret = emulated_mode; | ||||||
|              *xwl_output_ret = xwl_output; |              *xwl_output_ret = xwl_output; | ||||||
| @@ -646,9 +648,9 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window,
 | @@ -648,9 +650,9 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window,
 | ||||||
|      emulated_mode = xwl_output_get_emulated_mode_for_client(xwl_output, owner); |      emulated_mode = xwl_output_get_emulated_mode_for_client(xwl_output, owner); | ||||||
|      if (xwl_output && xwl_window->window->overrideRedirect && |      if (xwl_output && xwl_window->window->overrideRedirect && | ||||||
|          emulated_mode && emulated_mode->from_vidmode && |          emulated_mode && emulated_mode->from_vidmode && | ||||||
| @ -72,7 +72,7 @@ index d70d729ae..14227a327 100644 | |||||||
|   |   | ||||||
|          *emulated_mode_ret = emulated_mode; |          *emulated_mode_ret = emulated_mode; | ||||||
|          *xwl_output_ret = xwl_output; |          *xwl_output_ret = xwl_output; | ||||||
| @@ -768,8 +770,6 @@ ensure_surface_for_window(WindowPtr window)
 | @@ -770,8 +772,6 @@ ensure_surface_for_window(WindowPtr window)
 | ||||||
|   |   | ||||||
|      xwl_window->xwl_screen = xwl_screen; |      xwl_window->xwl_screen = xwl_screen; | ||||||
|      xwl_window->window = window; |      xwl_window->window = window; | ||||||
| @ -81,7 +81,7 @@ index d70d729ae..14227a327 100644 | |||||||
|      xwl_window->surface = wl_compositor_create_surface(xwl_screen->compositor); |      xwl_window->surface = wl_compositor_create_surface(xwl_screen->compositor); | ||||||
|      if (xwl_window->surface == NULL) { |      if (xwl_window->surface == NULL) { | ||||||
|          ErrorF("wl_display_create_surface failed\n"); |          ErrorF("wl_display_create_surface failed\n"); | ||||||
| @@ -997,20 +997,15 @@ xwl_resize_window(WindowPtr window,
 | @@ -999,20 +999,15 @@ xwl_resize_window(WindowPtr window,
 | ||||||
|      struct xwl_window *xwl_window; |      struct xwl_window *xwl_window; | ||||||
|   |   | ||||||
|      xwl_screen = xwl_screen_get(screen); |      xwl_screen = xwl_screen_get(screen); | ||||||
| @ -105,7 +105,7 @@ index d70d729ae..14227a327 100644 | |||||||
|   |   | ||||||
|  static void |  static void | ||||||
| diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | ||||||
| index 126af8823..01aef27d2 100644
 | index f5ffadfcc..0d0baac9b 100644
 | ||||||
| --- a/hw/xwayland/xwayland.h
 | --- a/hw/xwayland/xwayland.h
 | ||||||
| +++ b/hw/xwayland/xwayland.h
 | +++ b/hw/xwayland/xwayland.h
 | ||||||
| @@ -184,7 +184,6 @@ struct xwl_window {
 | @@ -184,7 +184,6 @@ struct xwl_window {
 | ||||||
| @ -117,5 +117,5 @@ index 126af8823..01aef27d2 100644 | |||||||
|      struct wl_shell_surface *shell_surface; |      struct wl_shell_surface *shell_surface; | ||||||
|      WindowPtr window; |      WindowPtr window; | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| From 63b0c0d76d1020f0cac331f3eff30fba07f79965 Mon Sep 17 00:00:00 2001 | From 09eb525863ab6c08fd743a637f7da9d10c0c01eb Mon Sep 17 00:00:00 2001 | ||||||
| From: Hans de Goede <hdegoede@redhat.com> | From: Hans de Goede <hdegoede@redhat.com> | ||||||
| Date: Wed, 15 Jan 2020 14:36:45 +0100 | Date: Wed, 15 Jan 2020 14:36:45 +0100 | ||||||
| Subject: [PATCH xserver 19/24] xwayland: Also check | Subject: [PATCH xserver 19/24] xwayland: Also check | ||||||
| @ -28,10 +28,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  1 file changed, 1 insertion(+), 1 deletion(-) |  1 file changed, 1 insertion(+), 1 deletion(-) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | ||||||
| index 14227a327..298ef3ac8 100644
 | index 898a291fd..b40502dad 100644
 | ||||||
| --- a/hw/xwayland/xwayland.c
 | --- a/hw/xwayland/xwayland.c
 | ||||||
| +++ b/hw/xwayland/xwayland.c
 | +++ b/hw/xwayland/xwayland.c
 | ||||||
| @@ -1004,7 +1004,7 @@ xwl_resize_window(WindowPtr window,
 | @@ -1006,7 +1006,7 @@ xwl_resize_window(WindowPtr window,
 | ||||||
|      xwl_screen->ResizeWindow = screen->ResizeWindow; |      xwl_screen->ResizeWindow = screen->ResizeWindow; | ||||||
|      screen->ResizeWindow = xwl_resize_window; |      screen->ResizeWindow = xwl_resize_window; | ||||||
|   |   | ||||||
| @ -41,5 +41,5 @@ index 14227a327..298ef3ac8 100644 | |||||||
|  } |  } | ||||||
|   |   | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| From 309e6e549adc5a164541d16822745c022cd8574b Mon Sep 17 00:00:00 2001 | From 9f2ebb5f07dc3fff8e061b21fa175d3d958d0ee4 Mon Sep 17 00:00:00 2001 | ||||||
| From: Hans de Goede <hdegoede@redhat.com> | From: Hans de Goede <hdegoede@redhat.com> | ||||||
| Date: Thu, 9 Jan 2020 11:00:36 +0100 | Date: Thu, 9 Jan 2020 11:00:36 +0100 | ||||||
| Subject: [PATCH xserver 20/24] xwayland: Also hook screen's MoveWindow method | Subject: [PATCH xserver 20/24] xwayland: Also hook screen's MoveWindow method | ||||||
| @ -24,10 +24,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  2 files changed, 26 insertions(+) |  2 files changed, 26 insertions(+) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | ||||||
| index 298ef3ac8..1294ff1d8 100644
 | index b40502dad..7111e20ae 100644
 | ||||||
| --- a/hw/xwayland/xwayland.c
 | --- a/hw/xwayland/xwayland.c
 | ||||||
| +++ b/hw/xwayland/xwayland.c
 | +++ b/hw/xwayland/xwayland.c
 | ||||||
| @@ -1008,6 +1008,28 @@ xwl_resize_window(WindowPtr window,
 | @@ -1010,6 +1010,28 @@ xwl_resize_window(WindowPtr window,
 | ||||||
|          xwl_window_check_resolution_change_emulation(xwl_window); |          xwl_window_check_resolution_change_emulation(xwl_window); | ||||||
|  } |  } | ||||||
|   |   | ||||||
| @ -56,7 +56,7 @@ index 298ef3ac8..1294ff1d8 100644 | |||||||
|  static void |  static void | ||||||
|  frame_callback(void *data, |  frame_callback(void *data, | ||||||
|                 struct wl_callback *callback, |                 struct wl_callback *callback, | ||||||
| @@ -1564,6 +1586,9 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv)
 | @@ -1588,6 +1610,9 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv)
 | ||||||
|      xwl_screen->ResizeWindow = pScreen->ResizeWindow; |      xwl_screen->ResizeWindow = pScreen->ResizeWindow; | ||||||
|      pScreen->ResizeWindow = xwl_resize_window; |      pScreen->ResizeWindow = xwl_resize_window; | ||||||
|   |   | ||||||
| @ -67,7 +67,7 @@ index 298ef3ac8..1294ff1d8 100644 | |||||||
|          xwl_screen->SetWindowPixmap = pScreen->SetWindowPixmap; |          xwl_screen->SetWindowPixmap = pScreen->SetWindowPixmap; | ||||||
|          pScreen->SetWindowPixmap = xwl_set_window_pixmap; |          pScreen->SetWindowPixmap = xwl_set_window_pixmap; | ||||||
| diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | ||||||
| index 01aef27d2..72225374b 100644
 | index 0d0baac9b..451c08e23 100644
 | ||||||
| --- a/hw/xwayland/xwayland.h
 | --- a/hw/xwayland/xwayland.h
 | ||||||
| +++ b/hw/xwayland/xwayland.h
 | +++ b/hw/xwayland/xwayland.h
 | ||||||
| @@ -138,6 +138,7 @@ struct xwl_screen {
 | @@ -138,6 +138,7 @@ struct xwl_screen {
 | ||||||
| @ -79,5 +79,5 @@ index 01aef27d2..72225374b 100644 | |||||||
|      struct xorg_list output_list; |      struct xorg_list output_list; | ||||||
|      struct xorg_list seat_list; |      struct xorg_list seat_list; | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| From 52bbef1f55d17229684b0d76a478ec639c4032ed Mon Sep 17 00:00:00 2001 | From 958b34ce3cab02219457d5dcc25217e7c9a0beba Mon Sep 17 00:00:00 2001 | ||||||
| From: Hans de Goede <hdegoede@redhat.com> | From: Hans de Goede <hdegoede@redhat.com> | ||||||
| Date: Mon, 7 Oct 2019 14:27:49 +0200 | Date: Mon, 7 Oct 2019 14:27:49 +0200 | ||||||
| Subject: [PATCH xserver 21/24] xwayland: Fix emulated modes not being removed | Subject: [PATCH xserver 21/24] xwayland: Fix emulated modes not being removed | ||||||
| @ -32,10 +32,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  1 file changed, 6 insertions(+), 2 deletions(-) |  1 file changed, 6 insertions(+), 2 deletions(-) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
 | diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
 | ||||||
| index 20c254962..7d705d919 100644
 | index 0d6b9ac9f..4bc9cd6b8 100644
 | ||||||
| --- a/hw/xwayland/xwayland-output.c
 | --- a/hw/xwayland/xwayland-output.c
 | ||||||
| +++ b/hw/xwayland/xwayland-output.c
 | +++ b/hw/xwayland/xwayland-output.c
 | ||||||
| @@ -309,8 +309,11 @@ xwl_output_remove_emulated_mode_for_client(struct xwl_output *xwl_output,
 | @@ -272,8 +272,11 @@ xwl_output_remove_emulated_mode_for_client(struct xwl_output *xwl_output,
 | ||||||
|      struct xwl_emulated_mode *emulated_mode; |      struct xwl_emulated_mode *emulated_mode; | ||||||
|   |   | ||||||
|      emulated_mode = xwl_output_get_emulated_mode_for_client(xwl_output, client); |      emulated_mode = xwl_output_get_emulated_mode_for_client(xwl_output, client); | ||||||
| @ -48,7 +48,7 @@ index 20c254962..7d705d919 100644 | |||||||
|  } |  } | ||||||
|   |   | ||||||
|  /* From hw/xfree86/common/xf86DefModeSet.c with some obscure modes dropped */ |  /* From hw/xfree86/common/xf86DefModeSet.c with some obscure modes dropped */ | ||||||
| @@ -511,7 +514,8 @@ xwl_output_set_emulated_mode(struct xwl_output *xwl_output, ClientPtr client,
 | @@ -474,7 +477,8 @@ xwl_output_set_emulated_mode(struct xwl_output *xwl_output, ClientPtr client,
 | ||||||
|             from_vidmode ? "vidmode" : "randr", |             from_vidmode ? "vidmode" : "randr", | ||||||
|             mode->mode.width, mode->mode.height); |             mode->mode.width, mode->mode.height); | ||||||
|   |   | ||||||
| @ -59,5 +59,5 @@ index 20c254962..7d705d919 100644 | |||||||
|      else |      else | ||||||
|          xwl_output_add_emulated_mode_for_client(xwl_output, client, mode, from_vidmode); |          xwl_output_add_emulated_mode_for_client(xwl_output, client, mode, from_vidmode); | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| From 57d0ad44fd0b04fff98e9b484816dc95068a90cc Mon Sep 17 00:00:00 2001 | From 12a9c05a3088480bc7ab80902e384053f10e51a6 Mon Sep 17 00:00:00 2001 | ||||||
| From: Hans de Goede <hdegoede@redhat.com> | From: Hans de Goede <hdegoede@redhat.com> | ||||||
| Date: Mon, 4 Nov 2019 11:46:49 +0100 | Date: Mon, 4 Nov 2019 11:46:49 +0100 | ||||||
| Subject: [PATCH xserver 22/24] xwayland: Call | Subject: [PATCH xserver 22/24] xwayland: Call | ||||||
| @ -28,10 +28,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  1 file changed, 5 insertions(+) |  1 file changed, 5 insertions(+) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | ||||||
| index 1294ff1d8..6b86e56bd 100644
 | index 7111e20ae..734e76b2e 100644
 | ||||||
| --- a/hw/xwayland/xwayland.c
 | --- a/hw/xwayland/xwayland.c
 | ||||||
| +++ b/hw/xwayland/xwayland.c
 | +++ b/hw/xwayland/xwayland.c
 | ||||||
| @@ -819,6 +819,11 @@ ensure_surface_for_window(WindowPtr window)
 | @@ -821,6 +821,11 @@ ensure_surface_for_window(WindowPtr window)
 | ||||||
|   |   | ||||||
|      xwl_window_init_allow_commits(xwl_window); |      xwl_window_init_allow_commits(xwl_window); | ||||||
|   |   | ||||||
| @ -44,5 +44,5 @@ index 1294ff1d8..6b86e56bd 100644 | |||||||
|   |   | ||||||
|  err_surf: |  err_surf: | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| From 87a1a7b9f8f7d848302057b9ca54f6729e82bbe7 Mon Sep 17 00:00:00 2001 | From 94fc11313b34e3b35aa275dad1c3bc2455a24ec3 Mon Sep 17 00:00:00 2001 | ||||||
| From: Hans de Goede <hdegoede@redhat.com> | From: Hans de Goede <hdegoede@redhat.com> | ||||||
| Date: Mon, 4 Nov 2019 14:32:29 +0100 | Date: Mon, 4 Nov 2019 14:32:29 +0100 | ||||||
| Subject: [PATCH xserver 23/24] xwayland: Fix setting of | Subject: [PATCH xserver 23/24] xwayland: Fix setting of | ||||||
| @ -35,10 +35,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  1 file changed, 9 insertions(+), 3 deletions(-) |  1 file changed, 9 insertions(+), 3 deletions(-) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c
 | ||||||
| index 6b86e56bd..e721d6cb5 100644
 | index 734e76b2e..a7c4f82df 100644
 | ||||||
| --- a/hw/xwayland/xwayland.c
 | --- a/hw/xwayland/xwayland.c
 | ||||||
| +++ b/hw/xwayland/xwayland.c
 | +++ b/hw/xwayland/xwayland.c
 | ||||||
| @@ -749,6 +749,7 @@ ensure_surface_for_window(WindowPtr window)
 | @@ -751,6 +751,7 @@ ensure_surface_for_window(WindowPtr window)
 | ||||||
|      struct xwl_screen *xwl_screen; |      struct xwl_screen *xwl_screen; | ||||||
|      struct xwl_window *xwl_window; |      struct xwl_window *xwl_window; | ||||||
|      struct wl_region *region; |      struct wl_region *region; | ||||||
| @ -46,7 +46,7 @@ index 6b86e56bd..e721d6cb5 100644 | |||||||
|   |   | ||||||
|      if (xwl_window_get(window)) |      if (xwl_window_get(window)) | ||||||
|          return TRUE; |          return TRUE; | ||||||
| @@ -819,7 +820,14 @@ ensure_surface_for_window(WindowPtr window)
 | @@ -821,7 +822,14 @@ ensure_surface_for_window(WindowPtr window)
 | ||||||
|   |   | ||||||
|      xwl_window_init_allow_commits(xwl_window); |      xwl_window_init_allow_commits(xwl_window); | ||||||
|   |   | ||||||
| @ -62,7 +62,7 @@ index 6b86e56bd..e721d6cb5 100644 | |||||||
|          /* CSD or O-R toplevel window, check viewport on creation */ |          /* CSD or O-R toplevel window, check viewport on creation */ | ||||||
|          xwl_window_check_resolution_change_emulation(xwl_window); |          xwl_window_check_resolution_change_emulation(xwl_window); | ||||||
|      } |      } | ||||||
| @@ -868,8 +876,6 @@ xwl_realize_window(WindowPtr window)
 | @@ -870,8 +878,6 @@ xwl_realize_window(WindowPtr window)
 | ||||||
|              return FALSE; |              return FALSE; | ||||||
|      } |      } | ||||||
|   |   | ||||||
| @ -72,5 +72,5 @@ index 6b86e56bd..e721d6cb5 100644 | |||||||
|  } |  } | ||||||
|   |   | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| From 231d5e2da2e1b0aee3cfe6febc54daf7a0e4b4c7 Mon Sep 17 00:00:00 2001 | From 2d078b3372e26278e687399a39699c495bfe16d4 Mon Sep 17 00:00:00 2001 | ||||||
| From: Hans de Goede <hdegoede@redhat.com> | From: Hans de Goede <hdegoede@redhat.com> | ||||||
| Date: Mon, 4 Nov 2019 15:01:18 +0100 | Date: Mon, 4 Nov 2019 15:01:18 +0100 | ||||||
| Subject: [PATCH xserver 24/24] xwayland: Remove unnecessary | Subject: [PATCH xserver 24/24] xwayland: Remove unnecessary | ||||||
| @ -21,10 +21,10 @@ Signed-off-by: Hans de Goede <hdegoede@redhat.com> | |||||||
|  1 file changed, 2 insertions(+), 4 deletions(-) |  1 file changed, 2 insertions(+), 4 deletions(-) | ||||||
| 
 | 
 | ||||||
| diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
 | diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
 | ||||||
| index 7d705d919..084b669e4 100644
 | index 4bc9cd6b8..9d3372c8e 100644
 | ||||||
| --- a/hw/xwayland/xwayland-output.c
 | --- a/hw/xwayland/xwayland-output.c
 | ||||||
| +++ b/hw/xwayland/xwayland-output.c
 | +++ b/hw/xwayland/xwayland-output.c
 | ||||||
| @@ -468,9 +468,6 @@ static void
 | @@ -431,9 +431,6 @@ static void
 | ||||||
|  xwl_output_set_randr_emu_prop(WindowPtr window, |  xwl_output_set_randr_emu_prop(WindowPtr window, | ||||||
|                                struct xwl_output_randr_emu_prop *prop) |                                struct xwl_output_randr_emu_prop *prop) | ||||||
|  { |  { | ||||||
| @ -34,7 +34,7 @@ index 7d705d919..084b669e4 100644 | |||||||
|      if (prop->rect_count) { |      if (prop->rect_count) { | ||||||
|          dixChangeWindowProperty(serverClient, window, prop->atom, |          dixChangeWindowProperty(serverClient, window, prop->atom, | ||||||
|                                  XA_CARDINAL, 32, PropModeReplace, |                                  XA_CARDINAL, 32, PropModeReplace, | ||||||
| @@ -483,7 +480,8 @@ xwl_output_set_randr_emu_prop(WindowPtr window,
 | @@ -446,7 +443,8 @@ xwl_output_set_randr_emu_prop(WindowPtr window,
 | ||||||
|  static void |  static void | ||||||
|  xwl_output_set_randr_emu_prop_callback(void *resource, XID id, void *user_data) |  xwl_output_set_randr_emu_prop_callback(void *resource, XID id, void *user_data) | ||||||
|  { |  { | ||||||
| @ -45,5 +45,5 @@ index 7d705d919..084b669e4 100644 | |||||||
|   |   | ||||||
|  static void |  static void | ||||||
| -- 
 | -- 
 | ||||||
| 2.25.2 | 2.26.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								sources
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								sources
									
									
									
									
									
								
							| @ -1 +1 @@ | |||||||
| SHA512 (xorg-server-1.20.8.tar.bz2) = ab0ec0fcbf490c61558b9297f61b58fd2dedb676c78bef6431dc9166054743b43a0091b88a8b3f4e81d1f539909440ee7e188a298cefabe13ea89159639cd805 | SHA512 (xorg-server-1.20.9.tar.bz2) = d9b5f93e1b9763a89187d8b272aa7d4ce9709641b8539f4536708af153310e5a4931bffd4229c51a3b0e3b12da7838750aa71b635751fb4c0bb27438cce4e5e6 | ||||||
|  | |||||||
| @ -45,8 +45,8 @@ | |||||||
| 
 | 
 | ||||||
| Summary:   X.Org X11 X server | Summary:   X.Org X11 X server | ||||||
| Name:      xorg-x11-server | Name:      xorg-x11-server | ||||||
| Version:   1.20.8 | Version:   1.20.9 | ||||||
| Release:   4%{?gitdate:.%{gitdate}}%{?dist} | Release:   1%{?gitdate:.%{gitdate}}%{?dist} | ||||||
| URL:       http://www.x.org | URL:       http://www.x.org | ||||||
| License:   MIT | License:   MIT | ||||||
| 
 | 
 | ||||||
| @ -93,9 +93,24 @@ Patch5: 0001-autobind-GPUs-to-the-screen.patch | |||||||
| Patch6: 0001-Fedora-hack-Make-the-suid-root-wrapper-always-start-.patch | Patch6: 0001-Fedora-hack-Make-the-suid-root-wrapper-always-start-.patch | ||||||
| 
 | 
 | ||||||
| # Backports from current stable "server-1.20-branch": | # Backports from current stable "server-1.20-branch": | ||||||
|  | Patch101: 0001-Revert-linux-Fix-platform-device-probe-for-DT-based-.patch | ||||||
|  | Patch102: 0002-Revert-linux-Fix-platform-device-PCI-detection-for-c.patch | ||||||
|  | Patch103: 0003-Revert-linux-Make-platform-device-probe-less-fragile.patch | ||||||
|  | Patch104: 0004-include-Increase-the-number-of-max.-input-devices-to.patch | ||||||
|  | Patch105: 0005-glamor-Fix-glamor_poly_fill_rect_gl-xRectangle-width.patch | ||||||
|  | Patch106: 0006-xfree86-Take-second-reference-for-SavedCursor-in-xf8.patch | ||||||
|  | Patch107: 0007-present-wnmd-Can-t-use-page-flipping-for-windows-cli.patch | ||||||
|  | Patch108: 0008-xwayland-Check-window-pixmap-in-xwl_present_check_fl.patch | ||||||
|  | Patch109: 0009-present-wnmd-Remove-dead-check-from-present_wnmd_che.patch | ||||||
|  | Patch110: 0010-xwayland-Do-not-discard-frame-callbacks-on-allow-com.patch | ||||||
|  | Patch111: 0011-xwayland-use-drmGetNodeTypeFromFd-for-checking-if-a-.patch | ||||||
|  | Patch112: 0012-xwayland-Remove-pending-stream-reference-when-freein.patch | ||||||
|  | Patch113: 0013-present-Move-flip-target_msc-adjustment-out-of-prese.patch | ||||||
|  | Patch114: 0014-present-Add-present_vblank-exec_msc-field.patch | ||||||
|  | Patch115: 0015-present-wnmd-Move-up-present_wnmd_queue_vblank.patch | ||||||
|  | Patch116: 0016-present-wnmd-Execute-copies-at-target_msc-1-already.patch | ||||||
| 
 | 
 | ||||||
| # Backports from "master" upstream: | # Backports from "master" upstream: | ||||||
| Patch100: 0001-fix-for-ZDI-11426.patch |  | ||||||
| 
 | 
 | ||||||
| # Backported Xwayland randr resolution change emulation support | # Backported Xwayland randr resolution change emulation support | ||||||
| Patch501: 0001-dix-Add-GetCurrentClient-helper.patch | Patch501: 0001-dix-Add-GetCurrentClient-helper.patch | ||||||
| @ -548,6 +563,9 @@ find %{inst_srcdir}/hw/xfree86 -name \*.c -delete | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Thu Oct  8 2020 Olivier Fourdan <ofourdan@redhat.com> - 1.20.9-1 | ||||||
|  | - xserver 1.20.9 + all current fixes from upstream | ||||||
|  | 
 | ||||||
| * Wed Aug 12 2020 Adam Jackson <ajax@redhat.com> - 1.20.8-4 | * Wed Aug 12 2020 Adam Jackson <ajax@redhat.com> - 1.20.8-4 | ||||||
| - Enable XC-SECURITY | - Enable XC-SECURITY | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user