Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] drm/i915: make struct intel_frontbuffer opaque
@ 2024-06-17 14:18 Jani Nikula
  2024-06-17 14:18 ` [PATCH 1/5] drm/i915/frontbuffer: un-inline frontbuffer bits checks Jani Nikula
                   ` (5 more replies)
  0 siblings, 6 replies; 9+ messages in thread
From: Jani Nikula @ 2024-06-17 14:18 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: jani.nikula

Hide the struct intel_frontbuffer implementation to add more clarity in
the interface boundaries.


Jani Nikula (5):
  drm/i915/frontbuffer: un-inline frontbuffer bits checks
  drm/i915/frontbuffer: hide ->bits more
  drm/i915/frontbuffer: add low-level kref accessors
  drm/i915/frontbuffer: hide ->write
  drm/i915/frontbuffer: make struct intel_frontbuffer opaque

 drivers/gpu/drm/i915/display/intel_fb.c       |  2 +-
 .../gpu/drm/i915/display/intel_frontbuffer.c  | 57 +++++++++++++++++--
 .../gpu/drm/i915/display/intel_frontbuffer.h  | 53 ++++++-----------
 .../drm/i915/display/intel_plane_initial.c    |  2 +-
 .../i915/gem/i915_gem_object_frontbuffer.h    |  4 +-
 drivers/gpu/drm/i915/i915_vma.c               |  2 +-
 drivers/gpu/drm/xe/display/xe_plane_initial.c |  2 +-
 7 files changed, 75 insertions(+), 47 deletions(-)

-- 
2.39.2


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

* [PATCH 1/5] drm/i915/frontbuffer: un-inline frontbuffer bits checks
  2024-06-17 14:18 [PATCH 0/5] drm/i915: make struct intel_frontbuffer opaque Jani Nikula
@ 2024-06-17 14:18 ` Jani Nikula
  2024-06-17 14:18 ` [PATCH 2/5] drm/i915/frontbuffer: hide ->bits more Jani Nikula
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Jani Nikula @ 2024-06-17 14:18 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: jani.nikula

Move frontbuffer bits read and check from intel_frontbuffer.h inline
functions to intel_frontbuffer.c, in preparation for making struct
intel_frontbuffer opaque.

Rename __intel_fb_* to __intel_frontbuffer_* while at it, because fb
sounds like framebuffer more than frontbuffer.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 .../gpu/drm/i915/display/intel_frontbuffer.c  | 22 ++++++++++-----
 .../gpu/drm/i915/display/intel_frontbuffer.h  | 27 +++++--------------
 2 files changed, 22 insertions(+), 27 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c
index 4923c340a0b6..7964eaa6a60a 100644
--- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c
+++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c
@@ -167,11 +167,15 @@ void intel_frontbuffer_flip(struct drm_i915_private *i915,
 	frontbuffer_flush(i915, frontbuffer_bits, ORIGIN_FLIP);
 }
 
