Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b97dfa27 authored by shaoyunl's avatar shaoyunl Committed by Oded Gabbay
Browse files

drm/amdgpu: save vm fault information for amdkfd



amdgpu save the vm fault related information for KFD usage and keep the
copy until KFD read it.

Signed-off-by: default avatarshaoyun liu <shaoyun.liu@amd.com>
Signed-off-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Acked-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarOded Gabbay <oded.gabbay@gmail.com>
parent 101fee63
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -183,6 +183,9 @@ int amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(struct kgd_dev *kgd,
int amdgpu_amdkfd_gpuvm_restore_process_bos(void *process_info,
					    struct dma_fence **ef);

int amdgpu_amdkfd_gpuvm_get_vm_fault_info(struct kgd_dev *kgd,
					      struct kfd_vm_fault_info *info);

void amdgpu_amdkfd_gpuvm_init_mem_limits(void);
void amdgpu_amdkfd_unreserve_system_memory_limit(struct amdgpu_bo *bo);

+1 −0
Original line number Diff line number Diff line
@@ -216,6 +216,7 @@ static const struct kfd2kgd_calls kfd2kgd = {
	.invalidate_tlbs = invalidate_tlbs,
	.invalidate_tlbs_vmid = invalidate_tlbs_vmid,
	.submit_ib = amdgpu_amdkfd_submit_ib,
	.get_vm_fault_info = amdgpu_amdkfd_gpuvm_get_vm_fault_info
};

struct kfd2kgd_calls *amdgpu_amdkfd_gfx_7_get_functions(void)
+1 −0
Original line number Diff line number Diff line
@@ -176,6 +176,7 @@ static const struct kfd2kgd_calls kfd2kgd = {
	.invalidate_tlbs = invalidate_tlbs,
	.invalidate_tlbs_vmid = invalidate_tlbs_vmid,
	.submit_ib = amdgpu_amdkfd_submit_ib,
	.get_vm_fault_info = amdgpu_amdkfd_gpuvm_get_vm_fault_info
};

struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void)
+14 −0
Original line number Diff line number Diff line
@@ -1621,6 +1621,20 @@ int amdgpu_amdkfd_gpuvm_map_gtt_bo_to_kernel(struct kgd_dev *kgd,
	return ret;
}

int amdgpu_amdkfd_gpuvm_get_vm_fault_info(struct kgd_dev *kgd,
					      struct kfd_vm_fault_info *mem)
{
	struct amdgpu_device *adev;

	adev = (struct amdgpu_device *)kgd;
	if (atomic_read(&adev->gmc.vm_fault_info_updated) == 1) {
		*mem = *adev->gmc.vm_fault_info;
		mb();
		atomic_set(&adev->gmc.vm_fault_info_updated, 0);
	}
	return 0;
}

/* Evict a userptr BO by stopping the queues if necessary
 *
 * Runs in MMU notifier, may be in RECLAIM_FS context. This means it
+2 −0
Original line number Diff line number Diff line
@@ -105,6 +105,8 @@ struct amdgpu_gmc {
	/* protects concurrent invalidation */
	spinlock_t		invalidate_lock;
	bool			translate_further;
	struct kfd_vm_fault_info *vm_fault_info;
	atomic_t		vm_fault_info_updated;

	const struct amdgpu_gmc_funcs	*gmc_funcs;
};
Loading