For kernel < 4.6 drm_prime_handle_to_fd_ioctl won't
accept DRM_RDWR.

Sigend-off-by: Qiang Yu <[email protected]>
---
 amdgpu/amdgpu_bo.c       | 8 ++++++--
 amdgpu/amdgpu_internal.h | 2 ++
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/amdgpu/amdgpu_bo.c b/amdgpu/amdgpu_bo.c
index 9e37b14..17f848f 100644
--- a/amdgpu/amdgpu_bo.c
+++ b/amdgpu/amdgpu_bo.c
@@ -229,6 +229,7 @@ int amdgpu_bo_export(amdgpu_bo_handle bo,
                     uint32_t *shared_handle)
 {
        int r;
+       uint32_t flags;
 
        switch (type) {
        case amdgpu_bo_handle_type_gem_flink_name:
@@ -246,8 +247,11 @@ int amdgpu_bo_export(amdgpu_bo_handle bo,
 
        case amdgpu_bo_handle_type_dma_buf_fd:
                amdgpu_add_handle_to_table(bo);
-               return drmPrimeHandleToFD(bo->dev->fd, bo->handle,
-                                         DRM_CLOEXEC | DRM_RDWR,
+               flags = DRM_CLOEXEC;
+               if (AMDGPU_VERSION(bo->dev->major_version, 
bo->dev->minor_version) >=
+                   AMDGPU_VERSION(3, 1))
+                       flags |= DRM_RDWR;
+               return drmPrimeHandleToFD(bo->dev->fd, bo->handle, flags,
                                          (int*)shared_handle);
        }
        return -EINVAL;
diff --git a/amdgpu/amdgpu_internal.h b/amdgpu/amdgpu_internal.h
index 99b8ce0..09f5036 100644
--- a/amdgpu/amdgpu_internal.h
+++ b/amdgpu/amdgpu_internal.h
@@ -39,6 +39,8 @@
 #define ROUND_UP(x, y) ((((x)-1) | __round_mask(x, y))+1)
 #define ROUND_DOWN(x, y) ((x) & ~__round_mask(x, y))
 
+#define AMDGPU_VERSION(major, minor) ((major << 16) | minor)
+
 #define AMDGPU_INVALID_VA_ADDRESS      0xffffffffffffffff
 #define AMDGPU_NULL_SUBMIT_SEQ         0
 
-- 
1.9.1

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to