From 30d762830460053cd28e347210cab18d7cff7b6a Mon Sep 17 00:00:00 2001 From: Harish Kasiviswanathan Date: Fri, 18 Nov 2016 17:53:08 -0500 Subject: [PATCH 1560/4131] drm/amdgpu: Add mmap_offset for KFD BO import dmabuf Change-Id: Ida621e50cbadf376cf7618077079f3ba2eccd373 Signed-off-by: Harish Kasiviswanathan --- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h | 3 ++- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 6 +++++- drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 3 ++- drivers/gpu/drm/amd/include/kgd_kfd_interface.h | 3 ++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h index 362132b..6003b77 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h @@ -194,7 +194,8 @@ void amdgpu_amdkfd_gpuvm_unpin_put_sg_table( struct kgd_mem *mem, struct sg_table *sg); int amdgpu_amdkfd_gpuvm_import_dmabuf(struct kgd_dev *kgd, int dma_buf_fd, uint64_t va, void *vm, - struct kgd_mem **mem, uint64_t *size); + struct kgd_mem **mem, uint64_t *size, + uint64_t *mmap_offset); int amdgpu_amdkfd_gpuvm_export_dmabuf(struct kgd_dev *kgd, void *vm, struct kgd_mem *mem, int *dmabuf_fd); int amdgpu_amdkfd_gpuvm_evict_mem(struct kgd_mem *mem, struct mm_struct *mm); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index 3a7bfa1..a5d84d7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -1791,7 +1791,8 @@ void amdgpu_amdkfd_gpuvm_unpin_put_sg_table( int amdgpu_amdkfd_gpuvm_import_dmabuf(struct kgd_dev *kgd, int dma_buf_fd, uint64_t va, void *vm, - struct kgd_mem **mem, uint64_t *size) + struct kgd_mem **mem, uint64_t *size, + uint64_t *mmap_offset) { struct amdgpu_device *adev = (struct amdgpu_device *)kgd; struct dma_buf *dma_buf; @@ -1822,6 +1823,9 @@ int amdgpu_amdkfd_gpuvm_import_dmabuf(struct kgd_dev *kgd, int dma_buf_fd, if (size) *size = amdgpu_bo_size(bo); + if (mmap_offset) + *mmap_offset = amdgpu_bo_mmap_offset(bo); + *mem = kzalloc(sizeof(struct kgd_mem), GFP_KERNEL); if (*mem == NULL) { r = -ENOMEM; diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c index f56d24a..f28b1c3 100644 --- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c @@ -1798,7 +1798,8 @@ static int kfd_ioctl_import_dmabuf(struct file *filep, r = dev->kfd2kgd->import_dmabuf(dev->kgd, args->dmabuf_fd, args->va_addr, pdd->vm, - (struct kgd_mem **)&mem, &size); + (struct kgd_mem **)&mem, &size, + NULL); if (r) return r; diff --git a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h index 68b72cd..a655b37 100644 --- a/drivers/gpu/drm/amd/include/kgd_kfd_interface.h +++ b/drivers/gpu/drm/amd/include/kgd_kfd_interface.h @@ -356,7 +356,8 @@ struct kfd2kgd_calls { void *metadata_buffer, size_t buffer_size, uint32_t *metadata_size, uint32_t *flags); int (*import_dmabuf)(struct kgd_dev *kgd, int dma_buf_fd, uint64_t va, - void *vm, struct kgd_mem **mem, uint64_t *size); + void *vm, struct kgd_mem **mem, uint64_t *size, + uint64_t *mmap_offset); int (*export_dmabuf)(struct kgd_dev *kgd, void *vm, struct kgd_mem *mem, int *dma_buf_fd); -- 2.7.4