Fixed mem leak of fence on 4.9.68 and newer
authorJiyu Yang <jiyu.yang@amlogic.com>
Thu, 12 Apr 2018 12:00:37 +0000 (20:00 +0800)
committerJiyu Yang <jiyu.yang@amlogic.com>
Tue, 17 Apr 2018 03:37:55 +0000 (19:37 -0800)
PD#163966
Relevant kernel commits:
30cd85dd6edc86ea8d8589efb813f1fad41ef233 for v4.10 (master)
3a83421d482e7d7c6f4251dcd825548e5262c054 for v4.9.68

Change-Id: I30870fbeeaebd6e84e4a2929ac22a7d065beb20b

bifrost/r9p0/kernel/drivers/gpu/arm/midgard/mali_kbase_sync_file.c
dvalin/kernel/drivers/gpu/arm/midgard/mali_kbase_sync_file.c

index cb00c33ee6a8cad50c87e74b207a3ffc8cecb39c..062ec00aaf93b139b5f2627d048397be60945247 100644 (file)
@@ -68,10 +68,14 @@ int kbase_sync_fence_out_create(struct kbase_jd_atom *katom, int stream_fd)
        if (!fence)
                return -ENOMEM;
 
-       /* Take an extra reference to the fence on behalf of the katom.
-        * This is needed because sync_file_create() will take ownership of
-        * one of these refs */
+#if (KERNEL_VERSION(4, 9, 67) >= LINUX_VERSION_CODE)
+       /* Take an extra reference to the fence on behalf of the sync_file.
+        * This is only needed on older kernels where sync_file_create()
+        * does not take its own reference. This was changed in v4.9.68,
+        * where sync_file_create() now takes its own reference.
+        */
        dma_fence_get(fence);
+#endif
 
        /* create a sync_file fd representing the fence */
        sync_file = sync_file_create(fence);
index 162c7b16ccc03d92a34cdeed89250f3dcec808f4..16d3563256e235c0776ee4cae6442e65065fed1c 100644 (file)
@@ -73,10 +73,14 @@ int kbase_sync_fence_out_create(struct kbase_jd_atom *katom, int stream_fd)
        if (!fence)
                return -ENOMEM;
 
-       /* Take an extra reference to the fence on behalf of the katom.
-        * This is needed because sync_file_create() will take ownership of
-        * one of these refs */
+#if (KERNEL_VERSION(4, 9, 67) >= LINUX_VERSION_CODE)
+       /* Take an extra reference to the fence on behalf of the sync_file.
+        * This is only needed on older kernels where sync_file_create()
+        * does not take its own reference. This was changed in v4.9.68,
+        * where sync_file_create() now takes its own reference.
+        */
        dma_fence_get(fence);
+#endif
 
        /* create a sync_file fd representing the fence */
        sync_file = sync_file_create(fence);