aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2187-drm-amdkfd-Remove-BOs-mmapping-from-kfd.patch
blob: e1b634340c6a2de103de1a0bd05a03010c230e27 (plain)
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
From 4ecda6656f514f11c6530ee109a4d9440a24f75f Mon Sep 17 00:00:00 2001
From: oak zeng <oak.zeng@amd.com>
Date: Thu, 26 Oct 2017 16:36:54 -0400
Subject: [PATCH 2187/4131] drm/amdkfd: Remove BOs mmapping from kfd

This removed BOs mmapping support from kfd device. Removed
mmap type and GPU ID from mmap_offset for BOs allocated
from kfd - only pure offset is returned. Memory allocated
through kfd is now mmapped through drm render device.

Change-Id: Ia6b38de2dff9ebe843e525d6c8e76b8d14a892e5
Signed-off-by: oak zeng <oak.zeng@amd.com>
---
 drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 45 +++++---------------------------
 drivers/gpu/drm/amd/amdkfd/kfd_ipc.c     |  4 ---
 drivers/gpu/drm/amd/amdkfd/kfd_priv.h    |  3 +--
 3 files changed, 8 insertions(+), 44 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
index 115c5b1..ad3caadf 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
@@ -46,7 +46,6 @@
 static long kfd_ioctl(struct file *, unsigned int, unsigned long);
 static int kfd_open(struct inode *, struct file *);
 static int kfd_mmap(struct file *, struct vm_area_struct *);
-static bool kfd_is_large_bar(struct kfd_dev *dev);
 
 static const char kfd_dev_name[] = "kfd";
 
@@ -1127,25 +1126,6 @@ static int kfd_ioctl_alloc_scratch_memory(struct file *filep,
 	return -EFAULT;
 }
 
-bool kfd_is_large_bar(struct kfd_dev *dev)
-{
-	struct kfd_local_mem_info mem_info;
-
-	if (debug_largebar) {
-		pr_debug("Simulate large-bar allocation on non large-bar machine\n");
-		return true;
-	}
-
-	if (dev->device_info->is_need_iommu_device)
-		return false;
-
-	dev->kfd2kgd->get_local_mem_info(dev->kgd, &mem_info);
-	if (mem_info.local_mem_size_private == 0 &&
-			mem_info.local_mem_size_public > 0)
-		return true;
-	return false;
-}
-
 static int kfd_ioctl_alloc_memory_of_gpu(struct file *filep,
 					struct kfd_process *p, void *data)
 {
@@ -1213,15 +1193,7 @@ static int kfd_ioctl_alloc_memory_of_gpu(struct file *filep,
 	mutex_unlock(&p->mutex);
 
 	args->handle = MAKE_HANDLE(args->gpu_id, idr_handle);
-	if ((args->flags & KFD_IOC_ALLOC_MEM_FLAGS_VRAM) != 0 &&
-			!kfd_is_large_bar(dev)) {
-		args->mmap_offset = 0;
-	} else {
-		args->mmap_offset = KFD_MMAP_TYPE_MAP_BO;
-		args->mmap_offset |= KFD_MMAP_GPU_ID(args->gpu_id);
-		args->mmap_offset <<= PAGE_SHIFT;
-		args->mmap_offset |= offset;
-	}
+	args->mmap_offset = offset;
 
 	return 0;
 
@@ -2203,7 +2175,7 @@ static int kfd_mmap(struct file *filp, struct vm_area_struct *vma)
 	struct kfd_process *process;
 	struct kfd_dev *kfd;
 	unsigned long vm_pgoff;
-	int retval;
+	unsigned long long mmap_type;
 
 	process = kfd_get_process(current);
 	if (IS_ERR(process))
@@ -2211,8 +2183,9 @@ static int kfd_mmap(struct file *filp, struct vm_area_struct *vma)
 
 	vm_pgoff = vma->vm_pgoff;
 	vma->vm_pgoff = KFD_MMAP_OFFSET_VALUE_GET(vma->vm_pgoff);
+	mmap_type = vm_pgoff & KFD_MMAP_TYPE_MASK;
 
-	switch (vm_pgoff & KFD_MMAP_TYPE_MASK) {
+	switch (mmap_type) {
 	case KFD_MMAP_TYPE_DOORBELL:
 		kfd = kfd_device_by_id(KFD_MMAP_GPU_ID_GET(vm_pgoff));
 		if (!kfd)
@@ -2222,16 +2195,12 @@ static int kfd_mmap(struct file *filp, struct vm_area_struct *vma)
 	case KFD_MMAP_TYPE_EVENTS:
 		return kfd_event_mmap(process, vma);
 
-	case KFD_MMAP_TYPE_MAP_BO:
-		kfd = kfd_device_by_id(KFD_MMAP_GPU_ID_GET(vm_pgoff));
-		if (!kfd)
-			return -EFAULT;
-		retval = kfd->kfd2kgd->mmap_bo(kfd->kgd, vma);
-		return retval;
-
 	case KFD_MMAP_TYPE_RESERVED_MEM:
 		return kfd_reserved_mem_mmap(process, vma);
 
+	default:
+		pr_err("Unsupported kfd mmap type %llx\n", mmap_type);
+		break;
 	}
 
 	return -EFAULT;
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_ipc.c b/drivers/gpu/drm/amd/amdkfd/kfd_ipc.c
index 58aed52..269cd2a 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_ipc.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_ipc.c
@@ -118,8 +118,6 @@ static int kfd_import_dmabuf_create_kfd_bo(struct kfd_dev *dev,
 	uint64_t size;
 	int idr_handle;
 	struct kfd_process_device *pdd = NULL;
-	uint64_t kfd_mmap_flags = KFD_MMAP_TYPE_MAP_BO |
-				  KFD_MMAP_GPU_ID(gpu_id);
 
 	if (!handle)
 		return -EINVAL;
@@ -153,8 +151,6 @@ static int kfd_import_dmabuf_create_kfd_bo(struct kfd_dev *dev,
 	mutex_unlock(&p->mutex);
 
 	*handle = MAKE_HANDLE(gpu_id, idr_handle);
-	if (mmap_offset)
-		*mmap_offset = (kfd_mmap_flags << PAGE_SHIFT) | *mmap_offset;
 
 	return 0;
 
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
index 5020310..215686a 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
@@ -60,8 +60,7 @@
 #define KFD_MMAP_TYPE_MASK	(0x3ULL << KFD_MMAP_TYPE_SHIFT)
 #define KFD_MMAP_TYPE_DOORBELL	(0x3ULL << KFD_MMAP_TYPE_SHIFT)
 #define KFD_MMAP_TYPE_EVENTS	(0x2ULL << KFD_MMAP_TYPE_SHIFT)
-#define KFD_MMAP_TYPE_MAP_BO	(0x1ULL << KFD_MMAP_TYPE_SHIFT)
-#define KFD_MMAP_TYPE_RESERVED_MEM	(0x0ULL << KFD_MMAP_TYPE_SHIFT)
+#define KFD_MMAP_TYPE_RESERVED_MEM	(0x1ULL << KFD_MMAP_TYPE_SHIFT)
 
 #define KFD_MMAP_GPU_ID_SHIFT (46 - PAGE_SHIFT)
 #define KFD_MMAP_GPU_ID_MASK (((1ULL << KFD_GPU_ID_HASH_WIDTH) - 1) \
-- 
2.7.4