| From a20ee0b1f8b42e2568f3a4408003d22b2dfcc706 Mon Sep 17 00:00:00 2001 |
| From: Bas Nieuwenhuizen <basni@chromium.org> |
| Date: Wed, 31 Jan 2018 13:58:55 +0100 |
| Subject: drm/amdgpu: Fix always_valid bos multiple LRU insertions. |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Bas Nieuwenhuizen <basni@chromium.org> |
| |
| commit a20ee0b1f8b42e2568f3a4408003d22b2dfcc706 upstream. |
| |
| If these bos are evicted and are in the validated list |
| things blow up, so do not put them in there. Notably, |
| that tries to add the bo to the LRU twice, which results |
| in a BUG_ON in ttm_bo.c. |
| |
| While for the bo_list an alternative would be to not allow |
| always valid bos in there, that does not work for the user |
| fence. |
| |
| v2: Fixed whitespace issue pointed out by checkpatch.pl |
| |
| Signed-off-by: Bas Nieuwenhuizen <basni@chromium.org> |
| Reviewed-by: Christian Kรถnig <christian.koenig@amd.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c | 6 ++++-- |
| drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 +- |
| 2 files changed, 5 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c |
| +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c |
| @@ -201,8 +201,10 @@ void amdgpu_bo_list_get_list(struct amdg |
| for (i = 0; i < list->num_entries; i++) { |
| unsigned priority = list->array[i].priority; |
| |
| - list_add_tail(&list->array[i].tv.head, |
| - &bucket[priority]); |
| + if (!list->array[i].robj->parent) |
| + list_add_tail(&list->array[i].tv.head, |
| + &bucket[priority]); |
| + |
| list->array[i].user_pages = NULL; |
| } |
| |
| --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c |
| +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c |
| @@ -519,7 +519,7 @@ static int amdgpu_cs_parser_bos(struct a |
| INIT_LIST_HEAD(&duplicates); |
| amdgpu_vm_get_pd_bo(&fpriv->vm, &p->validated, &p->vm_pd); |
| |
| - if (p->uf_entry.robj) |
| + if (p->uf_entry.robj && !p->uf_entry.robj->parent) |
| list_add(&p->uf_entry.tv.head, &p->validated); |
| |
| if (need_mmap_lock) |