Re: [PATCH] drm/ttm: remove EBUSY handling in ttm_execbuf_util

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Aug 20, 2012 at 9:42 AM, Maarten Lankhorst
<maarten.lankhorst@xxxxxxxxxxxxx> wrote:
> How is this different from just calling with no_wait == false?
> As far as I can tell, both paths end up with the same result..
>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxx>

NAK this seriously modify the behavior. The ttm_eu_del_from_lru_locked
part is important. It must happen with lru lock held and without any
dropping of this lock prior to wait for bo unreserve.

Cheers,
Jerome

>
> diff --git a/drivers/gpu/drm/ttm/ttm_execbuf_util.c b/drivers/gpu/drm/ttm/ttm_execbuf_util.c
> index 3f48a46..4e7b596 100644
> --- a/drivers/gpu/drm/ttm/ttm_execbuf_util.c
> +++ b/drivers/gpu/drm/ttm/ttm_execbuf_util.c
> @@ -82,22 +82,6 @@ static void ttm_eu_list_ref_sub(struct list_head *list)
>         }
>  }
>
> -static int ttm_eu_wait_unreserved_locked(struct list_head *list,
> -                                        struct ttm_buffer_object *bo)
> -{
> -       struct ttm_bo_global *glob = bo->glob;
> -       int ret;
> -
> -       ttm_eu_del_from_lru_locked(list);
> -       spin_unlock(&glob->lru_lock);
> -       ret = ttm_bo_wait_unreserved(bo, true);
> -       spin_lock(&glob->lru_lock);
> -       if (unlikely(ret != 0))
> -               ttm_eu_backoff_reservation_locked(list);
> -       return ret;
> -}
> -
> -
>  void ttm_eu_backoff_reservation(struct list_head *list)
>  {
>         struct ttm_validate_buffer *entry;
> @@ -152,19 +136,10 @@ retry:
>         list_for_each_entry(entry, list, head) {
>                 struct ttm_buffer_object *bo = entry->bo;
>
> -retry_this_bo:
> -               ret = ttm_bo_reserve_locked(bo, true, true, true, val_seq);
> +               ret = ttm_bo_reserve_locked(bo, true, false, true, val_seq);
>                 switch (ret) {
>                 case 0:
>                         break;
> -               case -EBUSY:
> -                       ret = ttm_eu_wait_unreserved_locked(list, bo);
> -                       if (unlikely(ret != 0)) {
> -                               spin_unlock(&glob->lru_lock);
> -                               ttm_eu_list_ref_sub(list);
> -                               return ret;
> -                       }
> -                       goto retry_this_bo;
>                 case -EAGAIN:
>                         ttm_eu_backoff_reservation_locked(list);
>                         spin_unlock(&glob->lru_lock);
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@xxxxxxxxxxxxxxxxxxxxx
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel


[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux