[PATCH] dma-fence: add get_signaled_timestamp to fence ops
Daniel Vetter
daniel at ffwll.ch
Fri Sep 18 12:45:00 UTC 2020
On Thu, Sep 17, 2020 at 02:45:38PM -0700, Veera Sundaram Sankaran wrote:
> Add an optional fence ops to allow drivers to be able to set the
> timestamp for a fence. Some drivers have hardware capability to get
> the precise timestamp of certain events based on which the fences
> are triggered. This allows it to set accurate timestamp factoring
> out any software and IRQ latencies. The get_signaled_timestamp ops,
> if defined by the driver would be used during fence signaling to set
> the timestamp, before setting the flag DMA_FENCE_FLAG_TIMESTAMP_BIT.
> If the callback is not defined, ktime_get is used to set the fence
> timestamp.
>
> Signed-off-by: Veera Sundaram Sankaran <veeras at codeaurora.org>
We don't add hooks without implementations, please submit a complete patch
series (and yes that would need to be with upstream drm/msm drivers if
this is for qcom platforms).
Thanks, Daniel
> ---
> drivers/dma-buf/dma-fence.c | 6 +++++-
> include/linux/dma-fence.h | 13 +++++++++++++
> 2 files changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c
> index 43624b4..95c6ab0 100644
> --- a/drivers/dma-buf/dma-fence.c
> +++ b/drivers/dma-buf/dma-fence.c
> @@ -4,6 +4,7 @@
> *
> * Copyright (C) 2012 Canonical Ltd
> * Copyright (C) 2012 Texas Instruments
> + * Copyright (c) 2020 The Linux Foundation. All rights reserved.
> *
> * Authors:
> * Rob Clark <robdclark at gmail.com>
> @@ -340,7 +341,10 @@ int dma_fence_signal_locked(struct dma_fence *fence)
> /* Stash the cb_list before replacing it with the timestamp */
> list_replace(&fence->cb_list, &cb_list);
>
> - fence->timestamp = ktime_get();
> + if (fence->ops->get_signaled_timestamp)
> + fence->timestamp = fence->ops->get_signaled_timestamp(fence);
> + else
> + fence->timestamp = ktime_get();
> set_bit(DMA_FENCE_FLAG_TIMESTAMP_BIT, &fence->flags);
> trace_dma_fence_signaled(fence);
>
> diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.h
> index 09e23ad..ce73aba 100644
> --- a/include/linux/dma-fence.h
> +++ b/include/linux/dma-fence.h
> @@ -4,6 +4,7 @@
> *
> * Copyright (C) 2012 Canonical Ltd
> * Copyright (C) 2012 Texas Instruments
> + * Copyright (c) 2020 The Linux Foundation. All rights reserved.
> *
> * Authors:
> * Rob Clark <robdclark at gmail.com>
> @@ -261,6 +262,18 @@ struct dma_fence_ops {
> */
> void (*timeline_value_str)(struct dma_fence *fence,
> char *str, int size);
> +
> + /**
> + * @get_signaled_timestamp:
> + *
> + * Allows the driver to fill in precise timestamp for a fence.
> + * This ops would be used during fence signalling to set the timestamp,
> + * before setting the flag DMA_FENCE_FLAG_TIMESTAMP_BIT.
> + *
> + * This callback is optional. If this callback is not present,
> + * ktime_get is used to fill in the timestamp.
> + */
> + ktime_t (*get_signaled_timestamp)(struct dma_fence *fence);
> };
>
> void dma_fence_init(struct dma_fence *fence, const struct dma_fence_ops *ops,
> --
> 2.7.4
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the dri-devel
mailing list