diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1801-drm-amdgpu-stop-using-BO-status-for-user-pages.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1801-drm-amdgpu-stop-using-BO-status-for-user-pages.patch | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1801-drm-amdgpu-stop-using-BO-status-for-user-pages.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1801-drm-amdgpu-stop-using-BO-status-for-user-pages.patch new file mode 100644 index 00000000..05ff05d0 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/1801-drm-amdgpu-stop-using-BO-status-for-user-pages.patch @@ -0,0 +1,83 @@ +From 79ff337815c8f51d0b84443f4ead36777365316f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> +Date: Tue, 5 Sep 2017 14:30:05 +0200 +Subject: [PATCH 1801/4131] drm/amdgpu: stop using BO status for user pages +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Instead use a counter to figure out if we need to set new pages or not. + +Signed-off-by: Christian König <christian.koenig@amd.com> +Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + + drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 17 +++++++++-------- + 2 files changed, 10 insertions(+), 8 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +index 4183d4d..2bb56e7 100755 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +@@ -1882,6 +1882,7 @@ bool amdgpu_ttm_tt_affect_userptr(struct ttm_tt *ttm, unsigned long start, + unsigned long end); + bool amdgpu_ttm_tt_userptr_invalidated(struct ttm_tt *ttm, + int *last_invalidated); ++bool amdgpu_ttm_tt_userptr_needs_pages(struct ttm_tt *ttm); + bool amdgpu_ttm_tt_is_readonly(struct ttm_tt *ttm); + uint64_t amdgpu_ttm_tt_pte_flags(struct amdgpu_device *adev, struct ttm_tt *ttm, + struct ttm_mem_reg *mem); +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +index 5327c04..1e90078 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +@@ -489,11 +489,10 @@ static int amdgpu_cs_list_validate(struct amdgpu_cs_parser *p, + return -EPERM; + + /* Check if we have user pages and nobody bound the BO already */ +- if (lobj->user_pages && bo->tbo.ttm->state != tt_bound) { +- size_t size = sizeof(struct page *); +- +- size *= bo->tbo.ttm->num_pages; +- memcpy(bo->tbo.ttm->pages, lobj->user_pages, size); ++ if (amdgpu_ttm_tt_userptr_needs_pages(bo->tbo.ttm) && ++ lobj->user_pages) { ++ amdgpu_ttm_tt_set_user_pages(bo->tbo.ttm, ++ lobj->user_pages); + binding_userptr = true; + } + +@@ -563,17 +562,19 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p, + INIT_LIST_HEAD(&need_pages); + for (i = p->bo_list->first_userptr; + i < p->bo_list->num_entries; ++i) { ++ struct amdgpu_bo *bo; + + e = &p->bo_list->array[i]; ++ bo = e->robj; + +- if (amdgpu_ttm_tt_userptr_invalidated(e->robj->tbo.ttm, ++ if (amdgpu_ttm_tt_userptr_invalidated(bo->tbo.ttm, + &e->user_invalidated) && e->user_pages) { + + /* We acquired a page array, but somebody + * invalidated it. Free it and try again + */ + release_pages(e->user_pages, +- e->robj->tbo.ttm->num_pages, ++ bo->tbo.ttm->num_pages, + false); + #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0) + drm_free_large(e->user_pages); +@@ -583,7 +584,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p, + e->user_pages = NULL; + } + +- if (e->robj->tbo.ttm->state != tt_bound && ++ if (amdgpu_ttm_tt_userptr_needs_pages(bo->tbo.ttm) && + !e->user_pages) { + list_del(&e->tv.head); + list_add(&e->tv.head, &need_pages); +-- +2.7.4 + |