[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