import xorg-x11-server-1.20.10-1.el8
This commit is contained in:
		
							parent
							
								
									ae3737d8b2
								
							
						
					
					
						commit
						59a9a3bb14
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1 +1 @@ | ||||
| SOURCES/xorg-server-1.20.8.tar.bz2 | ||||
| SOURCES/xorg-server-1.20.10.tar.bz2 | ||||
|  | ||||
| @ -1 +1 @@ | ||||
| 077d081f912faf11c87ea1c9d0e29490961b0cd4 SOURCES/xorg-server-1.20.8.tar.bz2 | ||||
| e698b30adb781dfe0e7bee0aa489ea9df404a5db SOURCES/xorg-server-1.20.10.tar.bz2 | ||||
|  | ||||
| @ -1,56 +0,0 @@ | ||||
| From 85d9f7932353b6e0986796dbb09b7f778f9cc9aa Mon Sep 17 00:00:00 2001 | ||||
| From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com> | ||||
| Date: Fri, 24 Jul 2020 18:21:05 +0200 | ||||
| Subject: [PATCH xserver] glamor: Fix glamor_poly_fill_rect_gl | ||||
|  xRectangle::width/height handling | ||||
| MIME-Version: 1.0 | ||||
| Content-Type: text/plain; charset=UTF-8 | ||||
| Content-Transfer-Encoding: 8bit | ||||
| 
 | ||||
| (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. | ||||
| 
 | ||||
| Solve this by passing through the values as integers, and masking off | ||||
| the upper 16 bits in the vertex shader (which could be 1 due to sign | ||||
| extension). | ||||
| 
 | ||||
| Signed-off-by: Michel Dänzer <mdaenzer@redhat.com> | ||||
| ---
 | ||||
|  glamor/glamor_rects.c | 11 ++++++----- | ||||
|  1 file changed, 6 insertions(+), 5 deletions(-) | ||||
| 
 | ||||
| diff --git a/glamor/glamor_rects.c b/glamor/glamor_rects.c
 | ||||
| index 6cbb040c1..5cac40d49 100644
 | ||||
| --- a/glamor/glamor_rects.c
 | ||||
| +++ b/glamor/glamor_rects.c
 | ||||
| @@ -27,9 +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"
 | ||||
| -                GLAMOR_POS(gl_Position, (primitive.xy + pos))),
 | ||||
| +    .vs_vars = "attribute ivec4 primitive;\n",
 | ||||
| +    .vs_exec = ("       vec2 pos = vec2(primitive.zw & ivec2(0xffff));\n"
 | ||||
| +                "       pos *= vec2(gl_VertexID&1, (gl_VertexID&2)>>1);\n"
 | ||||
| +                GLAMOR_POS(gl_Position, (vec2(primitive.xy) + pos))),
 | ||||
|  }; | ||||
|   | ||||
|  static const glamor_facet glamor_facet_polyfillrect_120 = { | ||||
| @@ -81,8 +82,8 @@ 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,
 | ||||
| -                              4 * sizeof (short), vbo_offset);
 | ||||
| +        glVertexAttribIPointer(GLAMOR_VERTEX_POS, 4, GL_SHORT,
 | ||||
| +                               4 * sizeof (short), vbo_offset);
 | ||||
|   | ||||
|          memcpy(v, prect, nrect * sizeof (xRectangle)); | ||||
|   | ||||
| -- 
 | ||||
| 2.26.2 | ||||
| 
 | ||||
| @ -1,122 +0,0 @@ | ||||
| From 41f85557a939d8037dc5e509e39316bf624fd186 Mon Sep 17 00:00:00 2001 | ||||
| From: Martin Peres <martin.peres@linux.intel.com> | ||||
| Date: Fri, 24 Apr 2020 18:06:16 +0300 | ||||
| Subject: [PATCH xserver 1/2] modesetting: check the kms state on EnterVT | ||||
| MIME-Version: 1.0 | ||||
| Content-Type: text/plain; charset=UTF-8 | ||||
| Content-Transfer-Encoding: 8bit | ||||
| 
 | ||||
| Normally, we would receive a uevent coming from Linux's DRM subsystem, | ||||
| which would trigger the check for disappearing/appearing resources. | ||||
| However, this event is not received when X is not master (another VT | ||||
| is selected), and so the userspace / desktop environment would not be | ||||
| notified about the changes that happened while X wasn't master. | ||||
| 
 | ||||
| To fix the issue, this patch forces a refresh on EnterVT by splitting | ||||
| the kms-checking code from the uevent handling into its own (exported) | ||||
| function called drmmode_update_kms_state. This function is then called | ||||
| from both the uevent-handling function, and on EnterVT right before | ||||
| restoring the modes. | ||||
| 
 | ||||
| Signed-off-by: Martin Peres <martin.peres@linux.intel.com> | ||||
| Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> | ||||
| Acked-by: Kishore Kadiyala <kishore.kadiyala@intel.com> | ||||
| Tested-by: Kishore Kadiyala <kishore.kadiyala@intel.com> | ||||
| Signed-off-by: Michel Dänzer <mdaenzer@redhat.com> | ||||
| ---
 | ||||
|  hw/xfree86/drivers/modesetting/driver.c       |  2 ++ | ||||
|  .../drivers/modesetting/drmmode_display.c     | 34 ++++++++++++------- | ||||
|  .../drivers/modesetting/drmmode_display.h     |  1 + | ||||
|  3 files changed, 24 insertions(+), 13 deletions(-) | ||||
| 
 | ||||
| diff --git a/hw/xfree86/drivers/modesetting/driver.c b/hw/xfree86/drivers/modesetting/driver.c
 | ||||
| index 2aaea5f7d..a4d486a67 100644
 | ||||
| --- a/hw/xfree86/drivers/modesetting/driver.c
 | ||||
| +++ b/hw/xfree86/drivers/modesetting/driver.c
 | ||||
| @@ -1820,6 +1820,8 @@ EnterVT(ScrnInfoPtr pScrn)
 | ||||
|   | ||||
|      SetMaster(pScrn); | ||||
|   | ||||
| +    drmmode_update_kms_state(&ms->drmmode);
 | ||||
| +
 | ||||
|      if (!drmmode_set_desired_modes(pScrn, &ms->drmmode, TRUE)) | ||||
|          return FALSE; | ||||
|   | ||||
| diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c
 | ||||
| index 9dd8c5573..646bacecb 100644
 | ||||
| --- a/hw/xfree86/drivers/modesetting/drmmode_display.c
 | ||||
| +++ b/hw/xfree86/drivers/modesetting/drmmode_display.c
 | ||||
| @@ -3607,30 +3607,19 @@ drmmode_setup_colormap(ScreenPtr pScreen, ScrnInfoPtr pScrn)
 | ||||
|      return TRUE; | ||||
|  } | ||||
|   | ||||
| -#ifdef CONFIG_UDEV_KMS
 | ||||
