Commit eb2cec55 authored by Alex Sierra's avatar Alex Sierra Committed by Alex Deucher

drm/amdkfd: add svm_bo reference for eviction fence

[why]
As part of the SVM functionality, the eviction mechanism used for
SVM_BOs is different. This mechanism uses one eviction fence per prange,
instead of one fence per kfd_process.

[how]
A svm_bo reference to amdgpu_amdkfd_fence to allow differentiate between
SVM_BO or regular BO evictions. This also include modifications to set the
reference at the fence creation call.
Signed-off-by: default avatarAlex Sierra <alex.sierra@amd.com>
Reviewed-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent ea53af8a
...@@ -75,6 +75,7 @@ struct amdgpu_amdkfd_fence { ...@@ -75,6 +75,7 @@ struct amdgpu_amdkfd_fence {
struct mm_struct *mm; struct mm_struct *mm;
spinlock_t lock; spinlock_t lock;
char timeline_name[TASK_COMM_LEN]; char timeline_name[TASK_COMM_LEN];
struct svm_range_bo *svm_bo;
}; };
struct amdgpu_kfd_dev { struct amdgpu_kfd_dev {
...@@ -148,7 +149,8 @@ int amdgpu_queue_mask_bit_to_set_resource_bit(struct amdgpu_device *adev, ...@@ -148,7 +149,8 @@ int amdgpu_queue_mask_bit_to_set_resource_bit(struct amdgpu_device *adev,
int queue_bit); int queue_bit);
struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context, struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context,
struct mm_struct *mm); struct mm_struct *mm,
struct svm_range_bo *svm_bo);
#if IS_ENABLED(CONFIG_HSA_AMD) #if IS_ENABLED(CONFIG_HSA_AMD)
bool amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm); bool amdkfd_fence_check_mm(struct dma_fence *f, struct mm_struct *mm);
struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct dma_fence *f); struct amdgpu_amdkfd_fence *to_amdgpu_amdkfd_fence(struct dma_fence *f);
......
...@@ -60,7 +60,8 @@ static atomic_t fence_seq = ATOMIC_INIT(0); ...@@ -60,7 +60,8 @@ static atomic_t fence_seq = ATOMIC_INIT(0);
*/ */
struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context, struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context,
struct mm_struct *mm) struct mm_struct *mm,
struct svm_range_bo *svm_bo)
{ {
struct amdgpu_amdkfd_fence *fence; struct amdgpu_amdkfd_fence *fence;
...@@ -73,7 +74,7 @@ struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context, ...@@ -73,7 +74,7 @@ struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context,
fence->mm = mm; fence->mm = mm;
get_task_comm(fence->timeline_name, current); get_task_comm(fence->timeline_name, current);
spin_lock_init(&fence->lock); spin_lock_init(&fence->lock);
fence->svm_bo = svm_bo;
dma_fence_init(&fence->base, &amdkfd_fence_ops, &fence->lock, dma_fence_init(&fence->base, &amdkfd_fence_ops, &fence->lock,
context, atomic_inc_return(&fence_seq)); context, atomic_inc_return(&fence_seq));
......
...@@ -972,7 +972,8 @@ static int init_kfd_vm(struct amdgpu_vm *vm, void **process_info, ...@@ -972,7 +972,8 @@ static int init_kfd_vm(struct amdgpu_vm *vm, void **process_info,
info->eviction_fence = info->eviction_fence =
amdgpu_amdkfd_fence_create(dma_fence_context_alloc(1), amdgpu_amdkfd_fence_create(dma_fence_context_alloc(1),
current->mm); current->mm,
NULL);
if (!info->eviction_fence) { if (!info->eviction_fence) {
pr_err("Failed to create eviction fence\n"); pr_err("Failed to create eviction fence\n");
ret = -ENOMEM; ret = -ENOMEM;
...@@ -2162,7 +2163,8 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence **ef) ...@@ -2162,7 +2163,8 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence **ef)
*/ */
new_fence = amdgpu_amdkfd_fence_create( new_fence = amdgpu_amdkfd_fence_create(
process_info->eviction_fence->base.context, process_info->eviction_fence->base.context,
process_info->eviction_fence->mm); process_info->eviction_fence->mm,
NULL);
if (!new_fence) { if (!new_fence) {
pr_err("Failed to create eviction fence\n"); pr_err("Failed to create eviction fence\n");
ret = -ENOMEM; ret = -ENOMEM;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment