]> git.pld-linux.org Git - packages/Mesa.git/commitdiff
up to 23.1.3 auto/th/Mesa-23.1.3-1
authorJan Palus <atler@pld-linux.org>
Thu, 22 Jun 2023 17:16:05 +0000 (19:16 +0200)
committerJan Palus <atler@pld-linux.org>
Thu, 22 Jun 2023 17:16:05 +0000 (19:16 +0200)
- add patch fixing memory leak on mode change when using panfrost driver
  from: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23746

Mesa.spec
panfrost-mem-leak.patch [new file with mode: 0644]

index b7190282f99e6811a32c2ad37271ee90576ee403..3cb7410fa2d3927c0984cfc9c449f8162e81c010 100644 (file)
--- a/Mesa.spec
+++ b/Mesa.spec
 Summary:       Free OpenGL implementation
 Summary(pl.UTF-8):     WolnodostÄ™pna implementacja standardu OpenGL
 Name:          Mesa
-Version:       23.1.2
+Version:       23.1.3
 Release:       1
 License:       MIT (core) and others - see license.html file
 Group:         X11/Libraries
 #Source0:      ftp://ftp.freedesktop.org/pub/mesa/mesa-%{version}.tar.xz
 ## Source0-md5:        7c61a801311fb8d2f7b3cceb7b5cf308
 Source0:       https://archive.mesa3d.org/mesa-%{version}.tar.xz
-# Source0-md5: 0e9859110df4425e83186e0645452daa
+# Source0-md5: 0dce0342dbf08dc5afbaf51e729da1a1
+Patch0:                panfrost-mem-leak.patch
 URL:           https://www.mesa3d.org/
 %if %{with opencl_spirv} || %{with gallium_rusticl}
 BuildRequires: SPIRV-LLVM-Translator-devel >= 8.0.1.3
@@ -1441,6 +1442,7 @@ radv - eksperymentalny sterownik Vulkan dla GPU firmy AMD.
 
 %prep
 %setup -q -n mesa-%{version}
+%patch0 -p1
 
 %build
 %if %{with opencl}
diff --git a/panfrost-mem-leak.patch b/panfrost-mem-leak.patch
new file mode 100644 (file)
index 0000000..fe286e2
--- /dev/null
@@ -0,0 +1,76 @@
+From 88c6429e4babcb00eb4d324089e4a6916d0a62aa Mon Sep 17 00:00:00 2001
+From: Robert Beckett <bob.beckett@collabora.com>
+Date: Wed, 26 Apr 2023 13:28:40 +0100
+Subject: [PATCH] panfrost: fix scanout buffer alloc
+
+Use ro->bo_map to alloc scanout.
+This fixes leaking the scanout.
+
+Fixes: ad4d7ca83324 ("kmsro: Fix renderonly_scanout BO aliasing")
+Signed-off-by: Robert Beckett <bob.beckett@collabora.com>
+Cc: mesa-stable
+---
+ .../winsys/panfrost/drm/panfrost_drm_winsys.c | 25 +++++++++++--------
+ 1 file changed, 14 insertions(+), 11 deletions(-)
+
+diff --git a/src/gallium/winsys/panfrost/drm/panfrost_drm_winsys.c b/src/gallium/winsys/panfrost/drm/panfrost_drm_winsys.c
+index b5ec50d49ef0e..2710217a5b44e 100644
+--- a/src/gallium/winsys/panfrost/drm/panfrost_drm_winsys.c
++++ b/src/gallium/winsys/panfrost/drm/panfrost_drm_winsys.c
+@@ -63,26 +63,32 @@ panfrost_create_kms_dumb_buffer_for_resource(struct pipe_resource *rsc,
+    };
+    struct drm_mode_destroy_dumb destroy_dumb = {0};
+-   /* Align width to end up with a buffer that's aligned on 64 bytes. */
+-
+-   struct renderonly_scanout *scanout = CALLOC_STRUCT(renderonly_scanout);
+-   if (!scanout)
+-      return NULL;
+-
+    /* create dumb buffer at scanout GPU */
+    int err = drmIoctl(ro->kms_fd, DRM_IOCTL_MODE_CREATE_DUMB, &create_dumb);
+    if (err < 0) {
+       fprintf(stderr, "DRM_IOCTL_MODE_CREATE_DUMB failed: %s\n",
+               strerror(errno));
+-      goto free_scanout;
++      return NULL;
+    }
+    if (create_dumb.pitch % 64)
+       goto free_dumb;
++   struct renderonly_scanout *scanout;
++
++   simple_mtx_lock(&ro->bo_map_lock);
++   scanout = util_sparse_array_get(&ro->bo_map, create_dumb.handle);
++   simple_mtx_unlock(&ro->bo_map_lock);
++
++   if (!scanout)
++      goto free_dumb;
++
+    scanout->handle = create_dumb.handle;
+    scanout->stride = create_dumb.pitch;
++   assert(p_atomic_read(&scanout->refcnt) == 0);
++   p_atomic_set(&scanout->refcnt, 1);
++
+    if (!out_handle)
+       return scanout;
+@@ -101,12 +107,9 @@ panfrost_create_kms_dumb_buffer_for_resource(struct pipe_resource *rsc,
+    return scanout;
+ free_dumb:
+-   destroy_dumb.handle = scanout->handle;
++   destroy_dumb.handle = create_dumb.handle;
+    drmIoctl(ro->kms_fd, DRM_IOCTL_MODE_DESTROY_DUMB, &destroy_dumb);
+-free_scanout:
+-   FREE(scanout);
+-
+    return NULL;
+ }
+-- 
+GitLab
+
This page took 0.058031 seconds and 4 git commands to generate.