aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amdfalconx86/recipes-kernel/linux/files/1108-drm-amdgpu-fix-uvd-fini-mem-leak.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/files/1108-drm-amdgpu-fix-uvd-fini-mem-leak.patch')
-rw-r--r--meta-amdfalconx86/recipes-kernel/linux/files/1108-drm-amdgpu-fix-uvd-fini-mem-leak.patch79
1 files changed, 79 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/files/1108-drm-amdgpu-fix-uvd-fini-mem-leak.patch b/meta-amdfalconx86/recipes-kernel/linux/files/1108-drm-amdgpu-fix-uvd-fini-mem-leak.patch
new file mode 100644
index 00000000..7f7afa9b
--- /dev/null
+++ b/meta-amdfalconx86/recipes-kernel/linux/files/1108-drm-amdgpu-fix-uvd-fini-mem-leak.patch
@@ -0,0 +1,79 @@
+From 8d08dbb0b24d54b199c0fa1b39232ae8b73155d4 Mon Sep 17 00:00:00 2001
+From: Monk Liu <Monk.Liu@amd.com>
+Date: Mon, 30 May 2016 15:13:59 +0800
+Subject: [PATCH 1108/1110] drm/amdgpu:fix uvd fini mem leak
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Change-Id: I970ff5639fd22464a494750956646296b932ba3c
+Signed-off-by: Monk Liu <Monk.Liu@amd.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Kalyan Alle <kalyan.alle@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+index 88a7942..efb07fe 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+@@ -244,11 +244,11 @@ int amdgpu_uvd_sw_init(struct amdgpu_device *adev)
+ int amdgpu_uvd_sw_fini(struct amdgpu_device *adev)
+ {
+ int r;
+-
+- if (adev->uvd.vcpu_bo == NULL)
+- return 0;
++
++ kfree(adev->uvd.saved_bo);
+ amd_sched_entity_fini(&adev->uvd.ring.sched, &adev->uvd.entity);
+-
++
++ if (adev->uvd.vcpu_bo) {
+ r = amdgpu_bo_reserve(adev->uvd.vcpu_bo, false);
+ if (!r) {
+ amdgpu_bo_kunmap(adev->uvd.vcpu_bo);
+@@ -257,7 +257,7 @@ int amdgpu_uvd_sw_fini(struct amdgpu_device *adev)
+ }
+
+ amdgpu_bo_unref(&adev->uvd.vcpu_bo);
+-
++ }
+ amdgpu_ring_fini(&adev->uvd.ring);
+
+ release_firmware(adev->uvd.fw);
+@@ -280,8 +280,10 @@ int amdgpu_uvd_suspend(struct amdgpu_device *adev)
+
+ if (i == AMDGPU_MAX_UVD_HANDLES)
+ return 0;
+-
+- size = amdgpu_bo_size(adev->uvd.vcpu_bo);
++
++ cancel_delayed_work_sync(&adev->uvd.idle_work);
++
++ size = amdgpu_bo_size(adev->uvd.vcpu_bo);
+ ptr = adev->uvd.cpu_addr;
+
+ adev->uvd.saved_bo = kmalloc(size, GFP_KERNEL);
+@@ -301,8 +303,6 @@ int amdgpu_uvd_resume(struct amdgpu_device *adev)
+ if (adev->uvd.vcpu_bo == NULL)
+ return -EINVAL;
+
+- cancel_delayed_work_sync(&adev->uvd.idle_work);
+-
+ size = amdgpu_bo_size(adev->uvd.vcpu_bo);
+ ptr = adev->uvd.cpu_addr;
+
+@@ -916,7 +916,7 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo,
+
+ amdgpu_job_free(job);
+ } else {
+- r = amdgpu_job_submit(job, ring, NULL,
++ r = amdgpu_job_submit(job, ring, &adev->uvd.entity,
+ AMDGPU_FENCE_OWNER_UNDEFINED, &f);
+ if (r)
+ goto err_free;
+--
+2.7.4
+