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;
+ }
+ }
}
}