aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
diff options
context:
space:
mode:
authorFelix Kuehling <Felix.Kuehling@amd.com>2018-02-06 20:32:35 -0500
committerOded Gabbay <oded.gabbay@gmail.com>2018-02-06 20:32:35 -0500
commitd8d019ccffb838bb0dd98e583b5c25ccc0bc6ece (patch)
tree660d1ea42b915579fc4b12ad717bcbcaf49254f6 /drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
parent1029a3f33678afb8978285209ec5cfe153fe44ef (diff)
drm/amdgpu: Add KFD eviction fence
This fence is used by KFD to keep memory resident while user mode queues are enabled. Trying to evict memory will trigger the enable_signaling callback, which starts a KFD eviction, which involves preempting user mode queues before signaling the fence. There is one such fence per process. v2: * Grab a reference to mm_struct * Dereference fence after NULL check * Simplify fence release, no need to signal without anyone waiting * Added signed-off-by Harish, who is the original author of this code v3: * update MAINTAINERS file * change amd_kfd_ prefix to amdkfd_ * remove useless initialization of variable to NULL v4: * set amdkfd_fence_ops to be static * Suggested by: Fengguang Wu <fengguang.wu@intel.com> Signed-off-by: Harish Kasiviswanathan <Harish.Kasiviswanathan@amd.com> Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> Reviewed-by: Oded Gabbay <oded.gabbay@gmail.com> Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 28c33d711bab..5fcb3488a595 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -46,6 +46,7 @@
46#include "amdgpu.h" 46#include "amdgpu.h"
47#include "amdgpu_object.h" 47#include "amdgpu_object.h"
48#include "amdgpu_trace.h" 48#include "amdgpu_trace.h"
49#include "amdgpu_amdkfd.h"
49#include "bif/bif_4_1_d.h" 50#include "bif/bif_4_1_d.h"
50 51
51#define DRM_FILE_PAGE_OFFSET (0x100000000ULL >> PAGE_SHIFT) 52#define DRM_FILE_PAGE_OFFSET (0x100000000ULL >> PAGE_SHIFT)
@@ -1171,6 +1172,23 @@ static bool amdgpu_ttm_bo_eviction_valuable(struct ttm_buffer_object *bo,
1171{ 1172{
1172 unsigned long num_pages = bo->mem.num_pages; 1173 unsigned long num_pages = bo->mem.num_pages;
1173 struct drm_mm_node *node = bo->mem.mm_node; 1174 struct drm_mm_node *node = bo->mem.mm_node;
1175 struct reservation_object_list *flist;
1176 struct dma_fence *f;
1177 int i;
1178
1179 /* If bo is a KFD BO, check if the bo belongs to the current process.
1180 * If true, then return false as any KFD process needs all its BOs to
1181 * be resident to run successfully
1182 */
1183 flist = reservation_object_get_list(bo->resv);
1184 if (flist) {
1185 for (i = 0; i < flist->shared_count; ++i) {
1186 f = rcu_dereference_protected(flist->shared[i],
1187 reservation_object_held(bo->resv));
1188 if (amdkfd_fence_check_mm(f, current->mm))
1189 return false;
1190 }
1191 }
1174 1192
1175 switch (bo->mem.mem_type) { 1193 switch (bo->mem.mem_type) {
1176 case TTM_PL_TT: 1194 case TTM_PL_TT: