[PATCH 1/4] dma-buf: add dma_fence_describe and dma_resv_describe
Rob Clark
robdclark at gmail.com
Fri Sep 24 20:58:31 UTC 2021
On Fri, Sep 24, 2021 at 12:18 AM Christian König
<ckoenig.leichtzumerken at gmail.com> wrote:
>
> Add functions to dump dma_fence and dma_resv objects into a seq_file and
> use them for printing the debugfs informations.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
for the series,
Reviewed-by: Rob Clark <robdclark at gmail.com>
> ---
> drivers/dma-buf/dma-buf.c | 11 +----------
> drivers/dma-buf/dma-fence.c | 16 ++++++++++++++++
> drivers/dma-buf/dma-resv.c | 23 +++++++++++++++++++++++
> include/linux/dma-fence.h | 1 +
> include/linux/dma-resv.h | 1 +
> 5 files changed, 42 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> index d35c71743ccb..4975c9289b02 100644
> --- a/drivers/dma-buf/dma-buf.c
> +++ b/drivers/dma-buf/dma-buf.c
> @@ -1368,8 +1368,6 @@ static int dma_buf_debug_show(struct seq_file *s, void *unused)
> {
> struct dma_buf *buf_obj;
> struct dma_buf_attachment *attach_obj;
> - struct dma_resv_iter cursor;
> - struct dma_fence *fence;
> int count = 0, attach_count;
> size_t size = 0;
> int ret;
> @@ -1397,14 +1395,7 @@ static int dma_buf_debug_show(struct seq_file *s, void *unused)
> file_inode(buf_obj->file)->i_ino,
> buf_obj->name ?: "");
>
> - dma_resv_for_each_fence(&cursor, buf_obj->resv, true, fence) {
> - seq_printf(s, "\t%s fence: %s %s %ssignalled\n",
> - dma_resv_iter_is_exclusive(&cursor) ?
> - "Exclusive" : "Shared",
> - fence->ops->get_driver_name(fence),
> - fence->ops->get_timeline_name(fence),
> - dma_fence_is_signaled(fence) ? "" : "un");
> - }
> + dma_resv_describe(buf_obj->resv, s);
>
> seq_puts(s, "\tAttached Devices:\n");
> attach_count = 0;
> diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c
> index 1e82ecd443fa..5175adf58644 100644
> --- a/drivers/dma-buf/dma-fence.c
> +++ b/drivers/dma-buf/dma-fence.c
> @@ -907,6 +907,22 @@ dma_fence_wait_any_timeout(struct dma_fence **fences, uint32_t count,
> }
> EXPORT_SYMBOL(dma_fence_wait_any_timeout);
>
> +/**
> + * dma_fence_describe - Dump fence describtion into seq_file
> + * @fence: the 6fence to describe
> + * @seq: the seq_file to put the textual description into
> + *
> + * Dump a textual description of the fence and it's state into the seq_file.
> + */
> +void dma_fence_describe(struct dma_fence *fence, struct seq_file *seq)
> +{
> + seq_printf(seq, "%s %s seq %llu %ssignalled\n",
> + fence->ops->get_driver_name(fence),
> + fence->ops->get_timeline_name(fence), fence->seqno,
> + dma_fence_is_signaled(fence) ? "" : "un");
> +}
> +EXPORT_SYMBOL(dma_fence_describe);
> +
> /**
> * dma_fence_init - Initialize a custom fence.
> * @fence: the fence to initialize
> diff --git a/drivers/dma-buf/dma-resv.c b/drivers/dma-buf/dma-resv.c
> index 266ec9e3caef..6bb25d53e702 100644
> --- a/drivers/dma-buf/dma-resv.c
> +++ b/drivers/dma-buf/dma-resv.c
> @@ -38,6 +38,7 @@
> #include <linux/mm.h>
> #include <linux/sched/mm.h>
> #include <linux/mmu_notifier.h>
> +#include <linux/seq_file.h>
>
> /**
> * DOC: Reservation Object Overview
> @@ -654,6 +655,28 @@ bool dma_resv_test_signaled(struct dma_resv *obj, bool test_all)
> }
> EXPORT_SYMBOL_GPL(dma_resv_test_signaled);
>
> +/**
> + * dma_resv_describe - Dump description of the resv object into seq_file
> + * @obj: the reservation object
> + * @seq: the seq_file to dump the description into
> + *
> + * Dump a textual description of the fences inside an dma_resv object into the
> + * seq_file.
> + */
> +void dma_resv_describe(struct dma_resv *obj, struct seq_file *seq)
> +{
> + struct dma_resv_iter cursor;
> + struct dma_fence *fence;
> +
> + dma_resv_for_each_fence(&cursor, obj, true, fence) {
> + seq_printf(seq, "\t%s fence:",
> + dma_resv_iter_is_exclusive(&cursor) ?
> + "Exclusive" : "Shared");
> + dma_fence_describe(fence, seq);
> + }
> +}
> +EXPORT_SYMBOL_GPL(dma_resv_describe);
> +
> #if IS_ENABLED(CONFIG_LOCKDEP)
> static int __init dma_resv_lockdep(void)
> {
> diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.h
> index a706b7bf51d7..1ea691753bd3 100644
> --- a/include/linux/dma-fence.h
> +++ b/include/linux/dma-fence.h
> @@ -264,6 +264,7 @@ void dma_fence_init(struct dma_fence *fence, const struct dma_fence_ops *ops,
>
> void dma_fence_release(struct kref *kref);
> void dma_fence_free(struct dma_fence *fence);
> +void dma_fence_describe(struct dma_fence *fence, struct seq_file *seq);
>
> /**
> * dma_fence_put - decreases refcount of the fence
> diff --git a/include/linux/dma-resv.h b/include/linux/dma-resv.h
> index d4b4cd43f0f1..49c0152073fd 100644
> --- a/include/linux/dma-resv.h
> +++ b/include/linux/dma-resv.h
> @@ -486,5 +486,6 @@ int dma_resv_copy_fences(struct dma_resv *dst, struct dma_resv *src);
> long dma_resv_wait_timeout(struct dma_resv *obj, bool wait_all, bool intr,
> unsigned long timeout);
> bool dma_resv_test_signaled(struct dma_resv *obj, bool test_all);
> +void dma_resv_describe(struct dma_resv *obj, struct seq_file *seq);
>
> #endif /* _LINUX_RESERVATION_H */
> --
> 2.25.1
>
More information about the dri-devel
mailing list