diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1804-drm-amdgpu-move-amdgpu_cs_sysvm_access_required-into.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1804-drm-amdgpu-move-amdgpu_cs_sysvm_access_required-into.patch | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1804-drm-amdgpu-move-amdgpu_cs_sysvm_access_required-into.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1804-drm-amdgpu-move-amdgpu_cs_sysvm_access_required-into.patch new file mode 100644 index 00000000..52395b01 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1804-drm-amdgpu-move-amdgpu_cs_sysvm_access_required-into.patch @@ -0,0 +1,154 @@ +From 71520c3535ad9866949ea9a1c789dd9963790da6 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:15:28 +0200 +Subject: [PATCH 1804/4131] drm/amdgpu: move amdgpu_cs_sysvm_access_required + into find_mapping +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When we need to find the mapping we need sysvm access anyway. + +Signed-off-by: Christian König <christian.koenig@amd.com> +Acked-by: Leo Liu <leo.liu@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu.h | 8 ++--- + drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 64 ++++++++++++---------------------- + 2 files changed, 26 insertions(+), 46 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +index 29a93ae..5bf1051 100755 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +@@ -184,6 +184,7 @@ struct amdgpu_irq_src; + struct amdgpu_fpriv; + struct kfd_vm_fault_info; + struct amdgpu_mn; ++struct amdgpu_bo_va_mapping; + + enum amdgpu_cp_irq { + AMDGPU_CP_IRQ_GFX_EOP = 0, +@@ -1979,10 +1980,9 @@ static inline int amdgpu_acpi_init(struct amdgpu_device *adev) { return 0; } + static inline void amdgpu_acpi_fini(struct amdgpu_device *adev) { } + #endif + +-struct amdgpu_bo_va_mapping * +-amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser, +- uint64_t addr, struct amdgpu_bo **bo); +-int amdgpu_cs_sysvm_access_required(struct amdgpu_cs_parser *parser); ++int amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser, ++ uint64_t addr, struct amdgpu_bo **bo, ++ struct amdgpu_bo_va_mapping **mapping); + + #if defined(CONFIG_DRM_AMD_DC) + int amdgpu_dm_display_resume(struct amdgpu_device *adev ); +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +index 27e607c..447a423 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +@@ -967,11 +967,11 @@ static int amdgpu_cs_ib_fill(struct amdgpu_device *adev, + uint64_t offset; + uint8_t *kptr; + +- m = amdgpu_cs_find_mapping(parser, chunk_ib->va_start, +- &aobj); +- if (!aobj) { ++ r = amdgpu_cs_find_mapping(parser, chunk_ib->va_start, ++ &aobj, &m); ++ if (r) { + DRM_ERROR("IB va_start is invalid\n"); +- return -EINVAL; ++ return r; + } + + if ((chunk_ib->va_start + chunk_ib->ib_bytes) > +@@ -1528,15 +1528,16 @@ int amdgpu_cs_wait_fences_ioctl(struct drm_device *dev, void *data, + * virtual memory address. Returns allocation structure when found, NULL + * otherwise. + */ +-struct amdgpu_bo_va_mapping * +-amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser, +- uint64_t addr, struct amdgpu_bo **bo) ++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_bo_va_mapping *mapping; + unsigned i; ++ int r; + + if (!parser->bo_list) +- return NULL; ++ return 0; + + addr /= AMDGPU_GPU_PAGE_SIZE; + +@@ -1553,7 +1554,8 @@ amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser, + continue; + + *bo = lobj->bo_va->base.bo; +- return mapping; ++ *map = mapping; ++ goto found; + } + + list_for_each_entry(mapping, &lobj->bo_va->invalids, list) { +@@ -1562,44 +1564,22 @@ amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser, + continue; + + *bo = lobj->bo_va->base.bo; +- return mapping; ++ *map = mapping; ++ goto found; + } + } + +- return NULL; +-} ++ return -EINVAL; + +-/** +- * amdgpu_cs_sysvm_access_required - make BOs accessible by the system VM +- * +- * @parser: command submission parser context +- * +- * Helper for UVD/VCE VM emulation, make sure BOs are accessible by the system VM. +- */ +-int amdgpu_cs_sysvm_access_required(struct amdgpu_cs_parser *parser) +-{ +- unsigned i; +- int r; ++found: ++ r = amdgpu_ttm_bind(&(*bo)->tbo, &(*bo)->tbo.mem); ++ if (unlikely(r)) ++ return r; + +- if (!parser->bo_list) ++ if ((*bo)->flags & AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS) + return 0; + +- for (i = 0; i < parser->bo_list->num_entries; i++) { +- struct amdgpu_bo *bo = parser->bo_list->array[i].robj; +- +- r = amdgpu_ttm_bind(&bo->tbo, &bo->tbo.mem); +- if (unlikely(r)) +- return r; +- +- if (bo->flags & AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS) +- continue; +- +- bo->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS; +- amdgpu_ttm_placement_from_domain(bo, bo->allowed_domains); +- r = ttm_bo_validate(&bo->tbo, &bo->placement, false, false); +- if (unlikely(r)) +- return r; +- } +- +- return 0; ++ (*bo)->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS; ++ amdgpu_ttm_placement_from_domain(*bo, (*bo)->allowed_domains); ++ return ttm_bo_validate(&(*bo)->tbo, &(*bo)->placement, false, false); + } +-- +2.7.4 + |