v4l2-uvm-test: refine drm-gem buffer close [1/1]

PD#SWPL-25383

Problem:
DRM_IOCTL_MODE_DESTROY_DUMB return EACCES

Solution:
Use DRM_IOCTL_GEM_CLOSE to try again

Verify:
U212 + westeros-sink

Change-Id: I72a1f5b9a37d15a34ca955afba0af7043bf513a4
Signed-off-by: Song Zhao <song.zhao@amlogic.com>
diff --git a/v4l2-uvm-test/src/drm.c b/v4l2-uvm-test/src/drm.c
index 0eac333..becff4b 100644
--- a/v4l2-uvm-test/src/drm.c
+++ b/v4l2-uvm-test/src/drm.c
@@ -198,9 +198,19 @@
 
         rc = drmIoctl(fd, DRM_IOCTL_MODE_DESTROY_DUMB, &destroy_dumb);
         if (rc < 0) {
-            fprintf(stderr, "Unable to destroy buffer: %s\n",
-                    strerror(errno));
-            return -1;
+            /* If handle was from drmPrimeFDToHandle, then fd is connected
+             * as render, we have to use drm_gem_close to release it.
+             */
+            if (errno == EACCES) {
+                struct drm_gem_close close_req;
+                close_req.handle = destroy_dumb.handle;
+                rc = drmIoctl(fd, DRM_IOCTL_GEM_CLOSE, &close_req);
+                if (rc < 0) {
+                    fprintf(stderr, "Unable to destroy buffer: %s\n",
+                            strerror(errno));
+                    return -1;
+                }
+            }
         }
     }