| -
 | ||||
|  #define DRM_MODE_LINK_STATUS_GOOD       0 | ||||
|  #define DRM_MODE_LINK_STATUS_BAD        1 | ||||
|   | ||||
| -static void
 | ||||
| -drmmode_handle_uevents(int fd, void *closure)
 | ||||
| +void
 | ||||
| +drmmode_update_kms_state(drmmode_ptr drmmode)
 | ||||
|  { | ||||
| -    drmmode_ptr drmmode = closure;
 | ||||
|      ScrnInfoPtr scrn = drmmode->scrn; | ||||
| -    struct udev_device *dev;
 | ||||
|      drmModeResPtr mode_res; | ||||
|      xf86CrtcConfigPtr  config = XF86_CRTC_CONFIG_PTR(scrn); | ||||
|      int i, j; | ||||
|      Bool found = FALSE; | ||||
|      Bool changed = FALSE; | ||||
|   | ||||
| -    while ((dev = udev_monitor_receive_device(drmmode->uevent_monitor))) {
 | ||||
| -        udev_device_unref(dev);
 | ||||
| -        found = TRUE;
 | ||||
| -    }
 | ||||
| -    if (!found)
 | ||||
| -        return;
 | ||||
| -
 | ||||
|      /* Try to re-set the mode on all the connectors with a BAD link-state: | ||||
|       * This may happen if a link degrades and a new modeset is necessary, using | ||||
|       * different link-training parameters. If the kernel found that the current | ||||
| @@ -3745,6 +3734,25 @@ out:
 | ||||
|  #undef DRM_MODE_LINK_STATUS_BAD | ||||
|  #undef DRM_MODE_LINK_STATUS_GOOD | ||||
|   | ||||
| +#ifdef CONFIG_UDEV_KMS
 | ||||
| +
 | ||||
| +static void
 | ||||
| +drmmode_handle_uevents(int fd, void *closure)
 | ||||
| +{
 | ||||
| +    drmmode_ptr drmmode = closure;
 | ||||
| +    struct udev_device *dev;
 | ||||
| +    Bool found = FALSE;
 | ||||
| +
 | ||||
| +    while ((dev = udev_monitor_receive_device(drmmode->uevent_monitor))) {
 | ||||
| +        udev_device_unref(dev);
 | ||||
| +        found = TRUE;
 | ||||
| +    }
 | ||||
| +    if (!found)
 | ||||
| +        return;
 | ||||
| +
 | ||||
| +    drmmode_update_kms_state(drmmode);
 | ||||
| +}
 | ||||
| +
 | ||||
|  #endif | ||||
|   | ||||
|  void | ||||
| diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.h b/hw/xfree86/drivers/modesetting/drmmode_display.h
 | ||||
| index 4142607fb..6ef8ab9e4 100644
 | ||||
| --- a/hw/xfree86/drivers/modesetting/drmmode_display.h
 | ||||
| +++ b/hw/xfree86/drivers/modesetting/drmmode_display.h
 | ||||
| @@ -281,6 +281,7 @@ void drmmode_adjust_frame(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int x, int y);
 | ||||
|  extern Bool drmmode_set_desired_modes(ScrnInfoPtr pScrn, drmmode_ptr drmmode, Bool set_hw); | ||||
|  extern Bool drmmode_setup_colormap(ScreenPtr pScreen, ScrnInfoPtr pScrn); | ||||
|   | ||||
| +extern void drmmode_update_kms_state(drmmode_ptr drmmode);
 | ||||
|  extern void drmmode_uevent_init(ScrnInfoPtr scrn, drmmode_ptr drmmode); | ||||
|  extern void drmmode_uevent_fini(ScrnInfoPtr scrn, drmmode_ptr drmmode); | ||||
|   | ||||
| -- 
 | ||||
| 2.28.0 | ||||
| 
 | ||||
| @ -1,37 +0,0 @@ | ||||
| From f32c851a0ba41f5d8d0f8c869bc394858de721df Mon Sep 17 00:00:00 2001 | ||||
| From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com> | ||||
| Date: Thu, 25 Jun 2020 18:09:27 +0200 | ||||
| Subject: [PATCH xserver 1/4] present/wnmd: Keep pixmap pointer in | ||||
|  present_wnmd_clear_window_flip | ||||
| MIME-Version: 1.0 | ||||
| Content-Type: text/plain; charset=UTF-8 | ||||
| Content-Transfer-Encoding: 8bit | ||||
| 
 | ||||
| The comment was incorrect: Any reference held by the window (see | ||||
| present_wnmd_execute) is in addition to the one in struct present_vblank | ||||
| (see present_vblank_create). So if we don't drop the latter, the pixmap | ||||
| will be leaked. | ||||
| 
 | ||||
| Reviewed-by: Dave Airlie <airlied@redhat.com> | ||||
| (cherry picked from commit bc9dd1c71c3722284ffaa7183f4119151b25a44f) | ||||
| Signed-off-by: Michel Dänzer <mdaenzer@redhat.com> | ||||
| ---
 | ||||
|  present/present_screen.c | 2 -- | ||||
|  1 file changed, 2 deletions(-) | ||||
| 
 | ||||
| diff --git a/present/present_screen.c b/present/present_screen.c
 | ||||
| index c7e37c5fd..c435f55f4 100644
 | ||||
| --- a/present/present_screen.c
 | ||||
| +++ b/present/present_screen.c
 | ||||
| @@ -122,8 +122,6 @@ present_wnmd_clear_window_flip(WindowPtr window)
 | ||||
|   | ||||
|      xorg_list_for_each_entry_safe(vblank, tmp, &window_priv->idle_queue, event_queue) { | ||||
|          present_pixmap_idle(vblank->pixmap, vblank->window, vblank->serial, vblank->idle_fence); | ||||
| -        /* The pixmap will be destroyed by freeing the window resources. */
 | ||||
| -        vblank->pixmap = NULL;
 | ||||
|          present_vblank_destroy(vblank); | ||||
|      } | ||||
|   | ||||
| -- 
 | ||||
| 2.26.2 | ||||
| 
 | ||||
| @ -1,173 +0,0 @@ | ||||
| From 139868f3e82a3e7b7b17f3a5a2e07c4b04d81728 Mon Sep 17 00:00:00 2001 | ||||
| From: Aaron Ma <aaron.ma@canonical.com> | ||||
| Date: Thu, 30 Jul 2020 11:02:39 +0200 | ||||
| Subject: [PATCH xserver] xfree86: add drm modes on non-GTF panels | ||||
| MIME-Version: 1.0 | ||||
| Content-Type: text/plain; charset=UTF-8 | ||||
| Content-Transfer-Encoding: 8bit | ||||
| 
 | ||||
| EDID1.4 replaced GTF Bit with Continuous or Non-Continuous Frequency Display. | ||||
| 
 | ||||
