]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
amdkfd: record kfd context id in amdkfd_fence
authorZhu Lingshan <lingshan.zhu@amd.com>
Wed, 6 Aug 2025 13:37:26 +0000 (21:37 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 8 Dec 2025 19:13:23 +0000 (14:13 -0500)
This commit records the context id of the
cooresponding kfd process in amdkfd_fence

Signed-off-by: Zhu Lingshan <lingshan.zhu@amd.com>
Reviewed-by: Felix Kuehling <felix.kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.c
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
drivers/gpu/drm/amd/amdkfd/kfd_svm.c

index 2fa5f1925f5a38a031bdf7e9180799d6b8ff5ebb..ec4a70b82ac52ea0d984d18dd0e77b5db6cca672 100644 (file)
@@ -98,6 +98,7 @@ struct amdgpu_amdkfd_fence {
        spinlock_t lock;
        char timeline_name[TASK_COMM_LEN];
        struct svm_range_bo *svm_bo;
+       uint16_t context_id;
 };
 
 struct amdgpu_kfd_dev {
@@ -190,7 +191,8 @@ int amdgpu_queue_mask_bit_to_set_resource_bit(struct amdgpu_device *adev,
 
 struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context,
                                struct mm_struct *mm,
-                               struct svm_range_bo *svm_bo);
+                               struct svm_range_bo *svm_bo,
+                               u16 context_id);
 
 int amdgpu_amdkfd_drm_client_create(struct amdgpu_device *adev);
 #if defined(CONFIG_DEBUG_FS)
index 1ef758ac5076ef9a56ba5191ac38964897564912..4119d0a9235eaa3adeeb270585a5c8bed17af863 100644 (file)
@@ -62,7 +62,8 @@ static atomic_t fence_seq = ATOMIC_INIT(0);
 
 struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context,
                                struct mm_struct *mm,
-                               struct svm_range_bo *svm_bo)
+                               struct svm_range_bo *svm_bo,
+                               u16 context_id)
 {
        struct amdgpu_amdkfd_fence *fence;
 
@@ -76,6 +77,7 @@ struct amdgpu_amdkfd_fence *amdgpu_amdkfd_fence_create(u64 context,
        get_task_comm(fence->timeline_name, current);
        spin_lock_init(&fence->lock);
        fence->svm_bo = svm_bo;
+       fence->context_id = context_id;
        dma_fence_init(&fence->base, &amdkfd_fence_ops, &fence->lock,
                   context, atomic_inc_return(&fence_seq));
 
index 9f04e449093a3a0a610f5910edd530118282b52d..6585b8b9e7090cf6ec6b7cb4633b00cde2d14974 100644 (file)
@@ -1416,7 +1416,7 @@ static int init_kfd_vm(struct amdgpu_vm *vm, void **process_info,
                info->eviction_fence =
                        amdgpu_amdkfd_fence_create(dma_fence_context_alloc(1),
                                                   current->mm,
-                                                  NULL);
+                                                  NULL, process->context_id);
                if (!info->eviction_fence) {
                        pr_err("Failed to create eviction fence\n");
                        ret = -ENOMEM;
@@ -3070,7 +3070,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence __rcu *
                        amdgpu_amdkfd_fence_create(
                                process_info->eviction_fence->base.context,
                                process_info->eviction_fence->mm,
-                               NULL);
+                               NULL, process_info->context_id);
 
                if (!new_fence) {
                        pr_err("Failed to create eviction fence\n");
index 903064610c23cb1607c18b0c8c5572df9297ab32..657f043850524ebcb9cb01fd415e400fedc31caf 100644 (file)
@@ -585,7 +585,7 @@ svm_range_vram_node_new(struct kfd_node *node, struct svm_range *prange,
        svm_bo->eviction_fence =
                amdgpu_amdkfd_fence_create(dma_fence_context_alloc(1),
                                           mm,
-                                          svm_bo);
+                                          svm_bo, p->context_id);
        mmput(mm);
        INIT_WORK(&svm_bo->eviction_work, svm_range_evict_svm_bo_worker);
        svm_bo->evicting = 0;