All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rob Clark <robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Rob Herring <robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: Sean Paul <sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org>,
	Maxime Ripard
	<maxime.ripard-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>,
	David Airlie <airlied-cv59FeDIM0c@public.gmane.org>,
	linux-arm-msm
	<linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	Maarten Lankhorst
	<maarten.lankhorst-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
	The etnaviv authors
	<etnaviv-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>,
	dri-devel
	<dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>,
	Eric Anholt <eric-WhKQ6XTQaPysTnJN9+BGXg@public.gmane.org>,
	Christian Gmeiner
	<christian.gmeiner-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Daniel Vetter <daniel-/w4YWyX8dFk@public.gmane.org>,
	Russell King
	<linux+etnaviv-I+IVW8TIWO2tmTQ+vhA3Yw@public.gmane.org>,
	freedreno
	<freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>,
	Lucas Stach <l.stach-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>
Subject: Re: [PATCH v2 3/5] drm: msm: Switch to use drm_gem_object reservation_object
Date: Wed, 13 Feb 2019 09:31:48 -0500	[thread overview]
Message-ID: <CAF6AEGsZrinfjmcVWWuN2h+Q1YvRn7c-UDkq9F8yMEuszZdY7w@mail.gmail.com> (raw)
In-Reply-To: <20190202154158.10443-4-robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>

On Sat, Feb 2, 2019 at 10:42 AM Rob Herring <robh@kernel.org> wrote:
>
> Now that the base struct drm_gem_object has a reservation_object, use it
> and remove the private BO one.
>
> We can't use the drm_gem_reservation_object_wait() helper for MSM
> because (in theory) msm_gem_cpu_prep() will also do some cache
> maintenance on the GEM object.
>
> Cc: Rob Clark <robdclark@gmail.com>
> Cc: David Airlie <airlied@linux.ie>
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Cc: linux-arm-msm@vger.kernel.org
> Cc: dri-devel@lists.freedesktop.org
> Cc: freedreno@lists.freedesktop.org
> Signed-off-by: Rob Herring <robh@kernel.org>

Acked-by: Rob Clark <robdclark@gmail.com>

> ---
>  drivers/gpu/drm/msm/msm_drv.c        |  1 -
>  drivers/gpu/drm/msm/msm_drv.h        |  1 -
>  drivers/gpu/drm/msm/msm_gem.c        | 27 +++++++++------------------
>  drivers/gpu/drm/msm/msm_gem_prime.c  |  7 -------
>  drivers/gpu/drm/msm/msm_gem_submit.c |  8 ++++----
>  5 files changed, 13 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
> index d2cdc7b553fe..522ddbd72250 100644
> --- a/drivers/gpu/drm/msm/msm_drv.c
> +++ b/drivers/gpu/drm/msm/msm_drv.c
> @@ -1086,7 +1086,6 @@ static struct drm_driver msm_driver = {
>         .prime_fd_to_handle = drm_gem_prime_fd_to_handle,
>         .gem_prime_export   = drm_gem_prime_export,
>         .gem_prime_import   = drm_gem_prime_import,
> -       .gem_prime_res_obj  = msm_gem_prime_res_obj,
>         .gem_prime_pin      = msm_gem_prime_pin,
>         .gem_prime_unpin    = msm_gem_prime_unpin,
>         .gem_prime_get_sg_table = msm_gem_prime_get_sg_table,
> diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h
> index 927e5d86f7c1..068f9172ad70 100644
> --- a/drivers/gpu/drm/msm/msm_drv.h
> +++ b/drivers/gpu/drm/msm/msm_drv.h
> @@ -300,7 +300,6 @@ struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj);
>  void *msm_gem_prime_vmap(struct drm_gem_object *obj);
>  void msm_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
>  int msm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
> -struct reservation_object *msm_gem_prime_res_obj(struct drm_gem_object *obj);
>  struct drm_gem_object *msm_gem_prime_import_sg_table(struct drm_device *dev,
>                 struct dma_buf_attachment *attach, struct sg_table *sg);
>  int msm_gem_prime_pin(struct drm_gem_object *obj);
> diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
> index c8886d3071fa..d3973cc26522 100644
> --- a/drivers/gpu/drm/msm/msm_gem.c
> +++ b/drivers/gpu/drm/msm/msm_gem.c
> @@ -672,14 +672,13 @@ void msm_gem_vunmap(struct drm_gem_object *obj, enum msm_gem_lock subclass)
>  int msm_gem_sync_object(struct drm_gem_object *obj,
>                 struct msm_fence_context *fctx, bool exclusive)
>  {
> -       struct msm_gem_object *msm_obj = to_msm_bo(obj);
>         struct reservation_object_list *fobj;
>         struct dma_fence *fence;
>         int i, ret;
>
> -       fobj = reservation_object_get_list(msm_obj->resv);
> +       fobj = reservation_object_get_list(obj->resv);
>         if (!fobj || (fobj->shared_count == 0)) {
> -               fence = reservation_object_get_excl(msm_obj->resv);
> +               fence = reservation_object_get_excl(obj->resv);
>                 /* don't need to wait on our own fences, since ring is fifo */
>                 if (fence && (fence->context != fctx->context)) {
>                         ret = dma_fence_wait(fence, true);
> @@ -693,7 +692,7 @@ int msm_gem_sync_object(struct drm_gem_object *obj,
>
>         for (i = 0; i < fobj->shared_count; i++) {
>                 fence = rcu_dereference_protected(fobj->shared[i],
> -                                               reservation_object_held(msm_obj->resv));
> +                                               reservation_object_held(obj->resv));
>                 if (fence->context != fctx->context) {
>                         ret = dma_fence_wait(fence, true);
>                         if (ret)
> @@ -711,9 +710,9 @@ void msm_gem_move_to_active(struct drm_gem_object *obj,
>         WARN_ON(msm_obj->madv != MSM_MADV_WILLNEED);
>         msm_obj->gpu = gpu;
>         if (exclusive)
> -               reservation_object_add_excl_fence(msm_obj->resv, fence);
> +               reservation_object_add_excl_fence(obj->resv, fence);
>         else
> -               reservation_object_add_shared_fence(msm_obj->resv, fence);
> +               reservation_object_add_shared_fence(obj->resv, fence);
>         list_del_init(&msm_obj->mm_list);
>         list_add_tail(&msm_obj->mm_list, &gpu->active_list);
>  }
> @@ -733,13 +732,12 @@ void msm_gem_move_to_inactive(struct drm_gem_object *obj)
>
>  int msm_gem_cpu_prep(struct drm_gem_object *obj, uint32_t op, ktime_t *timeout)
>  {
> -       struct msm_gem_object *msm_obj = to_msm_bo(obj);
>         bool write = !!(op & MSM_PREP_WRITE);
>         unsigned long remain =
>                 op & MSM_PREP_NOSYNC ? 0 : timeout_to_jiffies(timeout);
>         long ret;
>
> -       ret = reservation_object_wait_timeout_rcu(msm_obj->resv, write,
> +       ret = reservation_object_wait_timeout_rcu(obj->resv, write,
>                                                   true,  remain);
>         if (ret == 0)
>                 return remain == 0 ? -EBUSY : -ETIMEDOUT;
> @@ -771,7 +769,7 @@ static void describe_fence(struct dma_fence *fence, const char *type,
>  void msm_gem_describe(struct drm_gem_object *obj, struct seq_file *m)
>  {
>         struct msm_gem_object *msm_obj = to_msm_bo(obj);
> -       struct reservation_object *robj = msm_obj->resv;
> +       struct reservation_object *robj = obj->resv;
>         struct reservation_object_list *fobj;
>         struct dma_fence *fence;
>         struct msm_gem_vma *vma;
> @@ -883,9 +881,6 @@ void msm_gem_free_object(struct drm_gem_object *obj)
>                 put_pages(obj);
>         }
>
> -       if (msm_obj->resv == &msm_obj->_resv)
> -               reservation_object_fini(msm_obj->resv);
> -
>         drm_gem_object_release(obj);
>
>         mutex_unlock(&msm_obj->lock);
> @@ -945,12 +940,8 @@ static int msm_gem_new_impl(struct drm_device *dev,
>         msm_obj->flags = flags;
>         msm_obj->madv = MSM_MADV_WILLNEED;
>
> -       if (resv) {
> -               msm_obj->resv = resv;
> -       } else {
> -               msm_obj->resv = &msm_obj->_resv;
> -               reservation_object_init(msm_obj->resv);
> -       }
> +       if (resv)
> +               msm_obj->base.resv = resv;
>
>         INIT_LIST_HEAD(&msm_obj->submit_entry);
>         INIT_LIST_HEAD(&msm_obj->vmas);
> diff --git a/drivers/gpu/drm/msm/msm_gem_prime.c b/drivers/gpu/drm/msm/msm_gem_prime.c
> index 13403c6da6c7..60bb290700ce 100644
> --- a/drivers/gpu/drm/msm/msm_gem_prime.c
> +++ b/drivers/gpu/drm/msm/msm_gem_prime.c
> @@ -70,10 +70,3 @@ void msm_gem_prime_unpin(struct drm_gem_object *obj)
>         if (!obj->import_attach)
>                 msm_gem_put_pages(obj);
>  }
> -
> -struct reservation_object *msm_gem_prime_res_obj(struct drm_gem_object *obj)
> -{
> -       struct msm_gem_object *msm_obj = to_msm_bo(obj);
> -
> -       return msm_obj->resv;
> -}
> diff --git a/drivers/gpu/drm/msm/msm_gem_submit.c b/drivers/gpu/drm/msm/msm_gem_submit.c
> index 12b983fc0b56..df302521ec74 100644
> --- a/drivers/gpu/drm/msm/msm_gem_submit.c
> +++ b/drivers/gpu/drm/msm/msm_gem_submit.c
> @@ -173,7 +173,7 @@ static void submit_unlock_unpin_bo(struct msm_gem_submit *submit,
>                 msm_gem_unpin_iova(&msm_obj->base, submit->gpu->aspace);
>
>         if (submit->bos[i].flags & BO_LOCKED)
> -               ww_mutex_unlock(&msm_obj->resv->lock);
> +               ww_mutex_unlock(&msm_obj->base.resv->lock);
>
>         if (backoff && !(submit->bos[i].flags & BO_VALID))
>                 submit->bos[i].iova = 0;
> @@ -196,7 +196,7 @@ static int submit_lock_objects(struct msm_gem_submit *submit)
>                 contended = i;
>
>                 if (!(submit->bos[i].flags & BO_LOCKED)) {
> -                       ret = ww_mutex_lock_interruptible(&msm_obj->resv->lock,
> +                       ret = ww_mutex_lock_interruptible(&msm_obj->base.resv->lock,
>                                         &submit->ticket);
>                         if (ret)
>                                 goto fail;
> @@ -218,7 +218,7 @@ static int submit_lock_objects(struct msm_gem_submit *submit)
>         if (ret == -EDEADLK) {
>                 struct msm_gem_object *msm_obj = submit->bos[contended].obj;
>                 /* we lost out in a seqno race, lock and retry.. */
> -               ret = ww_mutex_lock_slow_interruptible(&msm_obj->resv->lock,
> +               ret = ww_mutex_lock_slow_interruptible(&msm_obj->base.resv->lock,
>                                 &submit->ticket);
>                 if (!ret) {
>                         submit->bos[contended].flags |= BO_LOCKED;
> @@ -244,7 +244,7 @@ static int submit_fence_sync(struct msm_gem_submit *submit, bool no_implicit)
>                          * strange place to call it.  OTOH this is a
>                          * convenient can-fail point to hook it in.
>                          */
> -                       ret = reservation_object_reserve_shared(msm_obj->resv,
> +                       ret = reservation_object_reserve_shared(msm_obj->base.resv,
>                                                                 1);
>                         if (ret)
>                                 return ret;
> --
> 2.19.1
>
_______________________________________________
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno

  parent reply	other threads:[~2019-02-13 14:31 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-02 15:41 [PATCH v2 0/5] Add reservation_object to drm_gem_object Rob Herring
     [not found] ` <20190202154158.10443-1-robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2019-02-02 15:41   ` [PATCH v2 1/5] drm: " Rob Herring
2019-02-04  9:31     ` Daniel Vetter
2019-02-06 22:59     ` Eric Anholt
2019-02-08  7:23     ` Christian Gmeiner
     [not found]       ` <CAH9NwWfX0w_-mqirpW42HLQ=SqytyGFfg=FBpqcV_m8q4-ucRA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-02-12 14:16         ` Daniel Vetter
     [not found]           ` <20190212141637.GC23159-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
2019-02-12 18:35             ` Christian Gmeiner
2019-02-02 15:41   ` [PATCH v2 2/5] drm: etnaviv: Switch to use drm_gem_object reservation_object Rob Herring
2019-02-12 18:33     ` Christian Gmeiner via dri-devel
2019-02-02 15:41   ` [PATCH v2 3/5] drm: msm: " Rob Herring
     [not found]     ` <20190202154158.10443-4-robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2019-02-13 14:31       ` Rob Clark [this message]
2019-02-02 15:41   ` [PATCH v2 4/5] drm: v3d: " Rob Herring
2019-02-02 15:41   ` [PATCH v2 5/5] drm: vc4: " Rob Herring
2019-02-12 14:22   ` [PATCH v2 0/5] Add reservation_object to drm_gem_object Daniel Vetter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAF6AEGsZrinfjmcVWWuN2h+Q1YvRn7c-UDkq9F8yMEuszZdY7w@mail.gmail.com \
    --to=robdclark-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
    --cc=airlied-cv59FeDIM0c@public.gmane.org \
    --cc=christian.gmeiner-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=daniel-/w4YWyX8dFk@public.gmane.org \
    --cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    --cc=eric-WhKQ6XTQaPysTnJN9+BGXg@public.gmane.org \
    --cc=etnaviv-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    --cc=freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
    --cc=l.stach-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org \
    --cc=linux+etnaviv-I+IVW8TIWO2tmTQ+vhA3Yw@public.gmane.org \
    --cc=linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=maarten.lankhorst-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
    --cc=maxime.ripard-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org \
    --cc=robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=sean-p7yTbzM4H96eqtR555YLDQ@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.