| Check the "Display Range Limits Descriptor" for GTF support. | ||||
| If panel doesn't support GTF, then add gtf modes. | ||||
| 
 | ||||
| Otherwise X will only show the modes in "Detailed Timing Descriptor". | ||||
| 
 | ||||
| V2: Coding style changes. | ||||
| V3: Coding style changes, remove unused variate. | ||||
| V4: remove unused variate. | ||||
| 
 | ||||
| BugLink: https://gitlab.freedesktop.org/drm/intel/issues/313 | ||||
| Signed-off-by: Aaron Ma <aaron.ma@canonical.com> | ||||
| Reviewed-by: Adam Jackson <ajax@redhat.com> | ||||
| (cherry picked from commit 6a79a737e2c0bc730ee693b4ea4a1530c108be4e) | ||||
| Signed-off-by: Michel Dänzer <mdaenzer@redhat.com> | ||||
| ---
 | ||||
|  hw/xfree86/ddc/edid.h                         | 17 +++++++++++- | ||||
|  hw/xfree86/ddc/interpret_edid.c               | 27 +++++++++++++++++++ | ||||
|  hw/xfree86/ddc/xf86DDC.h                      |  3 +++ | ||||
|  .../drivers/modesetting/drmmode_display.c     |  2 +- | ||||
|  hw/xfree86/modes/xf86Crtc.c                   |  3 +-- | ||||
|  5 files changed, 48 insertions(+), 4 deletions(-) | ||||
| 
 | ||||
| diff --git a/hw/xfree86/ddc/edid.h b/hw/xfree86/ddc/edid.h
 | ||||
| index 750e4270b..b884d8212 100644
 | ||||
| --- a/hw/xfree86/ddc/edid.h
 | ||||
| +++ b/hw/xfree86/ddc/edid.h
 | ||||
| @@ -262,6 +262,10 @@
 | ||||
|  #define MAX_H (_MAX_H(c) + _MAX_H_OFFSET(c)) | ||||
|  #define _MAX_CLOCK(x) x[9] | ||||
|  #define MAX_CLOCK _MAX_CLOCK(c) | ||||
| +#define _DEFAULT_GTF(x) (x[10] == 0x00)
 | ||||
| +#define DEFAULT_GTF _DEFAULT_GTF(c)
 | ||||
| +#define _RANGE_LIMITS_ONLY(x) (x[10] == 0x01)
 | ||||
| +#define RANGE_LIMITS_ONLY _RANGE_LIMITS_ONLY(c)
 | ||||
