diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2232-drm-ttm-add-operation-ctx-to-ttm_bo_validate-v2.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2232-drm-ttm-add-operation-ctx-to-ttm_bo_validate-v2.patch | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2232-drm-ttm-add-operation-ctx-to-ttm_bo_validate-v2.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2232-drm-ttm-add-operation-ctx-to-ttm_bo_validate-v2.patch new file mode 100644 index 00000000..34a7d8b8 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2232-drm-ttm-add-operation-ctx-to-ttm_bo_validate-v2.patch @@ -0,0 +1,277 @@ +From 9a2a168c79863b8041f4faad1f48377ba5c9b7ae Mon Sep 17 00:00:00 2001 +From: Christian Koenig <christian.koenig@amd.com> +Date: Wed, 12 Apr 2017 14:24:39 +0200 +Subject: [PATCH 2232/4131] drm/ttm: add operation ctx to ttm_bo_validate v2 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Give moving a BO into place an operation context to work with. + +v2: rebased + +Signed-off-by: Christian König <christian.koenig@amd.com> +Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> +Reviewed-by: Chunming Zhou <david1.zhou@amd.com> +Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de> +Tested-by: Michel Dänzer <michel.daenzer@amd.com> +Acked-by: Felix Kuehling <Felix.Kuehling@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 14 ++++++++------ + drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 3 ++- + drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 12 ++++++++---- + drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 6 ++++-- + drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 3 ++- + drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 3 ++- + 6 files changed, 26 insertions(+), 15 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +index eec3fe2..050e62f 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +@@ -353,6 +353,7 @@ static int amdgpu_cs_bo_validate(struct amdgpu_cs_parser *p, + struct amdgpu_bo *bo) + { + struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); ++ struct ttm_operation_ctx ctx = { true, false }; + u64 initial_bytes_moved, bytes_moved; + uint32_t domain; + int r; +@@ -384,7 +385,7 @@ static int amdgpu_cs_bo_validate(struct amdgpu_cs_parser *p, + retry: + amdgpu_ttm_placement_from_domain(bo, domain); + initial_bytes_moved = atomic64_read(&adev->num_bytes_moved); +- r = ttm_bo_validate(&bo->tbo, &bo->placement, true, false); ++ r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); + bytes_moved = atomic64_read(&adev->num_bytes_moved) - + initial_bytes_moved; + p->bytes_moved += bytes_moved; +@@ -406,6 +407,7 @@ static bool amdgpu_cs_try_evict(struct amdgpu_cs_parser *p, + struct amdgpu_bo *validated) + { + uint32_t domain = validated->allowed_domains; ++ struct ttm_operation_ctx ctx = { true, false }; + int r; + + if (!p->evictable) +@@ -447,7 +449,7 @@ static bool amdgpu_cs_try_evict(struct amdgpu_cs_parser *p, + bo->tbo.mem.mem_type == TTM_PL_VRAM && + bo->tbo.mem.start < adev->mc.visible_vram_size >> PAGE_SHIFT; + initial_bytes_moved = atomic64_read(&adev->num_bytes_moved); +- r = ttm_bo_validate(&bo->tbo, &bo->placement, true, false); ++ r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); + bytes_moved = atomic64_read(&adev->num_bytes_moved) - + initial_bytes_moved; + p->bytes_moved += bytes_moved; +@@ -486,6 +488,7 @@ static int amdgpu_cs_validate(void *param, struct amdgpu_bo *bo) + static int amdgpu_cs_list_validate(struct amdgpu_cs_parser *p, + struct list_head *validated) + { ++ struct ttm_operation_ctx ctx = { true, false }; + struct amdgpu_bo_list_entry *lobj; + int r; + +@@ -503,8 +506,7 @@ static int amdgpu_cs_list_validate(struct amdgpu_cs_parser *p, + lobj->user_pages) { + amdgpu_ttm_placement_from_domain(bo, + AMDGPU_GEM_DOMAIN_CPU); +- r = ttm_bo_validate(&bo->tbo, &bo->placement, true, +- false); ++ r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); + if (r) + return r; + amdgpu_ttm_tt_set_user_pages(bo->tbo.ttm, +@@ -1622,6 +1624,7 @@ int amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser, + struct amdgpu_bo_va_mapping **map) + { + struct amdgpu_fpriv *fpriv = parser->filp->driver_priv; ++ struct ttm_operation_ctx ctx = { false, false }; + struct amdgpu_vm *vm = &fpriv->vm; + struct amdgpu_bo_va_mapping *mapping; + int r; +@@ -1642,8 +1645,7 @@ int amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser, + if (!((*bo)->flags & AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS)) { + (*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); ++ r = ttm_bo_validate(&(*bo)->tbo, &(*bo)->placement, &ctx); + if (r) + return r; + } +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +index 703578d..d85a6eb 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +@@ -397,6 +397,7 @@ int amdgpu_gem_find_bo_by_cpu_mapping_ioctl(struct drm_device *dev, void *data, + int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void *data, + struct drm_file *filp) + { ++ struct ttm_operation_ctx ctx = { true, false }; + struct amdgpu_device *adev = dev->dev_private; + struct drm_amdgpu_gem_userptr *args = data; + struct drm_gem_object *gobj; +@@ -450,7 +451,7 @@ int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void *data, + goto free_pages; + + amdgpu_ttm_placement_from_domain(bo, AMDGPU_GEM_DOMAIN_GTT); +- r = ttm_bo_validate(&bo->tbo, &bo->placement, true, false); ++ r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); + amdgpu_bo_unreserve(bo); + if (r) + goto free_pages; +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +index 2f7ffc0..fd5e911 100755 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +@@ -593,6 +593,7 @@ int amdgpu_bo_backup_to_shadow(struct amdgpu_device *adev, + + int amdgpu_bo_validate(struct amdgpu_bo *bo) + { ++ struct ttm_operation_ctx ctx = { false, false }; + uint32_t domain; + int r; + +@@ -603,7 +604,7 @@ int amdgpu_bo_validate(struct amdgpu_bo *bo) + + retry: + amdgpu_ttm_placement_from_domain(bo, domain); +- r = ttm_bo_validate(&bo->tbo, &bo->placement, false, false); ++ r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); + if (unlikely(r == -ENOMEM) && domain != bo->allowed_domains) { + domain = bo->allowed_domains; + goto retry; +@@ -714,6 +715,7 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain, + u64 *gpu_addr) + { + struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); ++ struct ttm_operation_ctx ctx = { false, false }; + int r, i; + + if (amdgpu_ttm_tt_get_usermm(bo->tbo.ttm)) +@@ -768,7 +770,7 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain, + bo->placements[i].flags |= TTM_PL_FLAG_NO_EVICT; + } + +- r = ttm_bo_validate(&bo->tbo, &bo->placement, false, false); ++ r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); + if (unlikely(r)) { + dev_err(adev->dev, "%p pin failed\n", bo); + goto error; +@@ -804,6 +806,7 @@ int amdgpu_bo_pin(struct amdgpu_bo *bo, u32 domain, u64 *gpu_addr) + int amdgpu_bo_unpin(struct amdgpu_bo *bo) + { + struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev); ++ struct ttm_operation_ctx ctx = { false, false }; + int r, i; + + if (!bo->pin_count) { +@@ -817,7 +820,7 @@ int amdgpu_bo_unpin(struct amdgpu_bo *bo) + bo->placements[i].lpfn = 0; + bo->placements[i].flags &= ~TTM_PL_FLAG_NO_EVICT; + } +- r = ttm_bo_validate(&bo->tbo, &bo->placement, false, false); ++ r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); + if (unlikely(r)) { + dev_err(adev->dev, "%p validate failed for unpin\n", bo); + goto error; +@@ -988,6 +991,7 @@ void amdgpu_bo_move_notify(struct ttm_buffer_object *bo, + int amdgpu_bo_fault_reserve_notify(struct ttm_buffer_object *bo) + { + struct amdgpu_device *adev = amdgpu_ttm_adev(bo->bdev); ++ struct ttm_operation_ctx ctx = { false, false }; + struct amdgpu_bo *abo; + unsigned long offset, size; + int r; +@@ -1021,7 +1025,7 @@ int amdgpu_bo_fault_reserve_notify(struct ttm_buffer_object *bo) + abo->placement.num_busy_placement = 1; + abo->placement.busy_placement = &abo->placements[1]; + +- r = ttm_bo_validate(bo, &abo->placement, false, false); ++ r = ttm_bo_validate(bo, &abo->placement, &ctx); + if (unlikely(r != 0)) + return r; + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c +index af7e83d..67f1e97 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c +@@ -411,6 +411,7 @@ static u64 amdgpu_uvd_get_addr_from_ctx(struct amdgpu_uvd_cs_ctx *ctx) + */ + static int amdgpu_uvd_cs_pass1(struct amdgpu_uvd_cs_ctx *ctx) + { ++ struct ttm_operation_ctx tctx = { false, false }; + struct amdgpu_bo_va_mapping *mapping; + struct amdgpu_bo *bo; + uint32_t cmd; +@@ -433,7 +434,7 @@ static int amdgpu_uvd_cs_pass1(struct amdgpu_uvd_cs_ctx *ctx) + } + amdgpu_uvd_force_into_uvd_segment(bo); + +- r = ttm_bo_validate(&bo->tbo, &bo->placement, false, false); ++ r = ttm_bo_validate(&bo->tbo, &bo->placement, &tctx); + } + + return r; +@@ -952,6 +953,7 @@ int amdgpu_uvd_ring_parse_cs(struct amdgpu_cs_parser *parser, uint32_t ib_idx) + static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo, + bool direct, struct dma_fence **fence) + { ++ struct ttm_operation_ctx ctx = { true, false }; + struct ttm_validate_buffer tv; + struct ww_acquire_ctx ticket; + struct list_head head; +@@ -978,7 +980,7 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo, + amdgpu_uvd_force_into_uvd_segment(bo); + } + +- r = ttm_bo_validate(&bo->tbo, &bo->placement, true, false); ++ r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); + if (r) + goto err; + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +index a91abfb..ba6d846 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +@@ -558,6 +558,7 @@ static int amdgpu_vce_validate_bo(struct amdgpu_cs_parser *p, uint32_t ib_idx, + int lo, int hi, unsigned size, int32_t index) + { + int64_t offset = ((uint64_t)size) * ((int64_t)index); ++ struct ttm_operation_ctx ctx = { false, false }; + struct amdgpu_bo_va_mapping *mapping; + unsigned i, fpfn, lpfn; + struct amdgpu_bo *bo; +@@ -587,7 +588,7 @@ static int amdgpu_vce_validate_bo(struct amdgpu_cs_parser *p, uint32_t ib_idx, + bo->placements[i].lpfn = bo->placements[i].fpfn ? + min(bo->placements[i].fpfn, lpfn) : lpfn; + } +- return ttm_bo_validate(&bo->tbo, &bo->placement, false, false); ++ return ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); + } + + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +index e34b07f..3b1ef8b 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c +@@ -278,6 +278,7 @@ int amdgpu_vcn_dec_ring_test_ring(struct amdgpu_ring *ring) + static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo, + bool direct, struct dma_fence **fence) + { ++ struct ttm_operation_ctx ctx = { true, false }; + struct ttm_validate_buffer tv; + struct ww_acquire_ctx ticket; + struct list_head head; +@@ -298,7 +299,7 @@ static int amdgpu_vcn_dec_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *b + if (r) + return r; + +- r = ttm_bo_validate(&bo->tbo, &bo->placement, true, false); ++ r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); + if (r) + goto err; + +-- +2.7.4 + |