-void __intel_fb_invalidate(struct intel_frontbuffer *front,
-			   enum fb_op_origin origin,
-			   unsigned int frontbuffer_bits)
+bool __intel_frontbuffer_invalidate(struct intel_frontbuffer *front,
+				    enum fb_op_origin origin)
 {
 	struct drm_i915_private *i915 = intel_bo_to_i915(front->obj);
+	unsigned int frontbuffer_bits;
+
+	frontbuffer_bits = atomic_read(&front->bits);
+	if (!frontbuffer_bits)
+		return false;
 
 	if (origin == ORIGIN_CS) {
 		spin_lock(&i915->display.fb_tracking.lock);
@@ -186,13 +190,19 @@ void __intel_fb_invalidate(struct intel_frontbuffer *front,
 	intel_psr_invalidate(i915, frontbuffer_bits, origin);
 	intel_drrs_invalidate(i915, frontbuffer_bits);
 	intel_fbc_invalidate(i915, frontbuffer_bits, origin);
+
+	return true;
 }
 
-void __intel_fb_flush(struct intel_frontbuffer *front,
-		      enum fb_op_origin origin,
-		      unsigned int frontbuffer_bits)
+void __intel_frontbuffer_flush(struct intel_frontbuffer *front,
+			       enum fb_op_origin origin)
 {
 	struct drm_i915_private *i915 = intel_bo_to_i915(front->obj);
+	unsigned int frontbuffer_bits;
+
+	frontbuffer_bits = atomic_read(&front->bits);
+	if (!frontbuffer_bits)
+		return;
 
 	if (origin == ORIGIN_CS) {
 		spin_lock(&i915->display.fb_tracking.lock);
diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.h b/drivers/gpu/drm/i915/display/intel_frontbuffer.h
index abb51e8bb920..f4a3495300de 100644
--- a/drivers/gpu/drm/i915/display/intel_frontbuffer.h
+++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.h
@@ -79,9 +79,8 @@ void intel_frontbuffer_put(struct intel_frontbuffer *front);
 struct intel_frontbuffer *
 intel_frontbuffer_get(struct drm_i915_gem_object *obj);
 
-void __intel_fb_invalidate(struct intel_frontbuffer *front,
-			   enum fb_op_origin origin,
-			   unsigned int frontbuffer_bits);
+bool __intel_frontbuffer_invalidate(struct intel_frontbuffer *front,
+				    enum fb_op_origin origin);
 
 /**
  * intel_frontbuffer_invalidate - invalidate frontbuffer object
@@ -97,22 +96,14 @@ void __intel_fb_invalidate(struct intel_frontbuffer *front,
 static inline bool intel_frontbuffer_invalidate(struct intel_frontbuffer *front,
 						enum fb_op_origin origin)
 {
-	unsigned int frontbuffer_bits;
-
 	if (!front)
 		return false;
 
-	frontbuffer_bits = atomic_read(&front->bits);
-	if (!frontbuffer_bits)
-		return false;
-
-	__intel_fb_invalidate(front, origin, frontbuffer_bits);
-	return true;
+	return __intel_frontbuffer_invalidate(front, origin);
 }
 
-void __intel_fb_flush(struct intel_frontbuffer *front,
-		      enum fb_op_origin origin,
-		      unsigned int frontbuffer_bits);
+void __intel_frontbuffer_flush(struct intel_frontbuffer *front,
+			       enum fb_op_origin origin);
 
 /**
  * intel_frontbuffer_flush - flush frontbuffer object
@@ -125,16 +116,10 @@ void __intel_fb_flush(struct intel_frontbuffer *front,
 static inline void intel_frontbuffer_flush(struct intel_frontbuffer *front,
 					   enum fb_op_origin origin)
 {
-	unsigned int frontbuffer_bits;
-
 	if (!front)
 		return;
 
-	frontbuffer_bits = atomic_read(&front->bits);
-	if (!frontbuffer_bits)
-		return;
-
-	__intel_fb_flush(front, origin, frontbuffer_bits);
+	__intel_frontbuffer_flush(front, origin);
 }
 
 void intel_frontbuffer_queue_flush(struct intel_frontbuffer *front);
-- 
2.39.2


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

* [PATCH 2/5] drm/i915/frontbuffer: hide ->bits more
  2024-06-17 14:18 [PATCH 0/5] drm/i915: make struct intel_frontbuffer opaque Jani Nikula
  2024-06-17 14:18 ` [PATCH 1/5] drm/i915/frontbuffer: un-inline frontbuffer bits checks Jani Nikula
@ 2024-06-17 14:18 ` Jani Nikula
  2024-06-17 14:19 ` [PATCH 3/5] drm/i915/frontbuffer: add low-level kref accessors Jani Nikula
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Jani Nikula @ 2024-06-17 14:18 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: jani.nikula

Add helpers for ->bits in preparation for making struct
intel_frontbuffer opaque.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/display/intel_fb.c            |  2 +-
 drivers/gpu/drm/i915/display/intel_frontbuffer.c   | 10 ++++++++++
 drivers/gpu/drm/i915/display/intel_frontbuffer.h   |  3 +++
 drivers/gpu/drm/i915/display/intel_plane_initial.c |  2 +-
 drivers/gpu/drm/xe/display/xe_plane_initial.c      |  2 +-
 5 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_fb.c b/drivers/gpu/drm/i915/display/intel_fb.c
index 8069abf91c5e..a49b5a1589a6 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.c
+++ b/drivers/gpu/drm/i915/display/intel_fb.c
@@ -1965,7 +1965,7 @@ static int intel_user_framebuffer_dirty(struct drm_framebuffer *fb,
 	struct frontbuffer_fence_cb *cb;
 	int ret = 0;
 
-	if (!atomic_read(&front->bits))
+	if (!intel_frontbuffer_bits(front))
 		return 0;
 
 	if (dma_resv_test_signaled(intel_bo_to_drm_bo(obj)->resv, dma_resv_usage_rw(false)))
diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c
index 7964eaa6a60a..effb13e8a6bb 100644
--- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c
+++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c
@@ -67,6 +67,16 @@
 #include "intel_psr.h"
 #include "intel_tdf.h"
 
+unsigned int intel_frontbuffer_bits(struct intel_frontbuffer *front)
+{
+	return atomic_read(&front->bits);
+}
+
+void intel_frontbuffer_bits_or(struct intel_frontbuffer *front, unsigned int bits)
+{
+	atomic_or(bits, &front->bits);
+}
+
 /**
  * frontbuffer_flush - flush frontbuffer
  * @i915: i915 device
diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.h b/drivers/gpu/drm/i915/display/intel_frontbuffer.h
index f4a3495300de..827b0129da71 100644
--- a/drivers/gpu/drm/i915/display/intel_frontbuffer.h
+++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.h
@@ -67,6 +67,9 @@ struct intel_frontbuffer {
 	GENMASK(INTEL_FRONTBUFFER_BITS_PER_PIPE * ((pipe) + 1) - 1,	\
 		INTEL_FRONTBUFFER_BITS_PER_PIPE * (pipe))
 
+unsigned int intel_frontbuffer_bits(struct intel_frontbuffer *front);
+void intel_frontbuffer_bits_or(struct intel_frontbuffer *front, unsigned int bits);
+
 void intel_frontbuffer_flip_prepare(struct drm_i915_private *i915,
 				    unsigned frontbuffer_bits);
 void intel_frontbuffer_flip_complete(struct drm_i915_private *i915,
diff --git a/drivers/gpu/drm/i915/display/intel_plane_initial.c b/drivers/gpu/drm/i915/display/intel_plane_initial.c
index ada1792df5b3..7cc9863ffce8 100644
--- a/drivers/gpu/drm/i915/display/intel_plane_initial.c
+++ b/drivers/gpu/drm/i915/display/intel_plane_initial.c
@@ -391,7 +391,7 @@ intel_find_initial_plane_obj(struct intel_crtc *crtc,
 	plane_state->uapi.crtc = &crtc->base;
 	intel_plane_copy_uapi_to_hw_state(plane_state, plane_state, crtc);
 
-	atomic_or(plane->frontbuffer_bit, &to_intel_frontbuffer(fb)->bits);
+	intel_frontbuffer_bits_or(to_intel_frontbuffer(fb), plane->frontbuffer_bit);
 }
 
 static void plane_config_fini(struct intel_initial_plane_config *plane_config)
diff --git a/drivers/gpu/drm/xe/display/xe_plane_initial.c b/drivers/gpu/drm/xe/display/xe_plane_initial.c
index e135b20962d9..a838459c49ae 100644
--- a/drivers/gpu/drm/xe/display/xe_plane_initial.c
+++ b/drivers/gpu/drm/xe/display/xe_plane_initial.c
@@ -232,7 +232,7 @@ intel_find_initial_plane_obj(struct intel_crtc *crtc,
 	plane_state->uapi.crtc = &crtc->base;
 	intel_plane_copy_uapi_to_hw_state(plane_state, plane_state, crtc);
 
-	atomic_or(plane->frontbuffer_bit, &to_intel_frontbuffer(fb)->bits);
+	intel_frontbuffer_bits_or(to_intel_frontbuffer(fb), plane->frontbuffer_bit);
 
 	plane_config->vma = vma;
 
-- 
2.39.2


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

* [PATCH 3/5] drm/i915/frontbuffer: add low-level kref accessors
  2024-06-17 14:18 [PATCH 0/5] drm/i915: make struct intel_frontbuffer opaque Jani Nikula
  2024-06-17 14:18 ` [PATCH 1/5] drm/i915/frontbuffer: un-inline frontbuffer bits checks Jani Nikula
  2024-06-17 14:18 ` [PATCH 2/5] drm/i915/frontbuffer: hide ->bits more Jani Nikula
@ 2024-06-17 14:19 ` Jani Nikula
  2024-06-17 14:19 ` [PATCH 4/5] drm/i915/frontbuffer: hide ->write Jani Nikula
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 9+ messages in thread
From: Jani Nikula @ 2024-06-17 14:19 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: jani.nikula

Add _raw accessors for front->ref to avoid direct access from outside of
intel_frontbuffer.c, in preparation for making struct intel_frontbuffer
opaque.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/display/intel_frontbuffer.c       | 10 ++++++++++
 drivers/gpu/drm/i915/display/intel_frontbuffer.h       |  3 +++
 drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h |  4 ++--
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c
index effb13e8a6bb..42defe2b7661 100644
--- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c
+++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c
@@ -77,6 +77,16 @@ void intel_frontbuffer_bits_or(struct intel_frontbuffer *front, unsigned int bit
 	atomic_or(bits, &front->bits);
 }
 
+bool intel_frontbuffer_get_unless_zero_raw(struct intel_frontbuffer *front)
+{
+	return kref_get_unless_zero(&front->ref);
+}
+
+void intel_frontbuffer_get_raw(struct intel_frontbuffer *front)
+{
+	kref_get(&front->ref);
+}
+
 /**
  * frontbuffer_flush - flush frontbuffer
  * @i915: i915 device
diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.h b/drivers/gpu/drm/i915/display/intel_frontbuffer.h
index 827b0129da71..221f41096416 100644
--- a/drivers/gpu/drm/i915/display/intel_frontbuffer.h
+++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.h
@@ -79,6 +79,9 @@ void intel_frontbuffer_flip(struct drm_i915_private *i915,
 
 void intel_frontbuffer_put(struct intel_frontbuffer *front);
 
+bool intel_frontbuffer_get_unless_zero_raw(struct intel_frontbuffer *front);
+void intel_frontbuffer_get_raw(struct intel_frontbuffer *front);
+
 struct intel_frontbuffer *
 intel_frontbuffer_get(struct drm_i915_gem_object *obj);
 
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h
index 9fbf14867a2a..22df3c70c8a6 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h
+++ b/drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h
@@ -56,7 +56,7 @@ i915_gem_object_get_frontbuffer(const struct drm_i915_gem_object *obj)
 		if (!front)
 			break;
 
-		if (unlikely(!kref_get_unless_zero(&front->ref)))
+		if (unlikely(!intel_frontbuffer_get_unless_zero_raw(front)))
 			continue;
 
 		if (likely(front == rcu_access_pointer(obj->frontbuffer)))
@@ -92,7 +92,7 @@ i915_gem_object_set_frontbuffer(struct drm_i915_gem_object *obj,
 		drm_gem_object_put(intel_bo_to_drm_bo(obj));
 	} else if (rcu_access_pointer(obj->frontbuffer)) {
 		cur = rcu_dereference_protected(obj->frontbuffer, true);
-		kref_get(&cur->ref);
+		intel_frontbuffer_get_raw(cur);
 	} else {
 		drm_gem_object_get(intel_bo_to_drm_bo(obj));
 		rcu_assign_pointer(obj->frontbuffer, front);
-- 
2.39.2


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

* [PATCH 4/5] drm/i915/frontbuffer: hide ->write
  2024-06-17 14:18 [PATCH 0/5] drm/i915: make struct intel_frontbuffer opaque Jani Nikula
                   ` (2 preceding siblings ...)
  2024-06-17 14:19 ` [PATCH 3/5] drm/i915/frontbuffer: add low-level kref accessors Jani Nikula
@ 2024-06-17 14:19 ` Jani Nikula
  2024-06-17 14:19 ` [PATCH 5/5] drm/i915/frontbuffer: make struct intel_frontbuffer opaque Jani Nikula
  2024-06-17 14:27 ` ✗ Fi.CI.BUILD: failure for drm/i915: " Patchwork
  5 siblings, 0 replies; 9+ messages in thread
From: Jani Nikula @ 2024-06-17 14:19 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: jani.nikula

Add accessor to frontbuffer ->write to avoid direct access from outside
of intel_frontbuffer.c in preparation for making struct
intel_frontbuffer opaque.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 drivers/gpu/drm/i915/display/intel_frontbuffer.c | 5 +++++
 drivers/gpu/drm/i915/display/intel_frontbuffer.h | 2 ++
 drivers/gpu/drm/i915/i915_vma.c                  | 2 +-
 3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c
index 42defe2b7661..dd5fd1e2859e 100644
--- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c
+++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c
@@ -87,6 +87,11 @@ void intel_frontbuffer_get_raw(struct intel_frontbuffer *front)
 	kref_get(&front->ref);
 }
 
+struct i915_active *intel_frontbuffer_active(struct intel_frontbuffer *front)
+{
+	return &front->write;
+}
+
 /**
  * frontbuffer_flush - flush frontbuffer
  * @i915: i915 device
diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.h b/drivers/gpu/drm/i915/display/intel_frontbuffer.h
index 221f41096416..62d6e3cedea4 100644
--- a/drivers/gpu/drm/i915/display/intel_frontbuffer.h
+++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.h
@@ -134,4 +134,6 @@ void intel_frontbuffer_track(struct intel_frontbuffer *old,
 			     struct intel_frontbuffer *new,
 			     unsigned int frontbuffer_bits);
 
+struct i915_active *intel_frontbuffer_active(struct intel_frontbuffer *front);
+
 #endif /* __INTEL_FRONTBUFFER_H__ */
diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c
index d2f064d2525c..2b5cc7af19c5 100644
--- a/drivers/gpu/drm/i915/i915_vma.c
+++ b/drivers/gpu/drm/i915/i915_vma.c
@@ -1975,7 +1975,7 @@ int _i915_vma_move_to_active(struct i915_vma *vma,
 		front = i915_gem_object_get_frontbuffer(obj);
 		if (unlikely(front)) {
 			if (intel_frontbuffer_invalidate(front, ORIGIN_CS))
-				i915_active_add_request(&front->write, rq);
+				i915_active_add_request(intel_frontbuffer_active(front), rq);
 			intel_frontbuffer_put(front);
 		}
 	}
-- 
2.39.2


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

* [PATCH 5/5] drm/i915/frontbuffer: make struct intel_frontbuffer opaque
  2024-06-17 14:18 [PATCH 0/5] drm/i915: make struct intel_frontbuffer opaque Jani Nikula
                   ` (3 preceding siblings ...)
  2024-06-17 14:19 ` [PATCH 4/5] drm/i915/frontbuffer: hide ->write Jani Nikula
@ 2024-06-17 14:19 ` Jani Nikula
  2024-06-18 23:54   ` kernel test robot
  2024-06-17 14:27 ` ✗ Fi.CI.BUILD: failure for drm/i915: " Patchwork
  5 siblings, 1 reply; 9+ messages in thread
From: Jani Nikula @ 2024-06-17 14:19 UTC (permalink / raw)
  To: intel-gfx, intel-xe; +Cc: jani.nikula

Hide struct intel_frontbuffer implementation details within
intel_frontbuffer.c.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 .../gpu/drm/i915/display/intel_frontbuffer.c   | 10 ++++++++++
 .../gpu/drm/i915/display/intel_frontbuffer.h   | 18 ++++--------------
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.c b/drivers/gpu/drm/i915/display/intel_frontbuffer.c
index dd5fd1e2859e..53a4cbc43ae3 100644
--- a/drivers/gpu/drm/i915/display/intel_frontbuffer.c
+++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.c
@@ -67,6 +67,16 @@
 #include "intel_psr.h"
 #include "intel_tdf.h"
 
+struct intel_frontbuffer {
+	struct kref ref;
+	atomic_t bits;
+	struct i915_active write;
+	struct drm_i915_gem_object *obj;
+	struct rcu_head rcu;
+
+	struct work_struct flush_work;
+};
+
 unsigned int intel_frontbuffer_bits(struct intel_frontbuffer *front)
 {
 	return atomic_read(&front->bits);
diff --git a/drivers/gpu/drm/i915/display/intel_frontbuffer.h b/drivers/gpu/drm/i915/display/intel_frontbuffer.h
index 62d6e3cedea4..a6212ee4ed12 100644
--- a/drivers/gpu/drm/i915/display/intel_frontbuffer.h
+++ b/drivers/gpu/drm/i915/display/intel_frontbuffer.h
@@ -24,13 +24,13 @@
 #ifndef __INTEL_FRONTBUFFER_H__
 #define __INTEL_FRONTBUFFER_H__
 
-#include <linux/atomic.h>
 #include <linux/bits.h>
-#include <linux/kref.h>
-
-#include "i915_active_types.h"
+#include <linux/types.h>
 
+struct drm_i915_gem_object;
 struct drm_i915_private;
+struct i915_active;
+struct intel_frontbuffer;
 
 enum fb_op_origin {
 	ORIGIN_CPU = 0,
@@ -40,16 +40,6 @@ enum fb_op_origin {
 	ORIGIN_CURSOR_UPDATE,
 };
 
-struct intel_frontbuffer {
-	struct kref ref;
-	atomic_t bits;
-	struct i915_active write;
-	struct drm_i915_gem_object *obj;
-	struct rcu_head rcu;
-
-	struct work_struct flush_work;
-};
-
 /*
  * Frontbuffer tracking bits. Set in obj->frontbuffer_bits while a gem bo is
  * considered to be the frontbuffer for the given plane interface-wise. This
-- 
2.39.2


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

* ✗ Fi.CI.BUILD: failure for drm/i915: make struct intel_frontbuffer opaque
  2024-06-17 14:18 [PATCH 0/5] drm/i915: make struct intel_frontbuffer opaque Jani Nikula
                   ` (4 preceding siblings ...)
  2024-06-17 14:19 ` [PATCH 5/5] drm/i915/frontbuffer: make struct intel_frontbuffer opaque Jani Nikula
@ 2024-06-17 14:27 ` Patchwork
  2024-06-17 14:31   ` Jani Nikula
  5 siblings, 1 reply; 9+ messages in thread
From: Patchwork @ 2024-06-17 14:27 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: make struct intel_frontbuffer opaque
URL   : https://patchwork.freedesktop.org/series/134957/
State : failure

== Summary ==

Error: make failed
  CALL    scripts/checksyscalls.sh
  DESCEND objtool
  INSTALL libsubcmd_headers
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_clflush.o
In file included from ./include/linux/array_size.h:5,
                 from ./include/linux/string.h:6,
                 from ./include/linux/scatterlist.h:5,
                 from ./include/drm/drm_cache.h:36,
                 from drivers/gpu/drm/i915/gem/i915_gem_clflush.c:7:
drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h: In function ‘i915_gem_object_flush_frontbuffer’:
./include/linux/rcupdate.h:463:9: error: dereferencing pointer to incomplete type ‘struct intel_frontbuffer’
  463 |  typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
      |         ^
./include/linux/compiler.h:77:42: note: in definition of macro ‘unlikely’
   77 | # define unlikely(x) __builtin_expect(!!(x), 0)
      |                                          ^
./include/linux/rcupdate.h:582:31: note: in expansion of macro ‘__rcu_access_pointer’
  582 | #define rcu_access_pointer(p) __rcu_access_pointer((p), __UNIQUE_ID(rcu), __rcu)
      |                               ^~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h:24:15: note: in expansion of macro ‘rcu_access_pointer’
   24 |  if (unlikely(rcu_access_pointer(obj->frontbuffer)))
      |               ^~~~~~~~~~~~~~~~~~
drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h: In function ‘i915_gem_object_get_frontbuffer’:
./include/linux/rcupdate.h:463:9: error: dereferencing pointer to incomplete type ‘struct intel_frontbuffer’
  463 |  typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
      |         ^
./include/linux/compiler.h:76:40: note: in definition of macro ‘likely’
   76 | # define likely(x) __builtin_expect(!!(x), 1)
      |                                        ^
./include/linux/rcupdate.h:582:31: note: in expansion of macro ‘__rcu_access_pointer’
  582 | #define rcu_access_pointer(p) __rcu_access_pointer((p), __UNIQUE_ID(rcu), __rcu)
      |                               ^~~~~~~~~~~~~~~~~~~~
drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h:50:14: note: in expansion of macro ‘rcu_access_pointer’
   50 |  if (likely(!rcu_access_pointer(obj->frontbuffer)))
      |              ^~~~~~~~~~~~~~~~~~
make[6]: *** [scripts/Makefile.build:244: drivers/gpu/drm/i915/gem/i915_gem_clflush.o] Error 1
make[5]: *** [scripts/Makefile.build:485: drivers/gpu/drm/i915] Error 2
make[4]: *** [scripts/Makefile.build:485: drivers/gpu/drm] Error 2
make[3]: *** [scripts/Makefile.build:485: drivers/gpu] Error 2
make[2]: *** [scripts/Makefile.build:485: drivers] Error 2
make[1]: *** [/home/kbuild/kernel/Makefile:1934: .] Error 2
make: *** [Makefile:240: __sub-make] Error 2
Build failed, no error log produced



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

* Re: ✗ Fi.CI.BUILD: failure for drm/i915: make struct intel_frontbuffer opaque
  2024-06-17 14:27 ` ✗ Fi.CI.BUILD: failure for drm/i915: " Patchwork
@ 2024-06-17 14:31   ` Jani Nikula
  0 siblings, 0 replies; 9+ messages in thread
From: Jani Nikula @ 2024-06-17 14:31 UTC (permalink / raw)
  To: Patchwork; +Cc: intel-gfx

On Mon, 17 Jun 2024, Patchwork <patchwork@emeril.freedesktop.org> wrote:
> == Series Details ==
>
> Series: drm/i915: make struct intel_frontbuffer opaque
> URL   : https://patchwork.freedesktop.org/series/134957/
> State : failure
>
> == Summary ==
>
> Error: make failed
>   CALL    scripts/checksyscalls.sh
>   DESCEND objtool
>   INSTALL libsubcmd_headers
>   CC [M]  drivers/gpu/drm/i915/gem/i915_gem_clflush.o
> In file included from ./include/linux/array_size.h:5,
>                  from ./include/linux/string.h:6,
>                  from ./include/linux/scatterlist.h:5,
>                  from ./include/drm/drm_cache.h:36,
>                  from drivers/gpu/drm/i915/gem/i915_gem_clflush.c:7:
> drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h: In function ‘i915_gem_object_flush_frontbuffer’:
> ./include/linux/rcupdate.h:463:9: error: dereferencing pointer to incomplete type ‘struct intel_frontbuffer’
>   463 |  typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \

Ugh, so rcu requires the complete type even if it's about a pointer?

*sigh*

>       |         ^
> ./include/linux/compiler.h:77:42: note: in definition of macro ‘unlikely’
>    77 | # define unlikely(x) __builtin_expect(!!(x), 0)
>       |                                          ^
> ./include/linux/rcupdate.h:582:31: note: in expansion of macro ‘__rcu_access_pointer’
>   582 | #define rcu_access_pointer(p) __rcu_access_pointer((p), __UNIQUE_ID(rcu), __rcu)
>       |                               ^~~~~~~~~~~~~~~~~~~~
> drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h:24:15: note: in expansion of macro ‘rcu_access_pointer’
>    24 |  if (unlikely(rcu_access_pointer(obj->frontbuffer)))
>       |               ^~~~~~~~~~~~~~~~~~
> drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h: In function ‘i915_gem_object_get_frontbuffer’:
> ./include/linux/rcupdate.h:463:9: error: dereferencing pointer to incomplete type ‘struct intel_frontbuffer’
>   463 |  typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
>       |         ^
> ./include/linux/compiler.h:76:40: note: in definition of macro ‘likely’
>    76 | # define likely(x) __builtin_expect(!!(x), 1)
>       |                                        ^
> ./include/linux/rcupdate.h:582:31: note: in expansion of macro ‘__rcu_access_pointer’
>   582 | #define rcu_access_pointer(p) __rcu_access_pointer((p), __UNIQUE_ID(rcu), __rcu)
>       |                               ^~~~~~~~~~~~~~~~~~~~
> drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h:50:14: note: in expansion of macro ‘rcu_access_pointer’
>    50 |  if (likely(!rcu_access_pointer(obj->frontbuffer)))
>       |              ^~~~~~~~~~~~~~~~~~
> make[6]: *** [scripts/Makefile.build:244: drivers/gpu/drm/i915/gem/i915_gem_clflush.o] Error 1
> make[5]: *** [scripts/Makefile.build:485: drivers/gpu/drm/i915] Error 2
> make[4]: *** [scripts/Makefile.build:485: drivers/gpu/drm] Error 2
> make[3]: *** [scripts/Makefile.build:485: drivers/gpu] Error 2
> make[2]: *** [scripts/Makefile.build:485: drivers] Error 2
> make[1]: *** [/home/kbuild/kernel/Makefile:1934: .] Error 2
> make: *** [Makefile:240: __sub-make] Error 2
> Build failed, no error log produced
>
>

-- 
Jani Nikula, Intel

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

* Re: [PATCH 5/5] drm/i915/frontbuffer: make struct intel_frontbuffer opaque
  2024-06-17 14:19 ` [PATCH 5/5] drm/i915/frontbuffer: make struct intel_frontbuffer opaque Jani Nikula
@ 2024-06-18 23:54   ` kernel test robot
  0 siblings, 0 replies; 9+ messages in thread
From: kernel test robot @ 2024-06-18 23:54 UTC (permalink / raw)
  To: Jani Nikula, intel-gfx, intel-xe; +Cc: oe-kbuild-all, jani.nikula

Hi Jani,

kernel test robot noticed the following build errors:

[auto build test ERROR on drm-intel/for-linux-next]
[also build test ERROR on drm-intel/for-linux-next-fixes drm-tip/drm-tip drm-xe/drm-xe-next linus/master v6.10-rc4 next-20240618]
[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#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Jani-Nikula/drm-i915-frontbuffer-un-inline-frontbuffer-bits-checks/20240617-223108
base:   git://anongit.freedesktop.org/drm-intel for-linux-next
patch link:    https://lore.kernel.org/r/ba2e3e16b5c47f7e6d434d8fa815e965458a98d5.1718633874.git.jani.nikula%40intel.com
patch subject: [PATCH 5/5] drm/i915/frontbuffer: make struct intel_frontbuffer opaque
config: x86_64-randconfig-003-20240619 (https://download.01.org/0day-ci/archive/20240619/202406190757.Uv3UaYyb-lkp@intel.com/config)
compiler: gcc-8 (Ubuntu 8.4.0-3ubuntu2) 8.4.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240619/202406190757.Uv3UaYyb-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202406190757.Uv3UaYyb-lkp@intel.com/

All errors (new ones prefixed by >>):

   In file included from include/linux/err.h:5,
                    from include/linux/dma-fence.h:16,
                    from include/linux/dma-fence-array.h:15,
                    from drivers/gpu/drm/i915/i915_gem.c:28:
   drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h: In function 'i915_gem_object_flush_frontbuffer':
>> include/linux/rcupdate.h:463:9: error: dereferencing pointer to incomplete type 'struct intel_frontbuffer'
     typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
            ^
   include/linux/compiler.h:77:42: note: in definition of macro 'unlikely'
    # define unlikely(x) __builtin_expect(!!(x), 0)
                                             ^
   include/linux/rcupdate.h:582:31: note: in expansion of macro '__rcu_access_pointer'
    #define rcu_access_pointer(p) __rcu_access_pointer((p), __UNIQUE_ID(rcu), __rcu)
                                  ^~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h:24:15: note: in expansion of macro 'rcu_access_pointer'
     if (unlikely(rcu_access_pointer(obj->frontbuffer)))
                  ^~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h: In function 'i915_gem_object_get_frontbuffer':
>> include/linux/rcupdate.h:463:9: error: dereferencing pointer to incomplete type 'struct intel_frontbuffer'
     typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
            ^
   include/linux/compiler.h:76:40: note: in definition of macro 'likely'
    # define likely(x) __builtin_expect(!!(x), 1)
                                           ^
   include/linux/rcupdate.h:582:31: note: in expansion of macro '__rcu_access_pointer'
    #define rcu_access_pointer(p) __rcu_access_pointer((p), __UNIQUE_ID(rcu), __rcu)
                                  ^~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h:50:14: note: in expansion of macro 'rcu_access_pointer'
     if (likely(!rcu_access_pointer(obj->frontbuffer)))
                 ^~~~~~~~~~~~~~~~~~
--
   In file included from include/linux/array_size.h:5,
                    from include/linux/kernel.h:16,
                    from include/linux/sched/mm.h:5,
                    from drivers/gpu/drm/i915/i915_vma.c:25:
   drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h: In function 'i915_gem_object_flush_frontbuffer':
>> include/linux/rcupdate.h:463:9: error: dereferencing pointer to incomplete type 'struct intel_frontbuffer'
     typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
            ^
   include/linux/compiler.h:77:42: note: in definition of macro 'unlikely'
    # define unlikely(x) __builtin_expect(!!(x), 0)
                                             ^
   include/linux/rcupdate.h:582:31: note: in expansion of macro '__rcu_access_pointer'
    #define rcu_access_pointer(p) __rcu_access_pointer((p), __UNIQUE_ID(rcu), __rcu)
                                  ^~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h:24:15: note: in expansion of macro 'rcu_access_pointer'
     if (unlikely(rcu_access_pointer(obj->frontbuffer)))
                  ^~~~~~~~~~~~~~~~~~


vim +463 include/linux/rcupdate.h

76c8eaafe4f061 Paul E. McKenney        2021-04-21  460  
24ba53017e188e Chun-Hung Tseng         2021-09-15  461  #define __rcu_access_pointer(p, local, space) \
ca5ecddfa8fcbd Paul E. McKenney        2010-04-28  462  ({ \
24ba53017e188e Chun-Hung Tseng         2021-09-15 @463  	typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
423a86a610cad1 Joel Fernandes (Google  2018-12-12  464) 	rcu_check_sparse(p, space); \
24ba53017e188e Chun-Hung Tseng         2021-09-15  465  	((typeof(*p) __force __kernel *)(local)); \
ca5ecddfa8fcbd Paul E. McKenney        2010-04-28  466  })
24ba53017e188e Chun-Hung Tseng         2021-09-15  467  #define __rcu_dereference_check(p, local, c, space) \
ca5ecddfa8fcbd Paul E. McKenney        2010-04-28  468  ({ \
ac59853c06993a Pranith Kumar           2014-11-13  469  	/* Dependency order vs. p above. */ \
24ba53017e188e Chun-Hung Tseng         2021-09-15  470  	typeof(*p) *local = (typeof(*p) *__force)READ_ONCE(p); \
f78f5b90c4ffa5 Paul E. McKenney        2015-06-18  471  	RCU_LOCKDEP_WARN(!(c), "suspicious rcu_dereference_check() usage"); \
423a86a610cad1 Joel Fernandes (Google  2018-12-12  472) 	rcu_check_sparse(p, space); \
24ba53017e188e Chun-Hung Tseng         2021-09-15  473  	((typeof(*p) __force __kernel *)(local)); \
ca5ecddfa8fcbd Paul E. McKenney        2010-04-28  474  })
24ba53017e188e Chun-Hung Tseng         2021-09-15  475  #define __rcu_dereference_protected(p, local, c, space) \
ca5ecddfa8fcbd Paul E. McKenney        2010-04-28  476  ({ \
f78f5b90c4ffa5 Paul E. McKenney        2015-06-18  477  	RCU_LOCKDEP_WARN(!(c), "suspicious rcu_dereference_protected() usage"); \
423a86a610cad1 Joel Fernandes (Google  2018-12-12  478) 	rcu_check_sparse(p, space); \
ca5ecddfa8fcbd Paul E. McKenney        2010-04-28  479  	((typeof(*p) __force __kernel *)(p)); \
ca5ecddfa8fcbd Paul E. McKenney        2010-04-28  480  })
24ba53017e188e Chun-Hung Tseng         2021-09-15  481  #define __rcu_dereference_raw(p, local) \
995f1405610bd8 Paul E. McKenney        2016-07-01  482  ({ \
995f1405610bd8 Paul E. McKenney        2016-07-01  483  	/* Dependency order vs. p above. */ \
24ba53017e188e Chun-Hung Tseng         2021-09-15  484  	typeof(p) local = READ_ONCE(p); \
24ba53017e188e Chun-Hung Tseng         2021-09-15  485  	((typeof(*p) __force __kernel *)(local)); \
995f1405610bd8 Paul E. McKenney        2016-07-01  486  })
24ba53017e188e Chun-Hung Tseng         2021-09-15  487  #define rcu_dereference_raw(p) __rcu_dereference_raw(p, __UNIQUE_ID(rcu))
ca5ecddfa8fcbd Paul E. McKenney        2010-04-28  488  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

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

end of thread, other threads:[~2024-06-18 23:55 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-17 14:18 [PATCH 0/5] drm/i915: make struct intel_frontbuffer opaque Jani Nikula
2024-06-17 14:18 ` [PATCH 1/5] drm/i915/frontbuffer: un-inline frontbuffer bits checks Jani Nikula
2024-06-17 14:18 ` [PATCH 2/5] drm/i915/frontbuffer: hide ->bits more Jani Nikula
2024-06-17 14:19 ` [PATCH 3/5] drm/i915/frontbuffer: add low-level kref accessors Jani Nikula
2024-06-17 14:19 ` [PATCH 4/5] drm/i915/frontbuffer: hide ->write Jani Nikula
2024-06-17 14:19 ` [PATCH 5/5] drm/i915/frontbuffer: make struct intel_frontbuffer opaque Jani Nikula
2024-06-18 23:54   ` kernel test robot
2024-06-17 14:27 ` ✗ Fi.CI.BUILD: failure for drm/i915: " Patchwork
2024-06-17 14:31   ` Jani Nikula

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox