diff options
Diffstat (limited to 'meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0919-drm-amdgpu-rework-amdgpu_cs_find_mapping.patch')
-rw-r--r-- | meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0919-drm-amdgpu-rework-amdgpu_cs_find_mapping.patch | 171 |
1 files changed, 0 insertions, 171 deletions
diff --git a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0919-drm-amdgpu-rework-amdgpu_cs_find_mapping.patch b/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0919-drm-amdgpu-rework-amdgpu_cs_find_mapping.patch deleted file mode 100644 index 38d7481f..00000000 --- a/meta-v1000/recipes-kernel/linux/linux-yocto-4.14.71/0919-drm-amdgpu-rework-amdgpu_cs_find_mapping.patch +++ /dev/null @@ -1,171 +0,0 @@ -From 2f4f497c39529ae8b3737ccb650d22e7663c2302 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> -Date: Wed, 6 Sep 2017 16:55:16 +0200 -Subject: [PATCH 0919/4131] drm/amdgpu: rework amdgpu_cs_find_mapping -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Use the VM instead of the BO list to find the BO for a virtual address. - -This fixes UVD/VCE in physical mode with VM local BOs. - -Signed-off-by: Christian König <christian.koenig@amd.com> -Acked-by: Leo Liu <leo.liu@amd.com> - - Conflicts: - drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c - -Change-Id: I009dc1b89b32962f2fcdc4c9c6a3b93fc85a584c ---- - drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 42 +++++++----------------------- - drivers/gpu/drm/amd/amdgpu/amdgpu_object.h | 1 + - drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 17 ++++++++++++ - drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 2 ++ - 4 files changed, 30 insertions(+), 32 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -index b6e536a..1794324 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c -@@ -1492,46 +1492,24 @@ int amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser, - uint64_t addr, struct amdgpu_bo **bo, - struct amdgpu_bo_va_mapping **map) - { -+ struct amdgpu_fpriv *fpriv = parser->filp->driver_priv; -+ struct amdgpu_vm *vm = &fpriv->vm; - struct amdgpu_bo_va_mapping *mapping; -- unsigned i; - int r; - -- if (!parser->bo_list) -- return 0; -- - addr /= AMDGPU_GPU_PAGE_SIZE; - -- for (i = 0; i < parser->bo_list->num_entries; i++) { -- struct amdgpu_bo_list_entry *lobj; -- -- lobj = &parser->bo_list->array[i]; -- if (!lobj->bo_va || amdgpu_ttm_adev(lobj->bo_va->base.bo->tbo.bdev) != parser->adev) -- continue; -- -- list_for_each_entry(mapping, &lobj->bo_va->valids, list) { -- if (mapping->start > addr || -- addr > mapping->last) -- continue; -- -- *bo = lobj->bo_va->base.bo; -- *map = mapping; -- goto found; -- } -- -- list_for_each_entry(mapping, &lobj->bo_va->invalids, list) { -- if (mapping->start > addr || -- addr > mapping->last) -- continue; -+ mapping = amdgpu_vm_bo_lookup_mapping(vm, addr); -+ if (!mapping || !mapping->bo_va || !mapping->bo_va->base.bo) -+ return -EINVAL; - -- *bo = lobj->bo_va->base.bo; -- *map = mapping; -- goto found; -- } -- } -+ *bo = mapping->bo_va->base.bo; -+ *map = mapping; - -- return -EINVAL; -+ /* Double check that the BO is reserved by this CS */ -+ if (READ_ONCE((*bo)->tbo.resv->lock.ctx) != &parser->ticket) -+ return -EINVAL; - --found: - r = amdgpu_ttm_bind(&(*bo)->tbo, &(*bo)->tbo.mem); - if (unlikely(r)) - return r; -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h -index 62132ca..6d27585 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h -@@ -35,6 +35,7 @@ - - /* bo virtual addresses in a vm */ - struct amdgpu_bo_va_mapping { -+ struct amdgpu_bo_va *bo_va; - struct list_head list; - struct rb_node rb; - uint64_t start; -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c -index efa8136..0b62a33 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c -@@ -2103,6 +2103,7 @@ static void amdgpu_vm_bo_insert_map(struct amdgpu_device *adev, - struct amdgpu_vm *vm = bo_va->base.vm; - struct amdgpu_bo *bo = bo_va->base.bo; - -+ mapping->bo_va = bo_va; - list_add(&mapping->list, &bo_va->invalids); - amdgpu_vm_it_insert(mapping, &vm->va); - -@@ -2280,6 +2281,7 @@ int amdgpu_vm_bo_unmap(struct amdgpu_device *adev, - - list_del(&mapping->list); - amdgpu_vm_it_remove(mapping, &vm->va); -+ mapping->bo_va = NULL; - trace_amdgpu_vm_bo_unmap(bo_va, mapping); - - if (valid) -@@ -2365,6 +2367,7 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev, - if (tmp->last > eaddr) - tmp->last = eaddr; - -+ tmp->bo_va = NULL; - list_add(&tmp->list, &vm->freed); - trace_amdgpu_vm_bo_unmap(NULL, tmp); - } -@@ -2391,6 +2394,19 @@ int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev, - } - - /** -+ * amdgpu_vm_bo_lookup_mapping - find mapping by address -+ * -+ * @vm: the requested VM -+ * -+ * Find a mapping by it's address. -+ */ -+struct amdgpu_bo_va_mapping *amdgpu_vm_bo_lookup_mapping(struct amdgpu_vm *vm, -+ uint64_t addr) -+{ -+ return amdgpu_vm_it_iter_first(&vm->va, addr, addr); -+} -+ -+/** - * amdgpu_vm_bo_rmv - remove a bo to a specific vm - * - * @adev: amdgpu_device pointer -@@ -2415,6 +2431,7 @@ void amdgpu_vm_bo_rmv(struct amdgpu_device *adev, - list_for_each_entry_safe(mapping, next, &bo_va->valids, list) { - list_del(&mapping->list); - amdgpu_vm_it_remove(mapping, &vm->va); -+ mapping->bo_va = NULL; - trace_amdgpu_vm_bo_unmap(bo_va, mapping); - list_add(&mapping->list, &vm->freed); - } -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h -index 03fdf9b..862b846 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h -@@ -276,6 +276,8 @@ int amdgpu_vm_bo_unmap(struct amdgpu_device *adev, - int amdgpu_vm_bo_clear_mappings(struct amdgpu_device *adev, - struct amdgpu_vm *vm, - uint64_t saddr, uint64_t size); -+struct amdgpu_bo_va_mapping *amdgpu_vm_bo_lookup_mapping(struct amdgpu_vm *vm, -+ uint64_t addr); - void amdgpu_vm_bo_rmv(struct amdgpu_device *adev, - struct amdgpu_bo_va *bo_va); - void amdgpu_vm_set_fragment_size(struct amdgpu_device *adev, --- -2.7.4 - |