diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/5166-drm-amdgpu-Remove-VM-based-compute-profile-switching.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/5166-drm-amdgpu-Remove-VM-based-compute-profile-switching.patch | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/5166-drm-amdgpu-Remove-VM-based-compute-profile-switching.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/5166-drm-amdgpu-Remove-VM-based-compute-profile-switching.patch new file mode 100644 index 00000000..f81cdbce --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/5166-drm-amdgpu-Remove-VM-based-compute-profile-switching.patch @@ -0,0 +1,196 @@ +From 72f96f62e18f8bec73fb67e735f5fb7ed00211c3 Mon Sep 17 00:00:00 2001 +From: Felix Kuehling <Felix.Kuehling@amd.com> +Date: Sun, 15 Jul 2018 00:57:02 -0400 +Subject: [PATCH 5166/5725] drm/amdgpu: Remove VM-based compute profile + switching + +VM-based compute profile switching was rejected upstream. It was +replaced with queue-based switching and a dedicated kfd2kgd interface. + +Change-Id: I7c319bfe2533b29d8e5199dc2fc8fb001bbffdfd +Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> + +Conflicts: + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h +Signed-off-by: Raveendra Talabattula <raveendra.talabattula@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 9 ++-- + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 53 ------------------------ + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 6 --- + 3 files changed, 5 insertions(+), 63 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +index 59e1f44..fb22f77 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +@@ -1094,6 +1094,10 @@ int amdgpu_amdkfd_gpuvm_acquire_process_vm(struct kgd_dev *kgd, + struct amdgpu_vm *avm = &drv_priv->vm; + int ret; + ++ /* Already a compute VM? */ ++ if (avm->process_info) ++ return -EINVAL; ++ + /* Convert VM into a compute VM */ + ret = amdgpu_vm_make_compute(adev, avm); + if (ret) +@@ -1115,7 +1119,7 @@ void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev, + struct amdkfd_process_info *process_info = vm->process_info; + struct amdgpu_bo *pd = vm->root.base.bo; + +- if (vm->vm_context != AMDGPU_VM_CONTEXT_COMPUTE) ++ if (!process_info) + return; + + /* Release eviction fence from PD */ +@@ -1123,9 +1127,6 @@ void amdgpu_amdkfd_gpuvm_destroy_cb(struct amdgpu_device *adev, + amdgpu_bo_fence(pd, NULL, false); + amdgpu_bo_unreserve(pd); + +- if (!process_info) +- return; +- + /* Update process info */ + mutex_lock(&process_info->lock); + process_info->n_vms--; +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +index 5de844d..deaef9f 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +@@ -2561,24 +2561,6 @@ void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint32_t vm_size, + adev->vm_manager.fragment_size); + } + +-static void amdgpu_inc_compute_vms(struct amdgpu_device *adev) +-{ +- /* Temporary use only the first VM manager */ +- unsigned int vmhub = 0; /*ring->funcs->vmhub;*/ +- struct amdgpu_vmid_mgr *id_mgr = &adev->vm_manager.id_mgr[vmhub]; +- +- mutex_lock(&id_mgr->lock); +- if ((adev->vm_manager.n_compute_vms++ == 0) && +- (!amdgpu_sriov_vf(adev))) { +- /* First Compute VM: enable compute power profile */ +- if (adev->powerplay.pp_funcs && +- adev->powerplay.pp_funcs->switch_power_profile) +- amdgpu_dpm_switch_power_profile(adev, +- PP_SMC_POWER_PROFILE_COMPUTE, true); +- } +- mutex_unlock(&id_mgr->lock); +-} +- + /** + * amdgpu_vm_init - initialize a vm instance + * +@@ -2691,11 +2673,6 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm, + INIT_KFIFO(vm->faults); + vm->fault_credit = 16; + +- vm->vm_context = vm_context; +- +- if (vm_context == AMDGPU_VM_CONTEXT_COMPUTE) +- amdgpu_inc_compute_vms(adev); +- + return 0; + + error_unreserve: +@@ -2722,7 +2699,6 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm, + * page tables allocated yet. + * + * Changes the following VM parameters: +- * - vm_context + * - use_cpu_for_update + * - pte_supports_ats + * - pasid (old PASID is released, because compute manages its own PASIDs) +@@ -2744,13 +2720,6 @@ int amdgpu_vm_make_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm) + return r; + + /* Sanity checks */ +- if (vm->vm_context == AMDGPU_VM_CONTEXT_COMPUTE) { +- /* Can happen if ioctl is interrupted by a signal after +- * this function already completed. Just return success. +- */ +- r = 0; +- goto error; +- } + if (!RB_EMPTY_ROOT(&vm->va.rb_root) || vm->root.entries) { + r = -EINVAL; + goto error; +@@ -2768,7 +2737,6 @@ int amdgpu_vm_make_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm) + } + + /* Update VM state */ +- vm->vm_context = AMDGPU_VM_CONTEXT_COMPUTE; + vm->use_cpu_for_update = !!(adev->vm_manager.vm_update_mode & + AMDGPU_VM_USE_CPU_FOR_COMPUTE); + vm->pte_support_ats = pte_support_ats; +@@ -2787,8 +2755,6 @@ int amdgpu_vm_make_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm) + vm->pasid = 0; + } + +- /* Count the new compute VM */ +- amdgpu_inc_compute_vms(adev); + /* Free the shadow bo for compute VM */ + amdgpu_bo_unref(&vm->root.base.bo->shadow); + +@@ -2858,24 +2824,6 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm) + spin_unlock_irqrestore(&adev->vm_manager.pasid_lock, flags); + } + +- if (vm->vm_context == AMDGPU_VM_CONTEXT_COMPUTE) { +- struct amdgpu_vmid_mgr *id_mgr = +- &adev->vm_manager.id_mgr[AMDGPU_GFXHUB]; +- mutex_lock(&id_mgr->lock); +- +- WARN(adev->vm_manager.n_compute_vms == 0, "Unbalanced number of Compute VMs"); +- +- if ((--adev->vm_manager.n_compute_vms == 0) && +- (!amdgpu_sriov_vf(adev))) { +- /* Last KFD VM: enable graphics power profile */ +- if (adev->powerplay.pp_funcs && +- adev->powerplay.pp_funcs->switch_power_profile) +- amdgpu_dpm_switch_power_profile(adev, +- PP_SMC_POWER_PROFILE_COMPUTE, false); +- } +- mutex_unlock(&id_mgr->lock); +- } +- + drm_sched_entity_fini(vm->entity.sched, &vm->entity); + + if (!RB_EMPTY_ROOT(&vm->va.rb_root)) { +@@ -2986,7 +2934,6 @@ void amdgpu_vm_manager_init(struct amdgpu_device *adev) + + idr_init(&adev->vm_manager.pasid_idr); + spin_lock_init(&adev->vm_manager.pasid_lock); +- adev->vm_manager.n_compute_vms = 0; + } + + /** +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h +index b96bfed..3461300 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h +@@ -236,9 +236,6 @@ struct amdgpu_vm { + /* Limit non-retry fault storms */ + unsigned int fault_credit; + +- /* Whether this is a Compute or GFX Context */ +- int vm_context; +- + /* Points to the KFD process VM info */ + struct amdkfd_process_info *process_info; + +@@ -288,9 +285,6 @@ struct amdgpu_vm_manager { + */ + struct idr pasid_idr; + spinlock_t pasid_lock; +- +- /* Number of Compute VMs, used for detecting Compute activity */ +- unsigned n_compute_vms; + }; + + #define amdgpu_vm_copy_pte(adev, ib, pe, src, count) ((adev)->vm_manager.vm_pte_funcs->copy_pte((ib), (pe), (src), (count))) +-- +2.7.4 + |