|  #define _HAVE_2ND_GTF(x) (x[10] == 0x02) | ||||
|  #define HAVE_2ND_GTF _HAVE_2ND_GTF(c) | ||||
|  #define _F_2ND_GTF(x) (x[12] * 2) | ||||
| @@ -477,6 +481,16 @@ struct detailed_timings {
 | ||||
|  #define DS_VENDOR 0x101 | ||||
|  #define DS_VENDOR_MAX 0x110 | ||||
|   | ||||
| +/*
 | ||||
| + * Display range limit Descriptor of EDID version1, reversion 4
 | ||||
| + */
 | ||||
| +typedef enum {
 | ||||
| +	DR_DEFAULT_GTF,
 | ||||
| +	DR_LIMITS_ONLY,
 | ||||
| +	DR_SECONDARY_GTF,
 | ||||
| +	DR_CVT_SUPPORTED = 4,
 | ||||
| +} DR_timing_flags;
 | ||||
| +
 | ||||
|  struct monitor_ranges { | ||||
|      int min_v; | ||||
|      int max_v; | ||||
| @@ -495,6 +509,7 @@ struct monitor_ranges {
 | ||||
|      char supported_blanking; | ||||
|      char supported_scaling; | ||||
|      int preferred_refresh;      /* in hz */ | ||||
| +    DR_timing_flags display_range_timing_flags;
 | ||||
|  }; | ||||
|   | ||||
|  struct whitePoints { | ||||
| @@ -524,7 +539,7 @@ struct detailed_monitor_section {
 | ||||
|          Uchar serial[13]; | ||||
|          Uchar ascii_data[13]; | ||||
|          Uchar name[13]; | ||||
| -        struct monitor_ranges ranges;   /* 56 */
 | ||||
| +        struct monitor_ranges ranges;   /* 60 */
 | ||||
|          struct std_timings std_t[5];    /* 80 */ | ||||
|          struct whitePoints wp[2];       /* 32 */ | ||||
|          /* color management data */ | ||||
| diff --git a/hw/xfree86/ddc/interpret_edid.c b/hw/xfree86/ddc/interpret_edid.c
 | ||||
| index 17a8f81c0..19630471c 100644
 | ||||
| --- a/hw/xfree86/ddc/interpret_edid.c
 | ||||
| +++ b/hw/xfree86/ddc/interpret_edid.c
 | ||||
| @@ -672,6 +672,9 @@ get_monitor_ranges(Uchar * c, struct monitor_ranges *r)
 | ||||
|      r->max_clock = 0; | ||||
|      if (MAX_CLOCK != 0xff)      /* is specified? */ | ||||
|          r->max_clock = MAX_CLOCK * 10 + 5; | ||||
| +
 | ||||
| +    r->display_range_timing_flags = c[10];
 | ||||
| +
 | ||||
|      if (HAVE_2ND_GTF) { | ||||
|          r->gtf_2nd_f = F_2ND_GTF; | ||||
|          r->gtf_2nd_c = C_2ND_GTF; | ||||
| @@ -751,6 +754,30 @@ validate_version(int scrnIndex, struct edid_version *r)
 | ||||
|      return TRUE; | ||||
|  } | ||||
|   | ||||
| +Bool
 | ||||
| +gtf_supported(xf86MonPtr mon)
 | ||||
| +{
 | ||||
| +    int i;
 | ||||
| +
 | ||||
| +    if (!mon)
 | ||||
| +        return FALSE;
 | ||||
| +
 | ||||
| +    if ((mon->ver.version == 1) && (mon->ver.revision < 4)) {
 | ||||
| +        if (mon->features.msc & 0x1)
 | ||||
| +	    return TRUE;
 | ||||
| +    } else {
 | ||||
| +        for (i = 0; i < DET_TIMINGS; i++) {
 | ||||
| +            struct detailed_monitor_section *det_timing_des = &(mon->det_mon[i]);
 | ||||
| +            if (det_timing_des && (det_timing_des->type == DS_RANGES) &&
 | ||||
| +                (det_timing_des->section.ranges.display_range_timing_flags == DR_DEFAULT_GTF
 | ||||
| +		|| det_timing_des->section.ranges.display_range_timing_flags == DR_SECONDARY_GTF))
 | ||||
| +		    return TRUE;
 | ||||
| +	}
 | ||||
| +    }
 | ||||
| +
 | ||||
| +    return FALSE;
 | ||||
| +}
 | ||||
| +
 | ||||
|  /* | ||||
|   * Returns true if HDMI, false if definitely not or unknown. | ||||
|   */ | ||||
| diff --git a/hw/xfree86/ddc/xf86DDC.h b/hw/xfree86/ddc/xf86DDC.h
 | ||||
| index 7d81ab911..6eb2f0ba2 100644
 | ||||
| --- a/hw/xfree86/ddc/xf86DDC.h
 | ||||
| +++ b/hw/xfree86/ddc/xf86DDC.h
 | ||||
| @@ -48,6 +48,9 @@ extern _X_EXPORT Bool xf86SetDDCproperties(ScrnInfoPtr pScreen, xf86MonPtr DDC);
 | ||||
|  extern _X_EXPORT Bool | ||||
|   xf86MonitorIsHDMI(xf86MonPtr mon); | ||||
|   | ||||
| +extern _X_EXPORT Bool
 | ||||
| +gtf_supported(xf86MonPtr mon);
 | ||||
| +
 | ||||
|  extern _X_EXPORT DisplayModePtr | ||||
|  FindDMTMode(int hsize, int vsize, int refresh, Bool rb); | ||||
|   | ||||
| diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c
 | ||||
| index 59abb6cc7..9dd8c5573 100644
 | ||||
| --- a/hw/xfree86/drivers/modesetting/drmmode_display.c
 | ||||
| +++ b/hw/xfree86/drivers/modesetting/drmmode_display.c
 | ||||
| @@ -2439,7 +2439,7 @@ drmmode_output_add_gtf_modes(xf86OutputPtr output, DisplayModePtr Modes)
 | ||||
|      int max_x = 0, max_y = 0; | ||||
|      float max_vrefresh = 0.0; | ||||
|   | ||||
| -    if (mon && GTF_SUPPORTED(mon->features.msc))
 | ||||
| +    if (mon && gtf_supported(mon))
 | ||||
|          return Modes; | ||||
|   | ||||
|      if (!has_panel_fitter(output)) | ||||
| diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
 | ||||
| index 37a45bb3a..17d4ef103 100644
 | ||||
| --- a/hw/xfree86/modes/xf86Crtc.c
 | ||||
| +++ b/hw/xfree86/modes/xf86Crtc.c
 | ||||
| @@ -1719,11 +1719,10 @@ xf86ProbeOutputModes(ScrnInfoPtr scrn, int maxX, int maxY)
 | ||||
|   | ||||
|          if (edid_monitor) { | ||||
|              struct det_monrec_parameter p; | ||||
| -            struct disp_features *features = &edid_monitor->features;
 | ||||
|              struct cea_data_block *hdmi_db; | ||||
|   | ||||
|              /* if display is not continuous-frequency, don't add default modes */ | ||||
| -            if (!GTF_SUPPORTED(features->msc))
 | ||||
| +            if (!gtf_supported(edid_monitor))
 | ||||
|                  add_default_modes = FALSE; | ||||
|   | ||||
|              p.mon_rec = &mon_rec; | ||||
| -- 
 | ||||
| 2.26.2 | ||||
| 
 | ||||
| @ -1,84 +0,0 @@ | ||||
| From 23c55ec32973e0a75d723e3f37769dd711c9c59c Mon Sep 17 00:00:00 2001 | ||||
| From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com> | ||||
| Date: Wed, 22 Jul 2020 18:20:14 +0200 | ||||
| Subject: [PATCH xserver] xwayland: Hold a pixmap reference in struct | ||||
|  xwl_present_event | ||||
| MIME-Version: 1.0 | ||||
| Content-Type: text/plain; charset=UTF-8 | ||||
| Content-Transfer-Encoding: 8bit | ||||
| 
 | ||||
| In the log of the commit below, I claimed this wasn't necessary on the | ||||
| 1.20 branch, but this turned out to be wrong: It meant that | ||||
| event->buffer could already be destroyed in xwl_present_free_event, | ||||
| resulting in use-after-free and likely a crash. | ||||
| 
 | ||||
| Fixes: 22c0808ac88f "xwayland: Free all remaining events in | ||||
|                      xwl_present_cleanup" | ||||
| Signed-off-by: Michel Dänzer <mdaenzer@redhat.com> | ||||
| ---
 | ||||
|  hw/xwayland/xwayland-present.c | 17 +++++++++++++---- | ||||
|  hw/xwayland/xwayland.h         |  2 +- | ||||
|  2 files changed, 14 insertions(+), 5 deletions(-) | ||||
| 
 | ||||
| diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c
 | ||||
| index 2cec63f59..f003170a9 100644
 | ||||
| --- a/hw/xwayland/xwayland-present.c
 | ||||
| +++ b/hw/xwayland/xwayland-present.c
 | ||||
| @@ -117,8 +117,16 @@ xwl_present_free_event(struct xwl_present_event *event)
 | ||||
|      if (!event) | ||||
|          return; | ||||
|   | ||||
| -    if (event->buffer)
 | ||||
| -        wl_buffer_set_user_data(event->buffer, NULL);
 | ||||
| +    if (event->pixmap) {
 | ||||
| +        if (!event->buffer_released) {
 | ||||
| +            struct wl_buffer *buffer =
 | ||||
| +                xwl_glamor_pixmap_get_wl_buffer(event->pixmap, NULL);
 | ||||
| +
 | ||||
| +            wl_buffer_set_user_data(buffer, NULL);
 | ||||
| +        }
 | ||||
| +
 | ||||
| +        dixDestroyPixmap(event->pixmap, event->pixmap->drawable.id);
 | ||||
| +    }
 | ||||
|   | ||||
|      xorg_list_del(&event->list); | ||||
|      free(event); | ||||
| @@ -348,7 +356,7 @@ xwl_present_queue_vblank(WindowPtr present_window,
 | ||||
|          return BadAlloc; | ||||
|   | ||||
|      event->event_id = event_id; | ||||
| -    event->buffer = NULL;
 | ||||
| +    event->pixmap = NULL;
 | ||||
|      event->xwl_present_window = xwl_present_window; | ||||
|      event->target_msc = msc; | ||||
|   | ||||
| @@ -453,11 +461,12 @@ xwl_present_flip(WindowPtr present_window,
 | ||||
|      if (!event) | ||||
|          return FALSE; | ||||
|   | ||||
| +    pixmap->refcnt++;
 | ||||
|      buffer = xwl_glamor_pixmap_get_wl_buffer(pixmap, &buffer_created); | ||||
|   | ||||
|      event->event_id = event_id; | ||||
|      event->xwl_present_window = xwl_present_window; | ||||
| -    event->buffer = buffer;
 | ||||
| +    event->pixmap = pixmap;
 | ||||
|      event->target_msc = target_msc; | ||||
|      event->pending = TRUE; | ||||
|      event->abort = FALSE; | ||||
| diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
 | ||||
| index bc5836ec4..b9495b313 100644
 | ||||
| --- a/hw/xwayland/xwayland.h
 | ||||
| +++ b/hw/xwayland/xwayland.h
 | ||||
| @@ -215,7 +215,7 @@ struct xwl_present_event {
 | ||||
|      Bool buffer_released; | ||||
|   | ||||
|      struct xwl_present_window *xwl_present_window; | ||||
| -    struct wl_buffer *buffer;
 | ||||
| +    PixmapPtr pixmap;
 | ||||
|   | ||||
|      struct xorg_list list; | ||||
|  }; | ||||
| -- 
 | ||||
| 2.26.2 | ||||
| 
 | ||||
| @ -1,160 +0,0 @@ | ||||
| From 287a960c316ecae5cb87c9d23dcb25810d67a0d1 Mon Sep 17 00:00:00 2001 | ||||
| From: Kishore Kadiyala <kishore.kadiyala@intel.com> | ||||
| Date: Sat, 19 Sep 2020 01:28:14 +0530 | ||||
| Subject: [PATCH xserver 2/2] modesetting: keep going if a modeset fails on | ||||
|  EnterVT | ||||
| MIME-Version: 1.0 | ||||
| Content-Type: text/plain; charset=UTF-8 | ||||
| Content-Transfer-Encoding: 8bit | ||||
| 
 | ||||
| There was a time when setting a mode on a CRTC would not depend on the | ||||
| associated connector's state. If a mode had been set successfully once, | ||||
| it would mean it would work later on. | ||||
| 
 | ||||
| This changed with the introduction of new connectors type that now | ||||
| require a link training sequence (DP, HDMI 2.0), and that means that | ||||
| some events may have happened while the X server was not master that | ||||
| would then prevent the mode from successfully be restored to its | ||||
| previous state. | ||||
| 
 | ||||
| This patch relaxes the requirement that all modes should be restored on | ||||
| EnterVT, or the entire X-Server would go down by allowing modesets to | ||||
| fail (with some warnings). If a modeset fails, the CRTC will be | ||||
| disabled, and a RandR event will be sent for the desktop environment to | ||||
| fix the situation as well as possible. | ||||
| 
 | ||||
| Additional patches might be needed to make sure that the user would | ||||
| never be left with all screens black in some scenarios. | ||||
| 
 | ||||
| v2 (Martin Peres): | ||||
|  - whitespace fixes | ||||
|  - remove the uevent handling (it is done in a previous patch) | ||||
|  - improve the commit message | ||||
|  - reduce the size of the patch by not changing lines needlessly | ||||
|  - return FALSE if one modeset fails in ignore mode | ||||
|  - add comments/todos to explain why we do things | ||||
|  - disable the CRTCs that failed the modeset | ||||
| 
 | ||||
| Signed-off-by: Kishore Kadiyala <kishore.kadiyala@intel.com> | ||||
| Signed-off-by: Martin Peres <martin.peres@linux.intel.com> | ||||
| Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> | ||||
| Tested-by: Kishore Kadiyala <kishore.kadiyala@intel.com> | ||||
| Closes: #1010 | ||||
| Signed-off-by: Michel Dänzer <mdaenzer@redhat.com> | ||||
| ---
 | ||||
|  hw/xfree86/drivers/modesetting/driver.c       | 23 +++++++++++++++---- | ||||
|  .../drivers/modesetting/drmmode_display.c     | 19 +++++++++++---- | ||||
|  .../drivers/modesetting/drmmode_display.h     |  3 ++- | ||||
|  3 files changed, 36 insertions(+), 9 deletions(-) | ||||
| 
 | ||||
| diff --git a/hw/xfree86/drivers/modesetting/driver.c b/hw/xfree86/drivers/modesetting/driver.c
 | ||||
| index a4d486a67..ef4a3147d 100644
 | ||||
| --- a/hw/xfree86/drivers/modesetting/driver.c
 | ||||
| +++ b/hw/xfree86/drivers/modesetting/driver.c
 | ||||
| @@ -705,7 +705,7 @@ msBlockHandler_oneshot(ScreenPtr pScreen, void *pTimeout)
 | ||||
|   | ||||
|      msBlockHandler(pScreen, pTimeout); | ||||
|   | ||||
| -    drmmode_set_desired_modes(pScrn, &ms->drmmode, TRUE);
 | ||||
| +    drmmode_set_desired_modes(pScrn, &ms->drmmode, TRUE, FALSE);
 | ||||
|  } | ||||
|   | ||||
|  static void | ||||
| @@ -1348,7 +1348,7 @@ CreateScreenResources(ScreenPtr pScreen)
 | ||||
|      ret = pScreen->CreateScreenResources(pScreen); | ||||
|      pScreen->CreateScreenResources = CreateScreenResources; | ||||
|   | ||||
| -    if (!drmmode_set_desired_modes(pScrn, &ms->drmmode, pScrn->is_gpu))
 | ||||
| +    if (!drmmode_set_desired_modes(pScrn, &ms->drmmode, pScrn->is_gpu, FALSE))
 | ||||
|          return FALSE; | ||||
|   | ||||
|      if (!drmmode_glamor_handle_new_screen_pixmap(&ms->drmmode)) | ||||
| @@ -1822,8 +1822,23 @@ EnterVT(ScrnInfoPtr pScrn)
 | ||||
|   | ||||
|      drmmode_update_kms_state(&ms->drmmode); | ||||
|   | ||||
| -    if (!drmmode_set_desired_modes(pScrn, &ms->drmmode, TRUE))
 | ||||
| -        return FALSE;
 | ||||
| +    /* allow not all modes to be set successfully since some events might have
 | ||||
| +     * happened while not being master that could prevent the previous
 | ||||
| +     * configuration from being re-applied.
 | ||||
| +     */
 | ||||
| +    if (!drmmode_set_desired_modes(pScrn, &ms->drmmode, TRUE, TRUE)) {
 | ||||
| +        xf86DisableUnusedFunctions(pScrn);
 | ||||
| +
 | ||||
| +        /* TODO: check that at least one screen is on, to allow the user to fix
 | ||||
| +         * their setup if all modeset failed...
 | ||||
| +         */
 | ||||
| +
 | ||||
| +        /* Tell the desktop environment that something changed, so that they
 | ||||
| +         * can hopefully correct the situation
 | ||||
| +         */
 | ||||
| +        RRSetChanged(xf86ScrnToScreen(pScrn));
 | ||||
| +        RRTellChanged(xf86ScrnToScreen(pScrn));
 | ||||
| +    }
 | ||||
|   | ||||
|      return TRUE; | ||||
|  } | ||||
| diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c
 | ||||
| index 646bacecb..88992f521 100644
 | ||||
| --- a/hw/xfree86/drivers/modesetting/drmmode_display.c
 | ||||
| +++ b/hw/xfree86/drivers/modesetting/drmmode_display.c
 | ||||
| @@ -3457,9 +3457,11 @@ drmmode_adjust_frame(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int x, int y)
 | ||||
|  } | ||||
|   | ||||
|  Bool | ||||
| -drmmode_set_desired_modes(ScrnInfoPtr pScrn, drmmode_ptr drmmode, Bool set_hw)
 | ||||
| +drmmode_set_desired_modes(ScrnInfoPtr pScrn, drmmode_ptr drmmode, Bool set_hw,
 | ||||
| +                          Bool ign_err)
 | ||||
|  { | ||||
|      xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn); | ||||
| +    Bool success = TRUE;
 | ||||
|      int c; | ||||
|   | ||||
|      for (c = 0; c < config->num_crtc; c++) { | ||||
| @@ -3507,8 +3509,17 @@ drmmode_set_desired_modes(ScrnInfoPtr pScrn, drmmode_ptr drmmode, Bool set_hw)
 | ||||
|          if (set_hw) { | ||||
|              if (!crtc->funcs-> | ||||
|                  set_mode_major(crtc, &crtc->desiredMode, crtc->desiredRotation, | ||||
| -                               crtc->desiredX, crtc->desiredY))
 | ||||
| -                return FALSE;
 | ||||
| +                               crtc->desiredX, crtc->desiredY)) {
 | ||||
| +                if (!ign_err)
 | ||||
| +                    return FALSE;
 | ||||
| +                else {
 | ||||
| +                    success = FALSE;
 | ||||
| +                    crtc->enabled = FALSE;
 | ||||
| +                    xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
 | ||||
| +                               "Failed to set the desired mode on connector %s\n",
 | ||||
| +                               output->name);
 | ||||
| +                }
 | ||||
| +            }
 | ||||
|          } else { | ||||
|              crtc->mode = crtc->desiredMode; | ||||
|              crtc->rotation = crtc->desiredRotation; | ||||
| @@ -3522,7 +3533,7 @@ drmmode_set_desired_modes(ScrnInfoPtr pScrn, drmmode_ptr drmmode, Bool set_hw)
 | ||||
|      /* Validate leases on VT re-entry */ | ||||
|      drmmode_validate_leases(pScrn); | ||||
|   | ||||
| -    return TRUE;
 | ||||
| +    return success;
 | ||||
|  } | ||||
|   | ||||
|  static void | ||||
| diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.h b/hw/xfree86/drivers/modesetting/drmmode_display.h
 | ||||
| index 6ef8ab9e4..59d79e9a0 100644
 | ||||
| --- a/hw/xfree86/drivers/modesetting/drmmode_display.h
 | ||||
| +++ b/hw/xfree86/drivers/modesetting/drmmode_display.h
 | ||||
| @@ -278,7 +278,8 @@ void drmmode_DisableSharedPixmapFlipping(xf86CrtcPtr crtc, drmmode_ptr drmmode);
 | ||||
|  extern Bool drmmode_pre_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int cpp); | ||||
|  extern Bool drmmode_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode); | ||||
|  void drmmode_adjust_frame(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int x, int y); | ||||
| -extern Bool drmmode_set_desired_modes(ScrnInfoPtr pScrn, drmmode_ptr drmmode, Bool set_hw);
 | ||||
