linux-arm-msm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/4] dma-buf: add dma_fence_describe and dma_resv_describe
@ 2021-09-24  7:17 Christian König
  2021-09-24  7:17 ` [PATCH 2/4] drm/msm: allow compile_test on !ARM Christian König
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Christian König @ 2021-09-24  7:17 UTC (permalink / raw)
  To: dri-devel, linux-media, linaro-mm-sig, etnaviv, linux-arm-msm, freedreno
  Cc: l.stach, christian.gmeiner, linux+etnaviv, robdclark, sean

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(-)

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


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/4] drm/msm: allow compile_test on !ARM
  2021-09-24  7:17 [PATCH 1/4] dma-buf: add dma_fence_describe and dma_resv_describe Christian König
@ 2021-09-24  7:17 ` Christian König
  2021-09-27  7:01   ` Christian König
  2021-09-24  7:17 ` [PATCH 3/4] drm/msm: use the new dma_resv_describe Christian König
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Christian König @ 2021-09-24  7:17 UTC (permalink / raw)
  To: dri-devel, linux-media, linaro-mm-sig, etnaviv, linux-arm-msm, freedreno
  Cc: l.stach, christian.gmeiner, linux+etnaviv, robdclark, sean

MSM is one of the few drivers which won't even compile
test on !ARM platforms.

Looking into this a bit more it turned out that there is
actually not that much missing to at least let the driver
compile on x86 as well.

So this patch replaces the use of phys_to_page() with the
open coded version and provides a dummy for of_drm_find_bridge().

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/msm/Kconfig   |  4 ++--
 drivers/gpu/drm/msm/msm_gem.c |  2 +-
 include/drm/drm_bridge.h      | 10 +++++++++-
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/msm/Kconfig b/drivers/gpu/drm/msm/Kconfig
index e9c6af78b1d7..5879f67bc88c 100644
--- a/drivers/gpu/drm/msm/Kconfig
+++ b/drivers/gpu/drm/msm/Kconfig
@@ -3,9 +3,9 @@
 config DRM_MSM
 	tristate "MSM DRM"
 	depends on DRM
-	depends on ARCH_QCOM || SOC_IMX5 || (ARM && COMPILE_TEST)
+	depends on ARCH_QCOM || SOC_IMX5 || COMPILE_TEST
 	depends on IOMMU_SUPPORT
-	depends on OF && COMMON_CLK
+	depends on (OF && COMMON_CLK) || COMPILE_TEST
 	depends on QCOM_OCMEM || QCOM_OCMEM=n
 	depends on QCOM_LLCC || QCOM_LLCC=n
 	depends on QCOM_COMMAND_DB || QCOM_COMMAND_DB=n
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index 14907622769f..5bd511f07c07 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -85,7 +85,7 @@ static struct page **get_pages_vram(struct drm_gem_object *obj, int npages)
 
 	paddr = physaddr(obj);
 	for (i = 0; i < npages; i++) {
-		p[i] = phys_to_page(paddr);
+		p[i] = pfn_to_page(__phys_to_pfn(paddr));
 		paddr += PAGE_SIZE;
 	}
 
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
index 9cdbd209388e..a445298e1c25 100644
--- a/include/drm/drm_bridge.h
+++ b/include/drm/drm_bridge.h
@@ -790,11 +790,19 @@ drm_priv_to_bridge(struct drm_private_obj *priv)
 
 void drm_bridge_add(struct drm_bridge *bridge);
 void drm_bridge_remove(struct drm_bridge *bridge);
-struct drm_bridge *of_drm_find_bridge(struct device_node *np);
 int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge,
 		      struct drm_bridge *previous,
 		      enum drm_bridge_attach_flags flags);
 
+#ifdef CONFIG_OF
+struct drm_bridge *of_drm_find_bridge(struct device_node *np);
+#else
+static inline struct drm_bridge *of_drm_find_bridge(struct device_node *np)
+{
+	return NULL;
+}
+#endif
+
 /**
  * drm_bridge_get_next_bridge() - Get the next bridge in the chain
  * @bridge: bridge object
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/4] drm/msm: use the new dma_resv_describe
  2021-09-24  7:17 [PATCH 1/4] dma-buf: add dma_fence_describe and dma_resv_describe Christian König
  2021-09-24  7:17 ` [PATCH 2/4] drm/msm: allow compile_test on !ARM Christian König
@ 2021-09-24  7:17 ` Christian König
  2021-09-24  7:17 ` [PATCH 4/4] drm/etnaviv: use dma_resv_describe Christian König
  2021-09-24 20:58 ` [PATCH 1/4] dma-buf: add dma_fence_describe and dma_resv_describe Rob Clark
  3 siblings, 0 replies; 9+ messages in thread
From: Christian König @ 2021-09-24  7:17 UTC (permalink / raw)
  To: dri-devel, linux-media, linaro-mm-sig, etnaviv, linux-arm-msm, freedreno
  Cc: l.stach, christian.gmeiner, linux+etnaviv, robdclark, sean

Instead of hand rolling pretty much the same code.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/msm/msm_gem.c | 20 +-------------------
 1 file changed, 1 insertion(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index 5bd511f07c07..3878b8dc2d59 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -865,23 +865,11 @@ int msm_gem_cpu_fini(struct drm_gem_object *obj)
 }
 
 #ifdef CONFIG_DEBUG_FS
-static void describe_fence(struct dma_fence *fence, const char *type,
-		struct seq_file *m)
-{
-	if (!dma_fence_is_signaled(fence))
-		seq_printf(m, "\t%9s: %s %s seq %llu\n", type,
-				fence->ops->get_driver_name(fence),
-				fence->ops->get_timeline_name(fence),
-				fence->seqno);
-}
-
 void msm_gem_describe(struct drm_gem_object *obj, struct seq_file *m,
 		struct msm_gem_stats *stats)
 {
 	struct msm_gem_object *msm_obj = to_msm_bo(obj);
 	struct dma_resv *robj = obj->resv;
-	struct dma_resv_iter cursor;
-	struct dma_fence *fence;
 	struct msm_gem_vma *vma;
 	uint64_t off = drm_vma_node_start(&obj->vma_node);
 	const char *madv;
@@ -955,13 +943,7 @@ void msm_gem_describe(struct drm_gem_object *obj, struct seq_file *m,
 		seq_puts(m, "\n");
 	}
 
-	dma_resv_for_each_fence(&cursor, robj, true, fence) {
-		if (dma_resv_iter_is_exclusive(&cursor))
-			describe_fence(fence, "Exclusive", m);
-		else
-			describe_fence(fence, "Shared", m);
-	}
-
+	dma_resv_describe(robj, m);
 	msm_gem_unlock(obj);
 }
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 4/4] drm/etnaviv: use dma_resv_describe
  2021-09-24  7:17 [PATCH 1/4] dma-buf: add dma_fence_describe and dma_resv_describe Christian König
  2021-09-24  7:17 ` [PATCH 2/4] drm/msm: allow compile_test on !ARM Christian König
  2021-09-24  7:17 ` [PATCH 3/4] drm/msm: use the new dma_resv_describe Christian König
@ 2021-09-24  7:17 ` Christian König
  2021-09-24 20:58 ` [PATCH 1/4] dma-buf: add dma_fence_describe and dma_resv_describe Rob Clark
  3 siblings, 0 replies; 9+ messages in thread
From: Christian König @ 2021-09-24  7:17 UTC (permalink / raw)
  To: dri-devel, linux-media, linaro-mm-sig, etnaviv, linux-arm-msm, freedreno
  Cc: l.stach, christian.gmeiner, linux+etnaviv, robdclark, sean

Instead of dumping the fence info manually.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/etnaviv/etnaviv_gem.c | 26 +++++++-------------------
 1 file changed, 7 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
index 0eeb33de2ff4..304b006e86bb 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
@@ -425,36 +425,24 @@ int etnaviv_gem_wait_bo(struct etnaviv_gpu *gpu, struct drm_gem_object *obj,
 }
 
 #ifdef CONFIG_DEBUG_FS
-static void etnaviv_gem_describe_fence(struct dma_fence *fence,
-	const char *type, struct seq_file *m)
-{
-	seq_printf(m, "\t%9s: %s %s seq %llu\n", type,
-		   fence->ops->get_driver_name(fence),
-		   fence->ops->get_timeline_name(fence),
-		   fence->seqno);
-}
-
 static void etnaviv_gem_describe(struct drm_gem_object *obj, struct seq_file *m)
 {
 	struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
 	struct dma_resv *robj = obj->resv;
-	struct dma_resv_iter cursor;
-	struct dma_fence *fence;
 	unsigned long off = drm_vma_node_start(&obj->vma_node);
+	int r;
 
 	seq_printf(m, "%08x: %c %2d (%2d) %08lx %p %zd\n",
 			etnaviv_obj->flags, is_active(etnaviv_obj) ? 'A' : 'I',
 			obj->name, kref_read(&obj->refcount),
 			off, etnaviv_obj->vaddr, obj->size);
 
-	dma_resv_iter_begin(&cursor, robj, true);
-	dma_resv_for_each_fence_unlocked(&cursor, fence) {
-		if (dma_resv_iter_is_exclusive(&cursor))
-			etnaviv_gem_describe_fence(fence, "Exclusive", m);
-		else
-			etnaviv_gem_describe_fence(fence, "Shared", m);
-	}
-	dma_resv_iter_end(&cursor);
+	r = dma_resv_lock(robj, NULL);
+	if (r)
+		return;
+
+	dma_resv_describe(robj, m);
+	dma_resv_unlock(robj);
 }
 
 void etnaviv_gem_describe_objects(struct etnaviv_drm_private *priv,
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/4] dma-buf: add dma_fence_describe and dma_resv_describe
  2021-09-24  7:17 [PATCH 1/4] dma-buf: add dma_fence_describe and dma_resv_describe Christian König
                   ` (2 preceding siblings ...)
  2021-09-24  7:17 ` [PATCH 4/4] drm/etnaviv: use dma_resv_describe Christian König
@ 2021-09-24 20:58 ` Rob Clark
  3 siblings, 0 replies; 9+ messages in thread
From: Rob Clark @ 2021-09-24 20:58 UTC (permalink / raw)
  To: Christian König
  Cc: dri-devel, open list:DMA BUFFER SHARING FRAMEWORK,
	moderated list:DMA BUFFER SHARING FRAMEWORK, The etnaviv authors,
	linux-arm-msm, freedreno, Lucas Stach, Christian Gmeiner,
	Russell King, Sean Paul

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
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/4] drm/msm: allow compile_test on !ARM
  2021-09-24  7:17 ` [PATCH 2/4] drm/msm: allow compile_test on !ARM Christian König
@ 2021-09-27  7:01   ` Christian König
  0 siblings, 0 replies; 9+ messages in thread
From: Christian König @ 2021-09-27  7:01 UTC (permalink / raw)
  To: dri-devel, linux-media, linaro-mm-sig, etnaviv, linux-arm-msm, freedreno
  Cc: l.stach, christian.gmeiner, linux+etnaviv, robdclark, sean

As long as nobody objects I'm going to push this one here to 
drm-misc-next with Rob's rb.

The other patches still need a bit more work, but being able to at least 
compile test MSM on x86 is really helpful.

Christian.

Am 24.09.21 um 09:17 schrieb Christian König:
> MSM is one of the few drivers which won't even compile
> test on !ARM platforms.
>
> Looking into this a bit more it turned out that there is
> actually not that much missing to at least let the driver
> compile on x86 as well.
>
> So this patch replaces the use of phys_to_page() with the
> open coded version and provides a dummy for of_drm_find_bridge().
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>   drivers/gpu/drm/msm/Kconfig   |  4 ++--
>   drivers/gpu/drm/msm/msm_gem.c |  2 +-
>   include/drm/drm_bridge.h      | 10 +++++++++-
>   3 files changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/Kconfig b/drivers/gpu/drm/msm/Kconfig
> index e9c6af78b1d7..5879f67bc88c 100644
> --- a/drivers/gpu/drm/msm/Kconfig
> +++ b/drivers/gpu/drm/msm/Kconfig
> @@ -3,9 +3,9 @@
>   config DRM_MSM
>   	tristate "MSM DRM"
>   	depends on DRM
> -	depends on ARCH_QCOM || SOC_IMX5 || (ARM && COMPILE_TEST)
> +	depends on ARCH_QCOM || SOC_IMX5 || COMPILE_TEST
>   	depends on IOMMU_SUPPORT
> -	depends on OF && COMMON_CLK
> +	depends on (OF && COMMON_CLK) || COMPILE_TEST
>   	depends on QCOM_OCMEM || QCOM_OCMEM=n
>   	depends on QCOM_LLCC || QCOM_LLCC=n
>   	depends on QCOM_COMMAND_DB || QCOM_COMMAND_DB=n
> diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
> index 14907622769f..5bd511f07c07 100644
> --- a/drivers/gpu/drm/msm/msm_gem.c
> +++ b/drivers/gpu/drm/msm/msm_gem.c
> @@ -85,7 +85,7 @@ static struct page **get_pages_vram(struct drm_gem_object *obj, int npages)
>   
>   	paddr = physaddr(obj);
>   	for (i = 0; i < npages; i++) {
> -		p[i] = phys_to_page(paddr);
> +		p[i] = pfn_to_page(__phys_to_pfn(paddr));
>   		paddr += PAGE_SIZE;
>   	}
>   
> diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h
> index 9cdbd209388e..a445298e1c25 100644
> --- a/include/drm/drm_bridge.h
> +++ b/include/drm/drm_bridge.h
> @@ -790,11 +790,19 @@ drm_priv_to_bridge(struct drm_private_obj *priv)
>   
>   void drm_bridge_add(struct drm_bridge *bridge);
>   void drm_bridge_remove(struct drm_bridge *bridge);
> -struct drm_bridge *of_drm_find_bridge(struct device_node *np);
>   int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge,
>   		      struct drm_bridge *previous,
>   		      enum drm_bridge_attach_flags flags);
>   
> +#ifdef CONFIG_OF
> +struct drm_bridge *of_drm_find_bridge(struct device_node *np);
> +#else
> +static inline struct drm_bridge *of_drm_find_bridge(struct device_node *np)
> +{
> +	return NULL;
> +}
> +#endif
> +
>   /**
>    * drm_bridge_get_next_bridge() - Get the next bridge in the chain
>    * @bridge: bridge object


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/4] dma-buf: add dma_fence_describe and dma_resv_describe
  2021-10-28  8:58 Christian König
  2021-10-29  9:17 ` kernel test robot
@ 2021-10-30 23:22 ` kernel test robot
  1 sibling, 0 replies; 9+ messages in thread
From: kernel test robot @ 2021-10-30 23:22 UTC (permalink / raw)
  To: Christian König, dri-devel, linux-media
  Cc: llvm, kbuild-all, etnaviv, linux-arm-msm, freedreno,
	virtualization, spice-devel

[-- Attachment #1: Type: text/plain, Size: 2724 bytes --]

Hi "Christian,

I love your patch! Yet something to improve:

[auto build test ERROR on drm-tip/drm-tip]
[also build test ERROR on next-20211029]
[cannot apply to drm/drm-next drm-intel/for-linux-next drm-exynos/exynos-drm-next tegra-drm/drm/tegra/for-next linus/master airlied/drm-next v5.15-rc7]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Christian-K-nig/dma-buf-add-dma_fence_describe-and-dma_resv_describe/20211028-171805
base:   git://anongit.freedesktop.org/drm/drm-tip drm-tip
config: hexagon-randconfig-r045-20211031 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project d321548c3ce987f4f21350ba1c81fdb5d4354224)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/80ae7cf414dbdb7fa9f48a46cc1bfa25b0a4fda7
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Christian-K-nig/dma-buf-add-dma_fence_describe-and-dma_resv_describe/20211028-171805
        git checkout 80ae7cf414dbdb7fa9f48a46cc1bfa25b0a4fda7
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=hexagon 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

>> drivers/dma-buf/dma-fence.c:919:2: error: implicit declaration of function 'seq_printf' [-Werror,-Wimplicit-function-declaration]
           seq_printf(seq, "%s %s seq %llu %ssignalled\n",
           ^
   1 error generated.


vim +/seq_printf +919 drivers/dma-buf/dma-fence.c

   909	
   910	/**
   911	 * dma_fence_describe - Dump fence describtion into seq_file
   912	 * @fence: the 6fence to describe
   913	 * @seq: the seq_file to put the textual description into
   914	 *
   915	 * Dump a textual description of the fence and it's state into the seq_file.
   916	 */
   917	void dma_fence_describe(struct dma_fence *fence, struct seq_file *seq)
   918	{
 > 919		seq_printf(seq, "%s %s seq %llu %ssignalled\n",
   920			   fence->ops->get_driver_name(fence),
   921			   fence->ops->get_timeline_name(fence), fence->seqno,
   922			   dma_fence_is_signaled(fence) ? "" : "un");
   923	}
   924	EXPORT_SYMBOL(dma_fence_describe);
   925	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 25610 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/4] dma-buf: add dma_fence_describe and dma_resv_describe
  2021-10-28  8:58 Christian König
