diff mbox series

[1/4] dma-buf: add dma_fence_describe and dma_resv_describe

Message ID 20210924071759.22659-1-christian.koenig@amd.com (mailing list archive)
State Superseded
Headers show
Series [1/4] dma-buf: add dma_fence_describe and dma_resv_describe | expand

Commit Message

Christian König Sept. 24, 2021, 7:17 a.m. UTC
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@amd.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(-)

Comments

Rob Clark Sept. 24, 2021, 8:58 p.m. UTC | #1
On Fri, Sep 24, 2021 at 12:18 AM Christian König
<ckoenig.leichtzumerken@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@amd.com>

for the series,

Reviewed-by: Rob Clark <robdclark@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
>
diff mbox series

Patch

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 */