| +extern Bool drmmode_set_desired_modes(ScrnInfoPtr pScrn, drmmode_ptr drmmode,
 | ||||
| +                                      Bool set_hw, Bool ign_err);
 | ||||
|  extern Bool drmmode_setup_colormap(ScreenPtr pScreen, ScrnInfoPtr pScrn); | ||||
|   | ||||
|  extern void drmmode_update_kms_state(drmmode_ptr drmmode); | ||||
| -- 
 | ||||
| 2.28.0 | ||||
| 
 | ||||
| @ -1,45 +0,0 @@ | ||||
| From 732507ed3255dff3970c5f92bd6ea13bf877e637 Mon Sep 17 00:00:00 2001 | ||||
| From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com> | ||||
| Date: Thu, 25 Jun 2020 18:11:31 +0200 | ||||
| Subject: [PATCH xserver 2/4] present/wnmd: Free flip_queue entries in | ||||
|  present_wnmd_clear_window_flip | ||||
| MIME-Version: 1.0 | ||||
| Content-Type: text/plain; charset=UTF-8 | ||||
| Content-Transfer-Encoding: 8bit | ||||
| 
 | ||||
| When present_wnmd_clear_window_flip is done, present_destroy_window | ||||
| frees struct present_window_priv, and the events in the flip queue | ||||
| become unreachable. So if we don't free them first, they're leaked. | ||||
| 
 | ||||
| Also drop the call to present_wnmd_set_abort_flip, which just sets a | ||||
| flag in struct present_window_priv and thus can't have any observable | ||||
| effect after present_destroy_window. | ||||
| 
 | ||||
| Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1042 | ||||
| Reviewed-by: Dave Airlie <airlied@redhat.com> | ||||
| (cherry picked from commit 1bdedc8dbb9d035b85444c2558a137470ff52113) | ||||
| Signed-off-by: Michel Dänzer <mdaenzer@redhat.com> | ||||
| ---
 | ||||
|  present/present_screen.c | 6 +++--- | ||||
|  1 file changed, 3 insertions(+), 3 deletions(-) | ||||
| 
 | ||||
| diff --git a/present/present_screen.c b/present/present_screen.c
 | ||||
| index c435f55f4..bfd30b8ba 100644
 | ||||
| --- a/present/present_screen.c
 | ||||
| +++ b/present/present_screen.c
 | ||||
| @@ -115,9 +115,9 @@ present_wnmd_clear_window_flip(WindowPtr window)
 | ||||
|      present_window_priv_ptr     window_priv = present_window_priv(window); | ||||
|      present_vblank_ptr          vblank, tmp; | ||||
|   | ||||
| -    if (window_priv->flip_pending) {
 | ||||
| -        present_wnmd_set_abort_flip(window);
 | ||||
| -        window_priv->flip_pending->window = NULL;
 | ||||
| +    xorg_list_for_each_entry_safe(vblank, tmp, &window_priv->flip_queue, event_queue) {
 | ||||
| +        present_pixmap_idle(vblank->pixmap, vblank->window, vblank->serial, vblank->idle_fence);
 | ||||
| +        present_vblank_destroy(vblank);
 | ||||
|      } | ||||
|   | ||||
|      xorg_list_for_each_entry_safe(vblank, tmp, &window_priv->idle_queue, event_queue) { | ||||
| -- 
 | ||||
| 2.26.2 | ||||
| 
 | ||||
| @ -1,94 +0,0 @@ | ||||
| From 99e9854c5fab7114b26c272088d9202548da55bf Mon Sep 17 00:00:00 2001 | ||||
| From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com> | ||||
| Date: Fri, 19 Jun 2020 18:14:35 +0200 | ||||
| Subject: [PATCH xserver 3/4] xwayland: Always use xwl_present_free_event for | ||||
|  freeing Present events | ||||
| MIME-Version: 1.0 | ||||
| Content-Type: text/plain; charset=UTF-8 | ||||
| Content-Transfer-Encoding: 8bit | ||||
| 
 | ||||
| Minor cleanup, and will make the next change simpler. No functional | ||||
| change intended. | ||||
| 
 | ||||
| Reviewed-by: Dave Airlie <airlied@redhat.com> | ||||
| (cherry picked from commit 1beffba699e2cc3f23039d2177c025bc127966de) | ||||
| Signed-off-by: Michel Dänzer <mdaenzer@redhat.com> | ||||
| ---
 | ||||
|  hw/xwayland/xwayland-present.c | 27 ++++++++++++--------------- | ||||
|  1 file changed, 12 insertions(+), 15 deletions(-) | ||||
| 
 | ||||
| diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c
 | ||||
| index 5ba7dce08..492e4a876 100644
 | ||||
| --- a/hw/xwayland/xwayland-present.c
 | ||||
| +++ b/hw/xwayland/xwayland-present.c
 | ||||
| @@ -111,6 +111,13 @@ xwl_present_reset_timer(struct xwl_present_window *xwl_present_window)
 | ||||
|      } | ||||
|  } | ||||
|   | ||||
| +static void
 | ||||
