summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Palus2023-06-22 17:16:05 (GMT)
committerJan Palus2023-06-22 17:16:05 (GMT)
commit75196731370b301c7e7541f68e3a1551d1e50041 (patch)
treede36c280e3d912313faa19d28133cdf81d5a6429
parentbf6cc2894b69075b79927898dc631329e88cf9b4 (diff)
downloadMesa-75196731370b301c7e7541f68e3a1551d1e50041.zip
Mesa-75196731370b301c7e7541f68e3a1551d1e50041.tar.gz
- add patch fixing memory leak on mode change when using panfrost driver from: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23746
-rw-r--r--Mesa.spec6
-rw-r--r--panfrost-mem-leak.patch76
2 files changed, 80 insertions, 2 deletions
diff --git a/Mesa.spec b/Mesa.spec
index b719028..3cb7410 100644
--- a/Mesa.spec
+++ b/Mesa.spec
@@ -73,14 +73,15 @@
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
index 0000000..fe286e2
--- /dev/null
+++ b/panfrost-mem-leak.patch
@@ -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
+