diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2104-drm-amdkfd-Re-locate-switch-power-profile-to-match-k.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2104-drm-amdkfd-Re-locate-switch-power-profile-to-match-k.patch | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2104-drm-amdkfd-Re-locate-switch-power-profile-to-match-k.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2104-drm-amdkfd-Re-locate-switch-power-profile-to-match-k.patch new file mode 100644 index 00000000..f1a66ed9 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2104-drm-amdkfd-Re-locate-switch-power-profile-to-match-k.patch @@ -0,0 +1,103 @@ +From 4240c679c7bed2cef646ce524ac931dd73978d90 Mon Sep 17 00:00:00 2001 +From: "Le.Ma" <Le.Ma@amd.com> +Date: Tue, 7 Nov 2017 10:52:37 +0800 +Subject: [PATCH 2104/4131] drm/amdkfd: Re-locate switch power profile to match + kfd branch + +Change-Id: I79a59c15a4ecfdae92202da0b2b216efa471a529 +Signed-off-by: Le.Ma <Le.Ma@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 56 +++++++++++++++++----------------- + 1 file changed, 28 insertions(+), 28 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +index bfb2d98..bebf575 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +@@ -2720,6 +2720,22 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm, + goto error_free_root; + } + ++ if (pasid) { ++ unsigned long flags; ++ ++ spin_lock_irqsave(&adev->vm_manager.pasid_lock, flags); ++ r = idr_alloc(&adev->vm_manager.pasid_idr, vm, pasid, pasid + 1, ++ GFP_ATOMIC); ++ spin_unlock_irqrestore(&adev->vm_manager.pasid_lock, flags); ++ if (r < 0) ++ goto error_free_root; ++ ++ vm->pasid = pasid; ++ } ++ ++ INIT_KFIFO(vm->faults); ++ vm->fault_credit = 16; ++ + vm->vm_context = vm_context; + if (vm_context == AMDGPU_VM_CONTEXT_COMPUTE) { + struct amdgpu_vm_id_manager *id_mgr = +@@ -2737,22 +2753,6 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm, + mutex_unlock(&id_mgr->lock); + } + +- if (pasid) { +- unsigned long flags; +- +- spin_lock_irqsave(&adev->vm_manager.pasid_lock, flags); +- r = idr_alloc(&adev->vm_manager.pasid_idr, vm, pasid, pasid + 1, +- GFP_ATOMIC); +- spin_unlock_irqrestore(&adev->vm_manager.pasid_lock, flags); +- if (r < 0) +- goto error_free_root; +- +- vm->pasid = pasid; +- } +- +- INIT_KFIFO(vm->faults); +- vm->fault_credit = 16; +- + return 0; + + error_free_root: +@@ -2812,6 +2812,18 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm) + u64 fault; + int i, r; + ++ /* Clear pending page faults from IH when the VM is destroyed */ ++ while (kfifo_get(&vm->faults, &fault)) ++ amdgpu_ih_clear_fault(adev, fault); ++ ++ if (vm->pasid) { ++ unsigned long flags; ++ ++ spin_lock_irqsave(&adev->vm_manager.pasid_lock, flags); ++ idr_remove(&adev->vm_manager.pasid_idr, vm->pasid); ++ spin_unlock_irqrestore(&adev->vm_manager.pasid_lock, flags); ++ } ++ + if (vm->vm_context == AMDGPU_VM_CONTEXT_COMPUTE) { + struct amdgpu_vm_id_manager *id_mgr = + &adev->vm_manager.id_mgr[AMDGPU_GFXHUB]; +@@ -2830,18 +2842,6 @@ void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm) + mutex_unlock(&id_mgr->lock); + } + +- /* Clear pending page faults from IH when the VM is destroyed */ +- while (kfifo_get(&vm->faults, &fault)) +- amdgpu_ih_clear_fault(adev, fault); +- +- if (vm->pasid) { +- unsigned long flags; +- +- spin_lock_irqsave(&adev->vm_manager.pasid_lock, flags); +- idr_remove(&adev->vm_manager.pasid_idr, vm->pasid); +- spin_unlock_irqrestore(&adev->vm_manager.pasid_lock, flags); +- } +- + amd_sched_entity_fini(vm->entity.sched, &vm->entity); + + if (!RB_EMPTY_ROOT(&vm->va.rb_root)) { +-- +2.7.4 + |