[PATCH] amdgpu: Fix always_valid bos multiple LRU insertions.

Christian König ckoenig.leichtzumerken at gmail.com
Wed Jan 31 12:11:33 UTC 2018


Am 31.01.2018 um 13:07 schrieb Bas Nieuwenhuizen:
> 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.

The subject line should be "drm/amdgpu: ....", but apart from that the 
patch is Reviewed-by: Christian König <christian.koenig at amd.com>.

Regards,
Christian.

>
> Signed-off-by: Bas Nieuwenhuizen <basni at chromium.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(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
> index 59089e027f4d8..95839d33af01d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c
> @@ -233,8 +233,10 @@ void amdgpu_bo_list_get_list(struct amdgpu_bo_list *list,
>   	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;
>   	}
>   
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> index f7fceb63413c9..cb3044258b352 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> @@ -528,7 +528,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
>   	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);
>   
>   	while (1) {



More information about the amd-gfx mailing list