Hi guys, CCing: dri-devel. question to the usual suspects here: Does somebody of hand knows when DRM_RDWR was added and how we can check reliable if it's available or not? Using the version number of amdgpu for this sounds a bit questionable, cause that reflects amdgpu functionality level and not DRM prime functionality level. Thanks, Christian. Am 17.04.2018 um 10:48 schrieb Qiang Yu: > For kernel < 4.6 drm_prime_handle_to_fd_ioctl won't > accept DRM_RDWR. > > Sigend-off-by: Qiang Yu <Qiang.Yu at amd.com> > --- > 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 >