1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
From 30d762830460053cd28e347210cab18d7cff7b6a Mon Sep 17 00:00:00 2001
From: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com>
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 <Harish.Kasiviswanathan@amd.com>
---
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
|