@ 2021-10-29  9:17 ` kernel test robot
  2021-10-30 23:22 ` kernel test robot
  1 sibling, 0 replies; 9+ messages in thread
From: kernel test robot @ 2021-10-29  9:17 UTC (permalink / raw)
  To: Christian König, dri-devel, linux-media
  Cc: kbuild-all, etnaviv, linux-arm-msm, freedreno, virtualization,
	spice-devel

[-- Attachment #1: Type: text/plain, Size: 2793 bytes --]

Hi "Christian,

I love your patch! Yet something to improve:

[auto build test ERROR on drm-tip/drm-tip]
[also build test ERROR on next-20211028]
[cannot apply to drm/drm-next drm-intel/for-linux-next drm-exynos/exynos-drm-next tegra-drm/drm/tegra/for-next linus/master airlied/drm-next v5.15-rc7]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Christian-K-nig/dma-buf-add-dma_fence_describe-and-dma_resv_describe/20211028-171805
base:   git://anongit.freedesktop.org/drm/drm-tip drm-tip
config: m68k-allyesconfig (attached as .config)
compiler: m68k-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/80ae7cf414dbdb7fa9f48a46cc1bfa25b0a4fda7
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Christian-K-nig/dma-buf-add-dma_fence_describe-and-dma_resv_describe/20211028-171805
        git checkout 80ae7cf414dbdb7fa9f48a46cc1bfa25b0a4fda7
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross ARCH=m68k 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/dma-buf/dma-fence.c: In function 'dma_fence_describe':
>> drivers/dma-buf/dma-fence.c:919:9: error: implicit declaration of function 'seq_printf'; did you mean 'bstr_printf'? [-Werror=implicit-function-declaration]
     919 |         seq_printf(seq, "%s %s seq %llu %ssignalled\n",
         |         ^~~~~~~~~~
         |         bstr_printf
   cc1: all warnings being treated as errors


vim +919 drivers/dma-buf/dma-fence.c

   909	
   910	/**
   911	 * dma_fence_describe - Dump fence describtion into seq_file
   912	 * @fence: the 6fence to describe
   913	 * @seq: the seq_file to put the textual description into
   914	 *
   915	 * Dump a textual description of the fence and it's state into the seq_file.
   916	 */
   917	void dma_fence_describe(struct dma_fence *fence, struct seq_file *seq)
   918	{
 > 919		seq_printf(seq, "%s %s seq %llu %ssignalled\n",
   920			   fence->ops->get_driver_name(fence),
   921			   fence->ops->get_timeline_name(fence), fence->seqno,
   922			   dma_fence_is_signaled(fence) ? "" : "un");
   923	}
   924	EXPORT_SYMBOL(dma_fence_describe);
   925	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 62001 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/4] dma-buf: add dma_fence_describe and dma_resv_describe
@ 2021-10-28  8:58 Christian König
  2021-10-29  9:17 ` kernel test robot
  2021-10-30 23:22 ` kernel test robot
  0 siblings, 2 replies; 9+ messages in thread
From: Christian König @ 2021-10-28  8:58 UTC (permalink / raw)
  To: dri-devel, linux-media
  Cc: etnaviv, linux-arm-msm, freedreno, virtualization, spice-devel

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>
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 7b619998f03a..1d6f6c6a0b09 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -1332,8 +1332,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;
@@ -1361,14 +1359,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 9eb2baa387d4..ff3c0558b3b8 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
@@ -666,6 +667,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 dbd235ab447f..09c6063b199a 100644
--- a/include/linux/dma-resv.h
+++ b/include/linux/dma-resv.h
@@ -490,5 +490,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


^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2021-10-30 23:23 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-24  7:17 [PATCH 1/4] dma-buf: add dma_fence_describe and dma_resv_describe Christian König
2021-09-24  7:17 ` [PATCH 2/4] drm/msm: allow compile_test on !ARM Christian König
2021-09-27  7:01   ` Christian König
2021-09-24  7:17 ` [PATCH 3/4] drm/msm: use the new dma_resv_describe Christian König
2021-09-24  7:17 ` [PATCH 4/4] drm/etnaviv: use dma_resv_describe Christian König
2021-09-24 20:58 ` [PATCH 1/4] dma-buf: add dma_fence_describe and dma_resv_describe Rob Clark
2021-10-28  8:58 Christian König
2021-10-29  9:17 ` kernel test robot
2021-10-30 23:22 ` kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).