[PATCH 1/4] drm/vmwgfx: start to phase out ttm_exec v2

Ian Forbes ian.forbes at broadcom.com
Mon Nov 25 20:06:57 UTC 2024


Tested working.

Tested-by: Ian Forbes <ian.forbes at broadcom.com>

On Thu, Nov 21, 2024 at 4:27 AM Christian König
<ckoenig.leichtzumerken at gmail.com> wrote:
>
> Start switching over vmwgfx to drm_exec as well. Replacing some
> unnecessary complex calls with just just single BO dma_resv locking.
>
> No intentional functional change, but only compile tested for now.
>
> v2: fix kerneldoc issues
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> ---
>  drivers/gpu/drm/vmwgfx/vmwgfx_resource.c | 53 ++++++++----------------
>  1 file changed, 18 insertions(+), 35 deletions(-)
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c
> index a73af8a355fb..0002b2f9a6c9 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c
> @@ -510,14 +510,14 @@ void vmw_resource_unreserve(struct vmw_resource *res,
>   * @res:            The resource for which to allocate a backup buffer.
>   * @interruptible:  Whether any sleeps during allocation should be
>   *                  performed while interruptible.
> - * @val_buf:        On successful return contains data about the
> - *                  reserved and validated backup buffer.
> + * @bo:             On successful return contains the reserved and validated
> + *                  backup buffer.
>   */
>  static int
>  vmw_resource_check_buffer(struct ww_acquire_ctx *ticket,
>                           struct vmw_resource *res,
>                           bool interruptible,
> -                         struct ttm_validate_buffer *val_buf)
> +                         struct ttm_buffer_object **bo)
>  {
>         struct ttm_operation_ctx ctx = { true, false };
>         struct list_head val_list;
> @@ -532,10 +532,12 @@ vmw_resource_check_buffer(struct ww_acquire_ctx *ticket,
>
>         INIT_LIST_HEAD(&val_list);
>         ttm_bo_get(&res->guest_memory_bo->tbo);
> -       val_buf->bo = &res->guest_memory_bo->tbo;
> -       val_buf->num_shared = 0;
> -       list_add_tail(&val_buf->head, &val_list);
> -       ret = ttm_eu_reserve_buffers(ticket, &val_list, interruptible, NULL);
> +
> +       *bo = &res->guest_memory_bo->tbo;
> +       if (ticket)
> +               ww_acquire_init(ticket, &reservation_ww_class);
> +
> +       ret = ttm_bo_reserve(*bo, interruptible, (ticket == NULL), ticket);
>         if (unlikely(ret != 0))
>                 goto out_no_reserve;
>
> @@ -555,10 +557,11 @@ vmw_resource_check_buffer(struct ww_acquire_ctx *ticket,
>         return 0;
>
>  out_no_validate:
> -       ttm_eu_backoff_reservation(ticket, &val_list);
> +       dma_resv_unlock((*bo)->base.resv);
> +       if (ticket)
> +               ww_acquire_fini(ticket);
>  out_no_reserve:
> -       ttm_bo_put(val_buf->bo);
> -       val_buf->bo = NULL;
> +       ttm_bo_put(*bo);
>         if (guest_memory_dirty)
>                 vmw_user_bo_unref(&res->guest_memory_bo);
>
> @@ -600,29 +603,6 @@ int vmw_resource_reserve(struct vmw_resource *res, bool interruptible,
>         return 0;
>  }
>
> -/**
> - * vmw_resource_backoff_reservation - Unreserve and unreference a
> - *                                    guest memory buffer
> - *.
> - * @ticket:         The ww acquire ctx used for reservation.
> - * @val_buf:        Guest memory buffer information.
> - */
> -static void
> -vmw_resource_backoff_reservation(struct ww_acquire_ctx *ticket,
> -                                struct ttm_validate_buffer *val_buf)
> -{
> -       struct list_head val_list;
> -
> -       if (likely(val_buf->bo == NULL))
> -               return;
> -
> -       INIT_LIST_HEAD(&val_list);
> -       list_add_tail(&val_buf->head, &val_list);
> -       ttm_eu_backoff_reservation(ticket, &val_list);
> -       ttm_bo_put(val_buf->bo);
> -       val_buf->bo = NULL;
> -}
> -
>  /**
>   * vmw_resource_do_evict - Evict a resource, and transfer its data
>   *                         to a backup buffer.
> @@ -642,7 +622,7 @@ static int vmw_resource_do_evict(struct ww_acquire_ctx *ticket,
>
>         val_buf.bo = NULL;
>         val_buf.num_shared = 0;
> -       ret = vmw_resource_check_buffer(ticket, res, interruptible, &val_buf);
> +       ret = vmw_resource_check_buffer(ticket, res, interruptible, &val_buf.bo);
>         if (unlikely(ret != 0))
>                 return ret;
>
> @@ -657,7 +637,10 @@ static int vmw_resource_do_evict(struct ww_acquire_ctx *ticket,
>         res->guest_memory_dirty = true;
>         res->res_dirty = false;
>  out_no_unbind:
> -       vmw_resource_backoff_reservation(ticket, &val_buf);
> +       dma_resv_unlock(val_buf.bo->base.resv);
> +       if (ticket)
> +               ww_acquire_fini(ticket);
> +       ttm_bo_put(val_buf.bo);
>
>         return ret;
>  }
> --
> 2.34.1
>


More information about the dri-devel mailing list