All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Christian König" <ckoenig.leichtzumerken@gmail.com>
To: Gustavo Padovan <gustavo@padovan.org>,
	Sumit Semwal <sumit.semwal@linaro.org>,
	Daniel Vetter <daniel@ffwll.ch>,
	Thomas Zimmermann <tzimmermann@suse.de>
Cc: "Jessie Hao" <juan.hao@nxp.com>,
	"Christian König" <christian.koenig@amd.com>,
	"dri-devel@lists.freedesktop.org"
	<dri-devel@lists.freedesktop.org>
Subject: Re: [PATCH] dma-buf: keep the signaling time of merged fences
Date: Wed, 21 Jun 2023 10:36:45 +0200	[thread overview]
Message-ID: <00d03e78-e14a-ae9c-9e64-75f041f8fad5@gmail.com> (raw)
In-Reply-To: <DB9PR04MB9990B43E0722ECD4ADACD1EF8B5DA@DB9PR04MB9990.eurprd04.prod.outlook.com>

Hi guys,

can I get a quick rb for this?

Going to add a Fixes tag before pushing.

Thanks,
Christian.

Am 21.06.23 um 09:57 schrieb Jessie Hao:
> Hi Christian,
> After applying the patch, the below android CTS cases can pass:
> CtsDeqpTestCases dEQP-EGL.functional.get_frame_timestamps*
> Thanks for taking care of this.
>
> Tested-by: Jessie Hao <juan.hao@nxp.com>
>
> -----Original Message-----
> From: Christian König <ckoenig.leichtzumerken@gmail.com>
> Sent: Wednesday, June 21, 2023 3:32 PM
> To: Jessie Hao <juan.hao@nxp.com>; dri-devel@lists.freedesktop.org
> Cc: Christian König <christian.koenig@amd.com>; stable@vger.kernel.org
> Subject: [PATCH] dma-buf: keep the signaling time of merged fences
>
>
> Some Android CTS is testing for that.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> CC: stable@vger.kernel.org
> ---
>   drivers/dma-buf/dma-fence-unwrap.c | 11 +++++++++--
>   drivers/dma-buf/dma-fence.c        |  5 +++--
>   drivers/gpu/drm/drm_syncobj.c      |  2 +-
>   include/linux/dma-fence.h          |  2 +-
>   4 files changed, 14 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/dma-buf/dma-fence-unwrap.c b/drivers/dma-buf/dma-fence-unwrap.c
> index 7002bca792ff..06eb91306c01 100644
> --- a/drivers/dma-buf/dma-fence-unwrap.c
> +++ b/drivers/dma-buf/dma-fence-unwrap.c
> @@ -66,18 +66,25 @@ struct dma_fence *__dma_fence_unwrap_merge(unsigned int num_fences,  {
>          struct dma_fence_array *result;
>          struct dma_fence *tmp, **array;
> +       ktime_t timestamp;
>          unsigned int i;
>          size_t count;
>
>          count = 0;
> +       timestamp = ns_to_ktime(0);
>          for (i = 0; i < num_fences; ++i) {
> -               dma_fence_unwrap_for_each(tmp, &iter[i], fences[i])
> +               dma_fence_unwrap_for_each(tmp, &iter[i], fences[i]) {
>                          if (!dma_fence_is_signaled(tmp))
>                                  ++count;
> +                       else if (test_bit(DMA_FENCE_FLAG_TIMESTAMP_BIT,
> +                                         &tmp->flags) &&
> +                                ktime_after(tmp->timestamp, timestamp))
> +                               timestamp = tmp->timestamp;
> +               }
>          }
>
>          if (count == 0)
> -               return dma_fence_get_stub();
> +               return dma_fence_allocate_private_stub(timestamp);
>
>          array = kmalloc_array(count, sizeof(*array), GFP_KERNEL);
>          if (!array)
> diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c index f177c56269bb..ad076f208760 100644
> --- a/drivers/dma-buf/dma-fence.c
> +++ b/drivers/dma-buf/dma-fence.c
> @@ -150,10 +150,11 @@ EXPORT_SYMBOL(dma_fence_get_stub);
>
>   /**
>    * dma_fence_allocate_private_stub - return a private, signaled fence
> + * @timestamp: timestamp when the fence was signaled
>    *
>    * Return a newly allocated and signaled stub fence.
>    */
> -struct dma_fence *dma_fence_allocate_private_stub(void)
> +struct dma_fence *dma_fence_allocate_private_stub(ktime_t timestamp)
>   {
>          struct dma_fence *fence;
>
> @@ -169,7 +170,7 @@ struct dma_fence *dma_fence_allocate_private_stub(void)
>          set_bit(DMA_FENCE_FLAG_ENABLE_SIGNAL_BIT,
>                  &fence->flags);
>
> -       dma_fence_signal(fence);
> +       dma_fence_signal_timestamp(fence, timestamp);
>
>          return fence;
>   }
> diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c index 0c2be8360525..04589a35eb09 100644
> --- a/drivers/gpu/drm/drm_syncobj.c
> +++ b/drivers/gpu/drm/drm_syncobj.c
> @@ -353,7 +353,7 @@ EXPORT_SYMBOL(drm_syncobj_replace_fence);
>    */
>   static int drm_syncobj_assign_null_handle(struct drm_syncobj *syncobj)  {
> -       struct dma_fence *fence = dma_fence_allocate_private_stub();
> +       struct dma_fence *fence =
> + dma_fence_allocate_private_stub(ktime_get());
>
>          if (IS_ERR(fence))
>                  return PTR_ERR(fence);
> diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.h index d54b595a0fe0..0d678e9a7b24 100644
> --- a/include/linux/dma-fence.h
> +++ b/include/linux/dma-fence.h
> @@ -606,7 +606,7 @@ static inline signed long dma_fence_wait(struct dma_fence *fence, bool intr)  void dma_fence_set_deadline(struct dma_fence *fence, ktime_t deadline);
>
>   struct dma_fence *dma_fence_get_stub(void); -struct dma_fence *dma_fence_allocate_private_stub(void);
> +struct dma_fence *dma_fence_allocate_private_stub(ktime_t timestamp);
>   u64 dma_fence_context_alloc(unsigned num);
>
>   extern const struct dma_fence_ops dma_fence_array_ops;
> --
> 2.34.1
>


  reply	other threads:[~2023-06-21  8:36 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-21  7:57 [PATCH] dma-buf: keep the signaling time of merged fences Jessie Hao
2023-06-21  8:36 ` Christian König [this message]
  -- strict thread matches above, loose matches on Subject: below --
2023-06-21  7:32 Christian König
2023-06-21 11:02 ` Greg KH
2023-06-21 11:02   ` Greg KH
2023-06-21 11:02 ` Greg KH
2023-06-21 11:02   ` Greg KH
2023-06-21 12:05   ` Christian König
2023-06-21 12:05     ` Christian König
2023-06-21 12:35     ` Greg KH
2023-06-21 12:35       ` Greg KH
2023-06-22 14:44 ` Christian König

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=00d03e78-e14a-ae9c-9e64-75f041f8fad5@gmail.com \
    --to=ckoenig.leichtzumerken@gmail.com \
    --cc=christian.koenig@amd.com \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=gustavo@padovan.org \
    --cc=juan.hao@nxp.com \
    --cc=sumit.semwal@linaro.org \
    --cc=tzimmermann@suse.de \
    /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.