| +xwl_present_free_event(struct xwl_present_event *event)
 | ||||
| +{
 | ||||
| +    xorg_list_del(&event->list);
 | ||||
| +    free(event);
 | ||||
| +}
 | ||||
| +
 | ||||
|  void | ||||
|  xwl_present_cleanup(WindowPtr window) | ||||
|  { | ||||
| @@ -128,17 +135,15 @@ xwl_present_cleanup(WindowPtr window)
 | ||||
|      } | ||||
|   | ||||
|      /* Clear remaining events */ | ||||
| -    xorg_list_for_each_entry_safe(event, tmp, &xwl_present_window->event_list, list) {
 | ||||
| -        xorg_list_del(&event->list);
 | ||||
| -        free(event);
 | ||||
| -    }
 | ||||
| +    xorg_list_for_each_entry_safe(event, tmp, &xwl_present_window->event_list, list)
 | ||||
| +        xwl_present_free_event(event);
 | ||||
|   | ||||
|      /* Clear remaining buffer releases and inform Present about free ressources */ | ||||
|      event = xwl_present_window->sync_flip; | ||||
|      xwl_present_window->sync_flip = NULL; | ||||
|      if (event) { | ||||
|          if (event->buffer_released) { | ||||
| -            free(event);
 | ||||
| +            xwl_present_free_event(event);
 | ||||
|          } else { | ||||
|              event->pending = FALSE; | ||||
|              event->abort = TRUE; | ||||
| @@ -160,13 +165,6 @@ xwl_present_cleanup(WindowPtr window)
 | ||||
|      free(xwl_present_window); | ||||
|  } | ||||
|   | ||||
| -static void
 | ||||
| -xwl_present_free_event(struct xwl_present_event *event)
 | ||||
| -{
 | ||||
| -    xorg_list_del(&event->list);
 | ||||
| -    free(event);
 | ||||
| -}
 | ||||
| -
 | ||||
|  static void | ||||
|  xwl_present_buffer_release(void *data, struct wl_buffer *buffer) | ||||
|  { | ||||
| @@ -216,7 +214,7 @@ xwl_present_msc_bump(struct xwl_present_window *xwl_present_window)
 | ||||
|              /* If the buffer was already released, clean up now */ | ||||
|              present_wnmd_event_notify(xwl_present_window->window, event->event_id, | ||||
|                                        xwl_present_window->ust, msc); | ||||
| -            free(event);
 | ||||
| +            xwl_present_free_event(event);
 | ||||
|          } else { | ||||
|              xorg_list_add(&event->list, &xwl_present_window->release_queue); | ||||
|          } | ||||
| @@ -392,8 +390,7 @@ xwl_present_abort_vblank(WindowPtr present_window,
 | ||||
|   | ||||
|      xorg_list_for_each_entry_safe(event, tmp, &xwl_present_window->event_list, list) { | ||||
|          if (event->event_id == event_id) { | ||||
| -            xorg_list_del(&event->list);
 | ||||
| -            free(event);
 | ||||
| +            xwl_present_free_event(event);
 | ||||
|              return; | ||||
|          } | ||||
|      } | ||||
| -- 
 | ||||
| 2.26.2 | ||||
| 
 | ||||
| @ -1,77 +0,0 @@ | ||||
| From 1466a4fdfa8156dd4fd8b6ee6acd1b44f72ee3b1 Mon Sep 17 00:00:00 2001 | ||||
| From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <mdaenzer@redhat.com> | ||||
| Date: Fri, 19 Jun 2020 18:10:18 +0200 | ||||
| Subject: [PATCH xserver 4/4] xwayland: Free all remaining events in | ||||
|  xwl_present_cleanup | ||||
| MIME-Version: 1.0 | ||||
| Content-Type: text/plain; charset=UTF-8 | ||||
| Content-Transfer-Encoding: 8bit | ||||
| 
 | ||||
| At the end of xwl_present_cleanup, these events aren't reachable | ||||
| anymore, so if we don't free them first, they're leaked. | ||||
| 
 | ||||
| (cherry picked from commit 64565ea344fef0171497952ef75f019cb420fe3b) | ||||
| 
 | ||||
| v2: | ||||
| * Simpler backport, no need to keep a reference to the pixmap on the | ||||
|   1.20 branch. | ||||
| 
 | ||||
| Signed-off-by: Michel Dänzer <mdaenzer@redhat.com> | ||||
| ---
 | ||||
|  hw/xwayland/xwayland-present.c | 26 +++++++++++--------------- | ||||
|  1 file changed, 11 insertions(+), 15 deletions(-) | ||||
| 
 | ||||
| diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c
 | ||||
| index 492e4a876..2cec63f59 100644
 | ||||
| --- a/hw/xwayland/xwayland-present.c
 | ||||
| +++ b/hw/xwayland/xwayland-present.c
 | ||||
| @@ -114,6 +114,12 @@ xwl_present_reset_timer(struct xwl_present_window *xwl_present_window)
 | ||||
|  static void | ||||
|  xwl_present_free_event(struct xwl_present_event *event) | ||||
|  { | ||||
| +    if (!event)
 | ||||
| +        return;
 | ||||
| +
 | ||||
| +    if (event->buffer)
 | ||||
| +        wl_buffer_set_user_data(event->buffer, NULL);
 | ||||
| +
 | ||||
|      xorg_list_del(&event->list); | ||||
|      free(event); | ||||
|  } | ||||
| @@ -138,21 +144,10 @@ xwl_present_cleanup(WindowPtr window)
 | ||||
|      xorg_list_for_each_entry_safe(event, tmp, &xwl_present_window->event_list, list) | ||||
|          xwl_present_free_event(event); | ||||
|   | ||||
| -    /* Clear remaining buffer releases and inform Present about free ressources */
 | ||||
| -    event = xwl_present_window->sync_flip;
 | ||||
| -    xwl_present_window->sync_flip = NULL;
 | ||||
| -    if (event) {
 | ||||
| -        if (event->buffer_released) {
 | ||||
| -            xwl_present_free_event(event);
 | ||||
| -        } else {
 | ||||
| -            event->pending = FALSE;
 | ||||
| -            event->abort = TRUE;
 | ||||
| -        }
 | ||||
| -    }
 | ||||
| -    xorg_list_for_each_entry_safe(event, tmp, &xwl_present_window->release_queue, list) {
 | ||||
| -        xorg_list_del(&event->list);
 | ||||
| -        event->abort = TRUE;
 | ||||
| -    }
 | ||||
| +    xwl_present_free_event(xwl_present_window->sync_flip);
 | ||||
| +
 | ||||
| +    xorg_list_for_each_entry_safe(event, tmp, &xwl_present_window->release_queue, list)
 | ||||
| +        xwl_present_free_event(event);
 | ||||
|   | ||||
|      /* Clear timer */ | ||||
|      xwl_present_free_timer(xwl_present_window); | ||||
| @@ -353,6 +348,7 @@ xwl_present_queue_vblank(WindowPtr present_window,
 | ||||
|          return BadAlloc; | ||||
|   | ||||
|      event->event_id = event_id; | ||||
| +    event->buffer = NULL;
 | ||||
|      event->xwl_present_window = xwl_present_window; | ||||
|      event->target_msc = msc; | ||||
|   | ||||
| -- 
 | ||||
| 2.26.2 | ||||
| 
 | ||||
| @ -45,8 +45,8 @@ | ||||
| 
 | ||||
| Summary:   X.Org X11 X server | ||||
| Name:      xorg-x11-server | ||||
| Version:   1.20.8 | ||||
| Release:   6.1%{?gitdate:.%{gitdate}}%{?dist} | ||||
| Version:   1.20.10 | ||||
| Release:   1%{?gitdate:.%{gitdate}}%{?dist} | ||||
| URL:       http://www.x.org | ||||
| License:   MIT | ||||
| Group:     User Interface/X | ||||
| @ -99,13 +99,6 @@ Patch15: 0001-xfree86-LeaveVT-from-xf86CrtcCloseScreen.patch | ||||
| Patch16: 0001-xfree86-try-harder-to-span-on-multihead.patch | ||||
| Patch18: 0001-mustard-Work-around-broken-fbdev-headers.patch | ||||
| 
 | ||||
| # Xwayland / Present leak fixes from | ||||
| # https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/459 | ||||
| Patch20: 0001-present-wnmd-Keep-pixmap-pointer-in-present_wnmd_cle.patch | ||||
| Patch21: 0002-present-wnmd-Free-flip_queue-entries-in-present_wnmd.patch | ||||
| Patch22: 0003-xwayland-Always-use-xwl_present_free_event-for-freei.patch | ||||
| Patch23: 0004-xwayland-Free-all-remaining-events-in-xwl_present_cl.patch | ||||
| 
 | ||||
| # fix to be upstreamed | ||||
| Patch100: 0001-linux-Make-platform-device-probe-less-fragile.patch | ||||
| Patch102: 0001-xfree86-ensure-the-readlink-buffer-is-null-terminate.patch | ||||
| @ -115,11 +108,6 @@ Patch200: 0001-Fix-segfault-on-probing-a-non-PCI-platform-device-on.patch | ||||
| Patch201: 0001-linux-Fix-platform-device-PCI-detection-for-complex-.patch | ||||
| Patch202: 0001-modesetting-Reduce-glamor-initialization-failed-mess.patch | ||||
| Patch203: 0001-xfree86-Only-switch-to-original-VT-if-it-is-active.patch | ||||
| Patch204: 0001-xwayland-Hold-a-pixmap-reference-in-struct-xwl_prese.patch | ||||
| Patch205: 0001-glamor-Fix-glamor_poly_fill_rect_gl-xRectangle-width.patch | ||||
| Patch206: 0001-xfree86-add-drm-modes-on-non-GTF-panels.patch | ||||
| Patch207: 0001-modesetting-check-the-kms-state-on-EnterVT.patch | ||||
| Patch208: 0002-modesetting-keep-going-if-a-modeset-fails-on-EnterVT.patch | ||||
| 
 | ||||
| BuildRequires: systemtap-sdt-devel | ||||
| BuildRequires: git | ||||
| @ -392,6 +380,7 @@ autoreconf -f -v --install || exit 1 | ||||
|         --without-dtrace \ | ||||
| 	--disable-linux-acpi --disable-linux-apm \ | ||||
| 	--enable-xselinux --enable-record --enable-present \ | ||||
|         --enable-xcsecurity \ | ||||
| 	--enable-config-udev \ | ||||
| 	--disable-unit-tests \ | ||||
| 	--enable-dmx \ | ||||
| @ -563,9 +552,24 @@ find %{inst_srcdir}/hw/xfree86 -name \*.c -delete | ||||
| 
 | ||||
| 
 | ||||
| %changelog | ||||
| * Tue Dec  1 2020 Michel Dänzer <mdaenzer@redhat.com> - 1.20.8-6.1 | ||||
| * Thu Dec 10 2020 Adam Jackson <ajax@redhat.com> - 1.20.10-1 | ||||
| - xserver 1.20.10 | ||||
|   Resolves: #1891871 | ||||
| 
 | ||||
| * Wed Dec  9 2020 Michel Dänzer <mdaenzer@redhat.com> - 1.20.8-10 | ||||
| - modesetting: keep going if a modeset fails on EnterVT | ||||
|   Resolves: #1883491 | ||||
|   Resolves: #1838392 | ||||
| 
 | ||||
| * Mon Nov 16 2020 Adam Jackson <ajax@redhat.com> - 1.20.8-9 | ||||
| - CVE fix for: CVE-2020-14347 (#1862320) | ||||
| 
 | ||||
| * Thu Oct 29 2020 Michel Dänzer <mdaenzer@redhat.com> - 1.20.8-8 | ||||
| - CVE fixes for: CVE-2020-14345 (#1872391), CVE-2020-14346 (#1872395), | ||||
|   CVE-2020-14361 (#1872402), CVE-2020-14362 (#1872409) | ||||
| 
 | ||||
| * Tue Oct 27 2020 Adam Jackson <ajax@redhat.com> - 1.20.8-7 | ||||
| - Enable XC-SECURITY | ||||
|   Resolves: #1863142 | ||||
| 
 | ||||
| * Thu Aug 20 2020 Michel Dänzer <mdaenzer@redhat.com> - 1.20.8-6 | ||||
| - xfree86: add drm modes on non-GTF panels | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user