Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c
@ 2024-06-17 17:03 Imre Deak
  2024-06-17 17:03 ` [PATCH 2/3] drm/i915: Pass intel_display to the encoder suspend/shutdown helpers Imre Deak
                   ` (6 more replies)
  0 siblings, 7 replies; 15+ messages in thread
From: Imre Deak @ 2024-06-17 17:03 UTC (permalink / raw)
  To: intel-gfx, intel-xe

Move the encoder suspend/shutdown helpers to intel_encoder.c, this being
the logical place for encoder functions.

This also allows sharing the above helpers with the xe driver, done in a
follow-up patch.

While at it rename the functions using the usual intel_encoder prefix
and in the functions rename the dev_priv parameter to i915.

Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/i915/display/intel_encoder.c | 44 +++++++++++++++++
 drivers/gpu/drm/i915/display/intel_encoder.h |  5 ++
 drivers/gpu/drm/i915/i915_driver.c           | 51 ++------------------
 3 files changed, 53 insertions(+), 47 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_encoder.c b/drivers/gpu/drm/i915/display/intel_encoder.c
index dee55f56960fc..8a1dccb893a37 100644
--- a/drivers/gpu/drm/i915/display/intel_encoder.c
+++ b/drivers/gpu/drm/i915/display/intel_encoder.c
@@ -37,3 +37,47 @@ void intel_encoder_link_check_queue_work(struct intel_encoder *encoder, int dela
 	mod_delayed_work(i915->unordered_wq,
 			 &encoder->link_check_work, msecs_to_jiffies(delay_ms));
 }
+
+void intel_encoder_suspend_all(struct drm_i915_private *i915)
+{
+	struct intel_encoder *encoder;
+
+	if (!HAS_DISPLAY(i915))
+		return;
+
+	/*
+	 * TODO: check and remove holding the modeset locks if none of
+	 * the encoders depends on this.
+	 */
+	drm_modeset_lock_all(&i915->drm);
+	for_each_intel_encoder(&i915->drm, encoder)
+		if (encoder->suspend)
+			encoder->suspend(encoder);
+	drm_modeset_unlock_all(&i915->drm);
+
+	for_each_intel_encoder(&i915->drm, encoder)
+		if (encoder->suspend_complete)
+			encoder->suspend_complete(encoder);
+}
+
+void intel_encoder_shutdown_all(struct drm_i915_private *i915)
+{
+	struct intel_encoder *encoder;
+
+	if (!HAS_DISPLAY(i915))
+		return;
+
+	/*
+	 * TODO: check and remove holding the modeset locks if none of
+	 * the encoders depends on this.
+	 */
+	drm_modeset_lock_all(&i915->drm);
+	for_each_intel_encoder(&i915->drm, encoder)
+		if (encoder->shutdown)
+			encoder->shutdown(encoder);
+	drm_modeset_unlock_all(&i915->drm);
+
+	for_each_intel_encoder(&i915->drm, encoder)
+		if (encoder->shutdown_complete)
+			encoder->shutdown_complete(encoder);
+}
diff --git a/drivers/gpu/drm/i915/display/intel_encoder.h b/drivers/gpu/drm/i915/display/intel_encoder.h
index 2cda054e2b152..e6cd74576f78e 100644
--- a/drivers/gpu/drm/i915/display/intel_encoder.h
+++ b/drivers/gpu/drm/i915/display/intel_encoder.h
@@ -6,6 +6,8 @@
 #ifndef __INTEL_ENCODER_H__
 #define __INTEL_ENCODER_H__
 
+struct drm_i915_private;
+
 struct intel_encoder;
 
 void intel_encoder_link_check_init(struct intel_encoder *encoder,
@@ -13,4 +15,7 @@ void intel_encoder_link_check_init(struct intel_encoder *encoder,
 void intel_encoder_link_check_queue_work(struct intel_encoder *encoder, int delay_ms);
 void intel_encoder_link_check_flush_work(struct intel_encoder *encoder);
 
+void intel_encoder_suspend_all(struct drm_i915_private *i915);
+void intel_encoder_shutdown_all(struct drm_i915_private *i915);
+
 #endif /* __INTEL_ENCODER_H__ */
diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
index 161b21eff6943..e9e38ed246f66 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -53,6 +53,7 @@
 #include "display/intel_dmc.h"
 #include "display/intel_dp.h"
 #include "display/intel_dpt.h"
+#include "display/intel_encoder.h"
 #include "display/intel_fbdev.h"
 #include "display/intel_hotplug.h"
 #include "display/intel_overlay.h"
@@ -933,50 +934,6 @@ static void i915_driver_postclose(struct drm_device *dev, struct drm_file *file)
 	i915_gem_flush_free_objects(to_i915(dev));
 }
 
-static void intel_suspend_encoders(struct drm_i915_private *dev_priv)
-{
-	struct intel_encoder *encoder;
-
-	if (!HAS_DISPLAY(dev_priv))
-		return;
-
-	/*
-	 * TODO: check and remove holding the modeset locks if none of
-	 * the encoders depends on this.
-	 */
-	drm_modeset_lock_all(&dev_priv->drm);
-	for_each_intel_encoder(&dev_priv->drm, encoder)
-		if (encoder->suspend)
-			encoder->suspend(encoder);
-	drm_modeset_unlock_all(&dev_priv->drm);
-
-	for_each_intel_encoder(&dev_priv->drm, encoder)
-		if (encoder->suspend_complete)
-			encoder->suspend_complete(encoder);
-}
-
-static void intel_shutdown_encoders(struct drm_i915_private *dev_priv)
-{
-	struct intel_encoder *encoder;
-
-	if (!HAS_DISPLAY(dev_priv))
-		return;
-
-	/*
-	 * TODO: check and remove holding the modeset locks if none of
-	 * the encoders depends on this.
-	 */
-	drm_modeset_lock_all(&dev_priv->drm);
-	for_each_intel_encoder(&dev_priv->drm, encoder)
-		if (encoder->shutdown)
-			encoder->shutdown(encoder);
-	drm_modeset_unlock_all(&dev_priv->drm);
-
-	for_each_intel_encoder(&dev_priv->drm, encoder)
-		if (encoder->shutdown_complete)
-			encoder->shutdown_complete(encoder);
-}
-
 void i915_driver_shutdown(struct drm_i915_private *i915)
 {
 	disable_rpm_wakeref_asserts(&i915->runtime_pm);
@@ -999,8 +956,8 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
 	if (HAS_DISPLAY(i915))
 		intel_display_driver_suspend_access(i915);
 
-	intel_suspend_encoders(i915);
-	intel_shutdown_encoders(i915);
+	intel_encoder_suspend_all(i915);
+	intel_encoder_shutdown_all(i915);
 
 	intel_dmc_suspend(i915);
 
@@ -1083,7 +1040,7 @@ static int i915_drm_suspend(struct drm_device *dev)
 	if (HAS_DISPLAY(dev_priv))
 		intel_display_driver_suspend_access(dev_priv);
 
-	intel_suspend_encoders(dev_priv);
+	intel_encoder_suspend_all(dev_priv);
 
 	/* Must be called before GGTT is suspended. */
 	intel_dpt_suspend(dev_priv);
-- 
2.43.3


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

* [PATCH 2/3] drm/i915: Pass intel_display to the encoder suspend/shutdown helpers
  2024-06-17 17:03 [PATCH 1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c Imre Deak
@ 2024-06-17 17:03 ` Imre Deak
  2024-06-17 17:42   ` Rodrigo Vivi
  2024-06-18  9:05   ` Jani Nikula
  2024-06-17 17:03 ` [PATCH 3/3] drm/xe: Use the encoder suspend helper also used by the i915 driver Imre Deak
                   ` (5 subsequent siblings)
  6 siblings, 2 replies; 15+ messages in thread
From: Imre Deak @ 2024-06-17 17:03 UTC (permalink / raw)
  To: intel-gfx, intel-xe

Pass intel_display to the encoder suspend/shutdown helpers instead of
drm_i915_private for better isolation. This assumes that HAS_DISPLAY()
will also take an intel_display parameter in the future (or that the
HAS_DISPLAY() check will be moved to a caller of these functions).

Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/i915/display/intel_encoder.c | 22 +++++++++++---------
 drivers/gpu/drm/i915/display/intel_encoder.h |  7 +++----
 drivers/gpu/drm/i915/i915_driver.c           |  6 +++---
 3 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_encoder.c b/drivers/gpu/drm/i915/display/intel_encoder.c
index 8a1dccb893a37..8e73d18a522d4 100644
--- a/drivers/gpu/drm/i915/display/intel_encoder.c
+++ b/drivers/gpu/drm/i915/display/intel_encoder.c
@@ -38,8 +38,9 @@ void intel_encoder_link_check_queue_work(struct intel_encoder *encoder, int dela
 			 &encoder->link_check_work, msecs_to_jiffies(delay_ms));
 }
 
-void intel_encoder_suspend_all(struct drm_i915_private *i915)
+void intel_encoder_suspend_all(struct intel_display *display)
 {
+	struct drm_i915_private *i915 = to_i915(display->drm);
 	struct intel_encoder *encoder;
 
 	if (!HAS_DISPLAY(i915))
@@ -49,19 +50,20 @@ void intel_encoder_suspend_all(struct drm_i915_private *i915)
 	 * TODO: check and remove holding the modeset locks if none of
 	 * the encoders depends on this.
 	 */
-	drm_modeset_lock_all(&i915->drm);
-	for_each_intel_encoder(&i915->drm, encoder)
+	drm_modeset_lock_all(display->drm);
+	for_each_intel_encoder(display->drm, encoder)
 		if (encoder->suspend)
 			encoder->suspend(encoder);
-	drm_modeset_unlock_all(&i915->drm);
+	drm_modeset_unlock_all(display->drm);
 
-	for_each_intel_encoder(&i915->drm, encoder)
+	for_each_intel_encoder(display->drm, encoder)
 		if (encoder->suspend_complete)
 			encoder->suspend_complete(encoder);
 }
 
-void intel_encoder_shutdown_all(struct drm_i915_private *i915)
+void intel_encoder_shutdown_all(struct intel_display *display)
 {
+	struct drm_i915_private *i915 = to_i915(display->drm);
 	struct intel_encoder *encoder;
 
 	if (!HAS_DISPLAY(i915))
@@ -71,13 +73,13 @@ void intel_encoder_shutdown_all(struct drm_i915_private *i915)
 	 * TODO: check and remove holding the modeset locks if none of
 	 * the encoders depends on this.
 	 */
-	drm_modeset_lock_all(&i915->drm);
-	for_each_intel_encoder(&i915->drm, encoder)
+	drm_modeset_lock_all(display->drm);
+	for_each_intel_encoder(display->drm, encoder)
 		if (encoder->shutdown)
 			encoder->shutdown(encoder);
-	drm_modeset_unlock_all(&i915->drm);
+	drm_modeset_unlock_all(display->drm);
 
-	for_each_intel_encoder(&i915->drm, encoder)
+	for_each_intel_encoder(display->drm, encoder)
 		if (encoder->shutdown_complete)
 			encoder->shutdown_complete(encoder);
 }
diff --git a/drivers/gpu/drm/i915/display/intel_encoder.h b/drivers/gpu/drm/i915/display/intel_encoder.h
index e6cd74576f78e..3fa5589f0b1ce 100644
--- a/drivers/gpu/drm/i915/display/intel_encoder.h
+++ b/drivers/gpu/drm/i915/display/intel_encoder.h
@@ -6,8 +6,7 @@
 #ifndef __INTEL_ENCODER_H__
 #define __INTEL_ENCODER_H__
 
-struct drm_i915_private;
-
+struct intel_display;
 struct intel_encoder;
 
 void intel_encoder_link_check_init(struct intel_encoder *encoder,
@@ -15,7 +14,7 @@ void intel_encoder_link_check_init(struct intel_encoder *encoder,
 void intel_encoder_link_check_queue_work(struct intel_encoder *encoder, int delay_ms);
 void intel_encoder_link_check_flush_work(struct intel_encoder *encoder);
 
-void intel_encoder_suspend_all(struct drm_i915_private *i915);
-void intel_encoder_shutdown_all(struct drm_i915_private *i915);
+void intel_encoder_suspend_all(struct intel_display *display);
+void intel_encoder_shutdown_all(struct intel_display *display);
 
 #endif /* __INTEL_ENCODER_H__ */
diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
index e9e38ed246f66..fb8e9c2fcea53 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -956,8 +956,8 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
 	if (HAS_DISPLAY(i915))
 		intel_display_driver_suspend_access(i915);
 
-	intel_encoder_suspend_all(i915);
-	intel_encoder_shutdown_all(i915);
+	intel_encoder_suspend_all(&i915->display);
+	intel_encoder_shutdown_all(&i915->display);
 
 	intel_dmc_suspend(i915);
 
@@ -1040,7 +1040,7 @@ static int i915_drm_suspend(struct drm_device *dev)
 	if (HAS_DISPLAY(dev_priv))
 		intel_display_driver_suspend_access(dev_priv);
 
-	intel_encoder_suspend_all(dev_priv);
+	intel_encoder_suspend_all(&dev_priv->display);
 
 	/* Must be called before GGTT is suspended. */
 	intel_dpt_suspend(dev_priv);
-- 
2.43.3


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

* [PATCH 3/3] drm/xe: Use the encoder suspend helper also used by the i915 driver
  2024-06-17 17:03 [PATCH 1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c Imre Deak
  2024-06-17 17:03 ` [PATCH 2/3] drm/i915: Pass intel_display to the encoder suspend/shutdown helpers Imre Deak
@ 2024-06-17 17:03 ` Imre Deak
  2024-06-17 17:44   ` Rodrigo Vivi
  2024-06-17 17:41 ` [PATCH 1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c Rodrigo Vivi
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 15+ messages in thread
From: Imre Deak @ 2024-06-17 17:03 UTC (permalink / raw)
  To: intel-gfx, intel-xe

Use the suspend encoders helper which is also used by the i915 driver.
This fixes an issue in the xe driver where the encoder
suspend_complete() hook is not called and was an overlook when this hook
was added in

Commit b61fad5f7e5d ("drm/i915/tc: Call TypeC port flush_work/cleanup without modeset locks held")

for i915, but not added to the xe driver (which was still in a separate
source tree at the above point).

Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/xe/display/xe_display.c | 18 ++----------------
 1 file changed, 2 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/xe/display/xe_display.c b/drivers/gpu/drm/xe/display/xe_display.c
index 78cccbe289475..8b83dcff72e17 100644
--- a/drivers/gpu/drm/xe/display/xe_display.c
+++ b/drivers/gpu/drm/xe/display/xe_display.c
@@ -23,6 +23,7 @@
 #include "intel_display_types.h"
 #include "intel_dmc.h"
 #include "intel_dp.h"
+#include "intel_encoder.h"
 #include "intel_fbdev.h"
 #include "intel_hdcp.h"
 #include "intel_hotplug.h"
@@ -270,21 +271,6 @@ void xe_display_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
 		gen11_de_irq_postinstall(xe);
 }
 
-static void intel_suspend_encoders(struct xe_device *xe)
-{
-	struct drm_device *dev = &xe->drm;
-	struct intel_encoder *encoder;
-
-	if (has_display(xe))
-		return;
-
-	drm_modeset_lock_all(dev);
-	for_each_intel_encoder(dev, encoder)
-		if (encoder->suspend)
-			encoder->suspend(encoder);
-	drm_modeset_unlock_all(dev);
-}
-
 static bool suspend_to_idle(void)
 {
 #if IS_ENABLED(CONFIG_ACPI_SLEEP)
@@ -315,7 +301,7 @@ void xe_display_pm_suspend(struct xe_device *xe, bool runtime)
 
 	intel_hpd_cancel_work(xe);
 
-	intel_suspend_encoders(xe);
+	intel_encoder_suspend_all(&xe->display);
 
 	intel_opregion_suspend(xe, s2idle ? PCI_D1 : PCI_D3cold);
 
-- 
2.43.3


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

* Re: [PATCH 1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c
  2024-06-17 17:03 [PATCH 1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c Imre Deak
  2024-06-17 17:03 ` [PATCH 2/3] drm/i915: Pass intel_display to the encoder suspend/shutdown helpers Imre Deak
  2024-06-17 17:03 ` [PATCH 3/3] drm/xe: Use the encoder suspend helper also used by the i915 driver Imre Deak
@ 2024-06-17 17:41 ` Rodrigo Vivi
  2024-06-17 17:59 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/3] " Patchwork
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 15+ messages in thread
From: Rodrigo Vivi @ 2024-06-17 17:41 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-gfx, intel-xe

On Mon, Jun 17, 2024 at 08:03:54PM +0300, Imre Deak wrote:
> Move the encoder suspend/shutdown helpers to intel_encoder.c, this being
> the logical place for encoder functions.
> 
> This also allows sharing the above helpers with the xe driver, done in a
> follow-up patch.
> 
> While at it rename the functions using the usual intel_encoder prefix
> and in the functions rename the dev_priv parameter to i915.
> 

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

> Signed-off-by: Imre Deak <imre.deak@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_encoder.c | 44 +++++++++++++++++
>  drivers/gpu/drm/i915/display/intel_encoder.h |  5 ++
>  drivers/gpu/drm/i915/i915_driver.c           | 51 ++------------------
>  3 files changed, 53 insertions(+), 47 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_encoder.c b/drivers/gpu/drm/i915/display/intel_encoder.c
> index dee55f56960fc..8a1dccb893a37 100644
> --- a/drivers/gpu/drm/i915/display/intel_encoder.c
> +++ b/drivers/gpu/drm/i915/display/intel_encoder.c
> @@ -37,3 +37,47 @@ void intel_encoder_link_check_queue_work(struct intel_encoder *encoder, int dela
>  	mod_delayed_work(i915->unordered_wq,
>  			 &encoder->link_check_work, msecs_to_jiffies(delay_ms));
>  }
> +
> +void intel_encoder_suspend_all(struct drm_i915_private *i915)
> +{
> +	struct intel_encoder *encoder;
> +
> +	if (!HAS_DISPLAY(i915))
> +		return;
> +
> +	/*
> +	 * TODO: check and remove holding the modeset locks if none of
> +	 * the encoders depends on this.
> +	 */
> +	drm_modeset_lock_all(&i915->drm);
> +	for_each_intel_encoder(&i915->drm, encoder)
> +		if (encoder->suspend)
> +			encoder->suspend(encoder);
> +	drm_modeset_unlock_all(&i915->drm);
> +
> +	for_each_intel_encoder(&i915->drm, encoder)
> +		if (encoder->suspend_complete)
> +			encoder->suspend_complete(encoder);
> +}
> +
> +void intel_encoder_shutdown_all(struct drm_i915_private *i915)
> +{
> +	struct intel_encoder *encoder;
> +
> +	if (!HAS_DISPLAY(i915))
> +		return;
> +
> +	/*
> +	 * TODO: check and remove holding the modeset locks if none of
> +	 * the encoders depends on this.
> +	 */
> +	drm_modeset_lock_all(&i915->drm);
> +	for_each_intel_encoder(&i915->drm, encoder)
> +		if (encoder->shutdown)
> +			encoder->shutdown(encoder);
> +	drm_modeset_unlock_all(&i915->drm);
> +
> +	for_each_intel_encoder(&i915->drm, encoder)
> +		if (encoder->shutdown_complete)
> +			encoder->shutdown_complete(encoder);
> +}
> diff --git a/drivers/gpu/drm/i915/display/intel_encoder.h b/drivers/gpu/drm/i915/display/intel_encoder.h
> index 2cda054e2b152..e6cd74576f78e 100644
> --- a/drivers/gpu/drm/i915/display/intel_encoder.h
> +++ b/drivers/gpu/drm/i915/display/intel_encoder.h
> @@ -6,6 +6,8 @@
>  #ifndef __INTEL_ENCODER_H__
>  #define __INTEL_ENCODER_H__
>  
> +struct drm_i915_private;
> +
>  struct intel_encoder;
>  
>  void intel_encoder_link_check_init(struct intel_encoder *encoder,
> @@ -13,4 +15,7 @@ void intel_encoder_link_check_init(struct intel_encoder *encoder,
>  void intel_encoder_link_check_queue_work(struct intel_encoder *encoder, int delay_ms);
>  void intel_encoder_link_check_flush_work(struct intel_encoder *encoder);
>  
> +void intel_encoder_suspend_all(struct drm_i915_private *i915);
> +void intel_encoder_shutdown_all(struct drm_i915_private *i915);
> +
>  #endif /* __INTEL_ENCODER_H__ */
> diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
> index 161b21eff6943..e9e38ed246f66 100644
> --- a/drivers/gpu/drm/i915/i915_driver.c
> +++ b/drivers/gpu/drm/i915/i915_driver.c
> @@ -53,6 +53,7 @@
>  #include "display/intel_dmc.h"
>  #include "display/intel_dp.h"
>  #include "display/intel_dpt.h"
> +#include "display/intel_encoder.h"
>  #include "display/intel_fbdev.h"
>  #include "display/intel_hotplug.h"
>  #include "display/intel_overlay.h"
> @@ -933,50 +934,6 @@ static void i915_driver_postclose(struct drm_device *dev, struct drm_file *file)
>  	i915_gem_flush_free_objects(to_i915(dev));
>  }
>  
> -static void intel_suspend_encoders(struct drm_i915_private *dev_priv)
> -{
> -	struct intel_encoder *encoder;
> -
> -	if (!HAS_DISPLAY(dev_priv))
> -		return;
> -
> -	/*
> -	 * TODO: check and remove holding the modeset locks if none of
> -	 * the encoders depends on this.
> -	 */
> -	drm_modeset_lock_all(&dev_priv->drm);
> -	for_each_intel_encoder(&dev_priv->drm, encoder)
> -		if (encoder->suspend)
> -			encoder->suspend(encoder);
> -	drm_modeset_unlock_all(&dev_priv->drm);
> -
> -	for_each_intel_encoder(&dev_priv->drm, encoder)
> -		if (encoder->suspend_complete)
> -			encoder->suspend_complete(encoder);
> -}
> -
> -static void intel_shutdown_encoders(struct drm_i915_private *dev_priv)
> -{
> -	struct intel_encoder *encoder;
> -
> -	if (!HAS_DISPLAY(dev_priv))
> -		return;
> -
> -	/*
> -	 * TODO: check and remove holding the modeset locks if none of
> -	 * the encoders depends on this.
> -	 */
> -	drm_modeset_lock_all(&dev_priv->drm);
> -	for_each_intel_encoder(&dev_priv->drm, encoder)
> -		if (encoder->shutdown)
> -			encoder->shutdown(encoder);
> -	drm_modeset_unlock_all(&dev_priv->drm);
> -
> -	for_each_intel_encoder(&dev_priv->drm, encoder)
> -		if (encoder->shutdown_complete)
> -			encoder->shutdown_complete(encoder);
> -}
> -
>  void i915_driver_shutdown(struct drm_i915_private *i915)
>  {
>  	disable_rpm_wakeref_asserts(&i915->runtime_pm);
> @@ -999,8 +956,8 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
>  	if (HAS_DISPLAY(i915))
>  		intel_display_driver_suspend_access(i915);
>  
> -	intel_suspend_encoders(i915);
> -	intel_shutdown_encoders(i915);
> +	intel_encoder_suspend_all(i915);
> +	intel_encoder_shutdown_all(i915);
>  
>  	intel_dmc_suspend(i915);
>  
> @@ -1083,7 +1040,7 @@ static int i915_drm_suspend(struct drm_device *dev)
>  	if (HAS_DISPLAY(dev_priv))
>  		intel_display_driver_suspend_access(dev_priv);
>  
> -	intel_suspend_encoders(dev_priv);
> +	intel_encoder_suspend_all(dev_priv);
>  
>  	/* Must be called before GGTT is suspended. */
>  	intel_dpt_suspend(dev_priv);
> -- 
> 2.43.3
> 

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

* Re: [PATCH 2/3] drm/i915: Pass intel_display to the encoder suspend/shutdown helpers
  2024-06-17 17:03 ` [PATCH 2/3] drm/i915: Pass intel_display to the encoder suspend/shutdown helpers Imre Deak
@ 2024-06-17 17:42   ` Rodrigo Vivi
  2024-06-18  9:05   ` Jani Nikula
  1 sibling, 0 replies; 15+ messages in thread
From: Rodrigo Vivi @ 2024-06-17 17:42 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-gfx, intel-xe

On Mon, Jun 17, 2024 at 08:03:55PM +0300, Imre Deak wrote:
> Pass intel_display to the encoder suspend/shutdown helpers instead of
> drm_i915_private for better isolation. This assumes that HAS_DISPLAY()
> will also take an intel_display parameter in the future (or that the
> HAS_DISPLAY() check will be moved to a caller of these functions).

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

> 
> Signed-off-by: Imre Deak <imre.deak@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_encoder.c | 22 +++++++++++---------
>  drivers/gpu/drm/i915/display/intel_encoder.h |  7 +++----
>  drivers/gpu/drm/i915/i915_driver.c           |  6 +++---
>  3 files changed, 18 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_encoder.c b/drivers/gpu/drm/i915/display/intel_encoder.c
> index 8a1dccb893a37..8e73d18a522d4 100644
> --- a/drivers/gpu/drm/i915/display/intel_encoder.c
> +++ b/drivers/gpu/drm/i915/display/intel_encoder.c
> @@ -38,8 +38,9 @@ void intel_encoder_link_check_queue_work(struct intel_encoder *encoder, int dela
>  			 &encoder->link_check_work, msecs_to_jiffies(delay_ms));
>  }
>  
> -void intel_encoder_suspend_all(struct drm_i915_private *i915)
> +void intel_encoder_suspend_all(struct intel_display *display)
>  {
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	struct intel_encoder *encoder;
>  
>  	if (!HAS_DISPLAY(i915))
> @@ -49,19 +50,20 @@ void intel_encoder_suspend_all(struct drm_i915_private *i915)
>  	 * TODO: check and remove holding the modeset locks if none of
>  	 * the encoders depends on this.
>  	 */
> -	drm_modeset_lock_all(&i915->drm);
> -	for_each_intel_encoder(&i915->drm, encoder)
> +	drm_modeset_lock_all(display->drm);
> +	for_each_intel_encoder(display->drm, encoder)
>  		if (encoder->suspend)
>  			encoder->suspend(encoder);
> -	drm_modeset_unlock_all(&i915->drm);
> +	drm_modeset_unlock_all(display->drm);
>  
> -	for_each_intel_encoder(&i915->drm, encoder)
> +	for_each_intel_encoder(display->drm, encoder)
>  		if (encoder->suspend_complete)
>  			encoder->suspend_complete(encoder);
>  }
>  
> -void intel_encoder_shutdown_all(struct drm_i915_private *i915)
> +void intel_encoder_shutdown_all(struct intel_display *display)
>  {
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	struct intel_encoder *encoder;
>  
>  	if (!HAS_DISPLAY(i915))
> @@ -71,13 +73,13 @@ void intel_encoder_shutdown_all(struct drm_i915_private *i915)
>  	 * TODO: check and remove holding the modeset locks if none of
>  	 * the encoders depends on this.
>  	 */
> -	drm_modeset_lock_all(&i915->drm);
> -	for_each_intel_encoder(&i915->drm, encoder)
> +	drm_modeset_lock_all(display->drm);
> +	for_each_intel_encoder(display->drm, encoder)
>  		if (encoder->shutdown)
>  			encoder->shutdown(encoder);
> -	drm_modeset_unlock_all(&i915->drm);
> +	drm_modeset_unlock_all(display->drm);
>  
> -	for_each_intel_encoder(&i915->drm, encoder)
> +	for_each_intel_encoder(display->drm, encoder)
>  		if (encoder->shutdown_complete)
>  			encoder->shutdown_complete(encoder);
>  }
> diff --git a/drivers/gpu/drm/i915/display/intel_encoder.h b/drivers/gpu/drm/i915/display/intel_encoder.h
> index e6cd74576f78e..3fa5589f0b1ce 100644
> --- a/drivers/gpu/drm/i915/display/intel_encoder.h
> +++ b/drivers/gpu/drm/i915/display/intel_encoder.h
> @@ -6,8 +6,7 @@
>  #ifndef __INTEL_ENCODER_H__
>  #define __INTEL_ENCODER_H__
>  
> -struct drm_i915_private;
> -
> +struct intel_display;
>  struct intel_encoder;
>  
>  void intel_encoder_link_check_init(struct intel_encoder *encoder,
> @@ -15,7 +14,7 @@ void intel_encoder_link_check_init(struct intel_encoder *encoder,
>  void intel_encoder_link_check_queue_work(struct intel_encoder *encoder, int delay_ms);
>  void intel_encoder_link_check_flush_work(struct intel_encoder *encoder);
>  
> -void intel_encoder_suspend_all(struct drm_i915_private *i915);
> -void intel_encoder_shutdown_all(struct drm_i915_private *i915);
> +void intel_encoder_suspend_all(struct intel_display *display);
> +void intel_encoder_shutdown_all(struct intel_display *display);
>  
>  #endif /* __INTEL_ENCODER_H__ */
> diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
> index e9e38ed246f66..fb8e9c2fcea53 100644
> --- a/drivers/gpu/drm/i915/i915_driver.c
> +++ b/drivers/gpu/drm/i915/i915_driver.c
> @@ -956,8 +956,8 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
>  	if (HAS_DISPLAY(i915))
>  		intel_display_driver_suspend_access(i915);
>  
> -	intel_encoder_suspend_all(i915);
> -	intel_encoder_shutdown_all(i915);
> +	intel_encoder_suspend_all(&i915->display);
> +	intel_encoder_shutdown_all(&i915->display);
>  
>  	intel_dmc_suspend(i915);
>  
> @@ -1040,7 +1040,7 @@ static int i915_drm_suspend(struct drm_device *dev)
>  	if (HAS_DISPLAY(dev_priv))
>  		intel_display_driver_suspend_access(dev_priv);
>  
> -	intel_encoder_suspend_all(dev_priv);
> +	intel_encoder_suspend_all(&dev_priv->display);
>  
>  	/* Must be called before GGTT is suspended. */
>  	intel_dpt_suspend(dev_priv);
> -- 
> 2.43.3
> 

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

* Re: [PATCH 3/3] drm/xe: Use the encoder suspend helper also used by the i915 driver
  2024-06-17 17:03 ` [PATCH 3/3] drm/xe: Use the encoder suspend helper also used by the i915 driver Imre Deak
@ 2024-06-17 17:44   ` Rodrigo Vivi
  2024-06-17 17:54     ` Imre Deak
  0 siblings, 1 reply; 15+ messages in thread
From: Rodrigo Vivi @ 2024-06-17 17:44 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-gfx, intel-xe

On Mon, Jun 17, 2024 at 08:03:56PM +0300, Imre Deak wrote:
> Use the suspend encoders helper which is also used by the i915 driver.
> This fixes an issue in the xe driver where the encoder
> suspend_complete() hook is not called and was an overlook when this hook
> was added in

I believe it is okay to stay in the same line and then break the commit
subject in the middle for the next line...

> 
> Commit b61fad5f7e5d ("drm/i915/tc: Call TypeC port flush_work/cleanup without modeset locks held")
> 

I wonder if we should have a fixes, but probably okay to skip it.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

> for i915, but not added to the xe driver (which was still in a separate
> source tree at the above point).
> 
> Signed-off-by: Imre Deak <imre.deak@intel.com>
> ---
>  drivers/gpu/drm/xe/display/xe_display.c | 18 ++----------------
>  1 file changed, 2 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/display/xe_display.c b/drivers/gpu/drm/xe/display/xe_display.c
> index 78cccbe289475..8b83dcff72e17 100644
> --- a/drivers/gpu/drm/xe/display/xe_display.c
> +++ b/drivers/gpu/drm/xe/display/xe_display.c
> @@ -23,6 +23,7 @@
>  #include "intel_display_types.h"
>  #include "intel_dmc.h"
>  #include "intel_dp.h"
> +#include "intel_encoder.h"
>  #include "intel_fbdev.h"
>  #include "intel_hdcp.h"
>  #include "intel_hotplug.h"
> @@ -270,21 +271,6 @@ void xe_display_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
>  		gen11_de_irq_postinstall(xe);
>  }
>  
> -static void intel_suspend_encoders(struct xe_device *xe)
> -{
> -	struct drm_device *dev = &xe->drm;
> -	struct intel_encoder *encoder;
> -
> -	if (has_display(xe))
> -		return;
> -
> -	drm_modeset_lock_all(dev);
> -	for_each_intel_encoder(dev, encoder)
> -		if (encoder->suspend)
> -			encoder->suspend(encoder);
> -	drm_modeset_unlock_all(dev);
> -}
> -
>  static bool suspend_to_idle(void)
>  {
>  #if IS_ENABLED(CONFIG_ACPI_SLEEP)
> @@ -315,7 +301,7 @@ void xe_display_pm_suspend(struct xe_device *xe, bool runtime)
>  
>  	intel_hpd_cancel_work(xe);
>  
> -	intel_suspend_encoders(xe);
> +	intel_encoder_suspend_all(&xe->display);
>  
>  	intel_opregion_suspend(xe, s2idle ? PCI_D1 : PCI_D3cold);
>  
> -- 
> 2.43.3
> 

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

* Re: [PATCH 3/3] drm/xe: Use the encoder suspend helper also used by the i915 driver
  2024-06-17 17:44   ` Rodrigo Vivi
@ 2024-06-17 17:54     ` Imre Deak
  2024-06-17 18:03       ` Rodrigo Vivi
  0 siblings, 1 reply; 15+ messages in thread
From: Imre Deak @ 2024-06-17 17:54 UTC (permalink / raw)
  To: Rodrigo Vivi; +Cc: intel-gfx, intel-xe

On Mon, Jun 17, 2024 at 01:44:06PM -0400, Rodrigo Vivi wrote:
> On Mon, Jun 17, 2024 at 08:03:56PM +0300, Imre Deak wrote:
> > Use the suspend encoders helper which is also used by the i915 driver.
> > This fixes an issue in the xe driver where the encoder
> > suspend_complete() hook is not called and was an overlook when this hook
> > was added in
> 
> I believe it is okay to stay in the same line and then break the commit
> subject in the middle for the next line...

Ok, looks like done elsewhere as well, will reformat.

> > Commit b61fad5f7e5d ("drm/i915/tc: Call TypeC port flush_work/cleanup without modeset locks held")
> > 
> 
> I wonder if we should have a fixes, but probably okay to skip it.

I wasn't sure, since strictly the tree itself at the above commit didn't
have the issue. I suppose if needed this would need to be sent to 6.9
stable manually.

> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>

Thanks.

> 
> > for i915, but not added to the xe driver (which was still in a separate
> > source tree at the above point).
> > 
> > Signed-off-by: Imre Deak <imre.deak@intel.com>
> > ---
> >  drivers/gpu/drm/xe/display/xe_display.c | 18 ++----------------
> >  1 file changed, 2 insertions(+), 16 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/xe/display/xe_display.c b/drivers/gpu/drm/xe/display/xe_display.c
> > index 78cccbe289475..8b83dcff72e17 100644
> > --- a/drivers/gpu/drm/xe/display/xe_display.c
> > +++ b/drivers/gpu/drm/xe/display/xe_display.c
> > @@ -23,6 +23,7 @@
> >  #include "intel_display_types.h"
> >  #include "intel_dmc.h"
> >  #include "intel_dp.h"
> > +#include "intel_encoder.h"
> >  #include "intel_fbdev.h"
> >  #include "intel_hdcp.h"
> >  #include "intel_hotplug.h"
> > @@ -270,21 +271,6 @@ void xe_display_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
> >  		gen11_de_irq_postinstall(xe);
> >  }
> >  
> > -static void intel_suspend_encoders(struct xe_device *xe)
> > -{
> > -	struct drm_device *dev = &xe->drm;
> > -	struct intel_encoder *encoder;
> > -
> > -	if (has_display(xe))
> > -		return;
> > -
> > -	drm_modeset_lock_all(dev);
> > -	for_each_intel_encoder(dev, encoder)
> > -		if (encoder->suspend)
> > -			encoder->suspend(encoder);
> > -	drm_modeset_unlock_all(dev);
> > -}
> > -
> >  static bool suspend_to_idle(void)
> >  {
> >  #if IS_ENABLED(CONFIG_ACPI_SLEEP)
> > @@ -315,7 +301,7 @@ void xe_display_pm_suspend(struct xe_device *xe, bool runtime)
> >  
> >  	intel_hpd_cancel_work(xe);
> >  
> > -	intel_suspend_encoders(xe);
> > +	intel_encoder_suspend_all(&xe->display);
> >  
> >  	intel_opregion_suspend(xe, s2idle ? PCI_D1 : PCI_D3cold);
> >  
> > -- 
> > 2.43.3
> > 

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

* ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c
  2024-06-17 17:03 [PATCH 1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c Imre Deak
                   ` (2 preceding siblings ...)
  2024-06-17 17:41 ` [PATCH 1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c Rodrigo Vivi
@ 2024-06-17 17:59 ` Patchwork
  2024-06-17 18:00 ` ✗ Fi.CI.SPARSE: " Patchwork
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2024-06-17 17:59 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-gfx

== Series Details ==

Series: series starting with [1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c
URL   : https://patchwork.freedesktop.org/series/134966/
State : warning

== Summary ==

Error: dim checkpatch failed
f56120af9380 drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c
7695c637c337 drm/i915: Pass intel_display to the encoder suspend/shutdown helpers
a73dcc8a9fb5 drm/xe: Use the encoder suspend helper also used by the i915 driver
-:12: WARNING:COMMIT_LOG_LONG_LINE: Prefer a maximum 75 chars per line (possible unwrapped commit description?)
#12: 
Commit b61fad5f7e5d ("drm/i915/tc: Call TypeC port flush_work/cleanup without modeset locks held")

total: 0 errors, 1 warnings, 0 checks, 36 lines checked



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

* ✗ Fi.CI.SPARSE: warning for series starting with [1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c
  2024-06-17 17:03 [PATCH 1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c Imre Deak
                   ` (3 preceding siblings ...)
  2024-06-17 17:59 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/3] " Patchwork
@ 2024-06-17 18:00 ` Patchwork
  2024-06-17 18:08 ` ✗ Fi.CI.BAT: failure " Patchwork
  2024-06-18  8:01 ` [PATCH 1/3] " Jani Nikula
  6 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2024-06-17 18:00 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-gfx

== Series Details ==

Series: series starting with [1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c
URL   : https://patchwork.freedesktop.org/series/134966/
State : warning

== Summary ==

Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.
-
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:116:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:147:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:149:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:153:26: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:155:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:173:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:175:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:179:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:181:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:185:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:187:9: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:191:35: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:16: warning: unreplaced symbol 'oldbit'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:194:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:236:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:238:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:243:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:243:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:243:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:243:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:243:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:243:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:245:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:245:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:245:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:245:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:245:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:245:9: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:66:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./arch/x86/include/asm/bitops.h:92:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:105:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:107:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:108:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:109:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:111:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:112:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:121:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:128:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:137:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:137:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:137:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:137:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:137:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:137:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:139:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:139:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:139:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:139:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:139:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:139:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'break'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'break'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'break'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'break'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'break'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'break'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'continue'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'continue'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'continue'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'continue'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'continue'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'continue'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:23: warning: unreplaced symbol '___p1'
+./include/asm-generic/bitops/generic-non-atomic.h:140:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:140:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:140:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:140:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:140:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:140:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:166:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:168:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:169:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:170:9: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:19: warning: unreplaced symbol 'val'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:25: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:172:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:28:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:30:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:31:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:33:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:37:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:39:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:40:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:42:16: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:55:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:57:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:58:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:60:15: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:73:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:75:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:76:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:77:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:79:20: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:17: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:23: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:80:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:93:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:95:9: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:96:9: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:97:9: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:10: warning: unreplaced symbol 'p'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:14: warning: unreplaced symbol 'old'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/generic-non-atomic.h:99:21: warning: unreplaced symbol 'mask'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:100:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:112:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:115:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:127:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:130:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:139:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:142:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:151:1: warning: too many warnings
+./include/asm-generic/bitops/instrumented-non-atomic.h:151:1: warning: too many warnings
+./include/asm-generic/bitops/instrumented-non-atomic.h:151:1: warning: too many warnings
+./include/asm-generic/bitops/instrumented-non-atomic.h:151:1: warning: too many warnings
+./include/asm-generic/bitops/instrumented-non-atomic.h:151:1: warning: too many warnings
+./include/asm-generic/bitops/instrumented-non-atomic.h:151:1: warning: too many warnings
+./include/asm-generic/bitops/instrumented-non-atomic.h:154:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:154:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:154:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:154:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:154:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:154:9: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:26:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:42:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:58:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return'
+./include/asm-generic/bitops/instrumented-non-atomic.h:97:1: warning: unreplaced symbol 'return'



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

* Re: [PATCH 3/3] drm/xe: Use the encoder suspend helper also used by the i915 driver
  2024-06-17 17:54     ` Imre Deak
@ 2024-06-17 18:03       ` Rodrigo Vivi
  0 siblings, 0 replies; 15+ messages in thread
From: Rodrigo Vivi @ 2024-06-17 18:03 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-gfx, intel-xe

On Mon, Jun 17, 2024 at 08:54:13PM +0300, Imre Deak wrote:
> On Mon, Jun 17, 2024 at 01:44:06PM -0400, Rodrigo Vivi wrote:
> > On Mon, Jun 17, 2024 at 08:03:56PM +0300, Imre Deak wrote:
> > > Use the suspend encoders helper which is also used by the i915 driver.
> > > This fixes an issue in the xe driver where the encoder
> > > suspend_complete() hook is not called and was an overlook when this hook
> > > was added in
> > 
> > I believe it is okay to stay in the same line and then break the commit
> > subject in the middle for the next line...
> 
> Ok, looks like done elsewhere as well, will reformat.

nah, not needed. this is clear enough if checkpatch is not complainin no need
to change.

> 
> > > Commit b61fad5f7e5d ("drm/i915/tc: Call TypeC port flush_work/cleanup without modeset locks held")
> > > 
> > 
> > I wonder if we should have a fixes, but probably okay to skip it.
> 
> I wasn't sure, since strictly the tree itself at the above commit didn't
> have the issue. I suppose if needed this would need to be sent to 6.9
> stable manually.

good point!

thanks a lot,
Rodrigo.

> 
> > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> 
> Thanks.
> 
> > 
> > > for i915, but not added to the xe driver (which was still in a separate
> > > source tree at the above point).
> > > 
> > > Signed-off-by: Imre Deak <imre.deak@intel.com>
> > > ---
> > >  drivers/gpu/drm/xe/display/xe_display.c | 18 ++----------------
> > >  1 file changed, 2 insertions(+), 16 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/xe/display/xe_display.c b/drivers/gpu/drm/xe/display/xe_display.c
> > > index 78cccbe289475..8b83dcff72e17 100644
> > > --- a/drivers/gpu/drm/xe/display/xe_display.c
> > > +++ b/drivers/gpu/drm/xe/display/xe_display.c
> > > @@ -23,6 +23,7 @@
> > >  #include "intel_display_types.h"
> > >  #include "intel_dmc.h"
> > >  #include "intel_dp.h"
> > > +#include "intel_encoder.h"
> > >  #include "intel_fbdev.h"
> > >  #include "intel_hdcp.h"
> > >  #include "intel_hotplug.h"
> > > @@ -270,21 +271,6 @@ void xe_display_irq_postinstall(struct xe_device *xe, struct xe_gt *gt)
> > >  		gen11_de_irq_postinstall(xe);
> > >  }
> > >  
> > > -static void intel_suspend_encoders(struct xe_device *xe)
> > > -{
> > > -	struct drm_device *dev = &xe->drm;
> > > -	struct intel_encoder *encoder;
> > > -
> > > -	if (has_display(xe))
> > > -		return;
> > > -
> > > -	drm_modeset_lock_all(dev);
> > > -	for_each_intel_encoder(dev, encoder)
> > > -		if (encoder->suspend)
> > > -			encoder->suspend(encoder);
> > > -	drm_modeset_unlock_all(dev);
> > > -}
> > > -
> > >  static bool suspend_to_idle(void)
> > >  {
> > >  #if IS_ENABLED(CONFIG_ACPI_SLEEP)
> > > @@ -315,7 +301,7 @@ void xe_display_pm_suspend(struct xe_device *xe, bool runtime)
> > >  
> > >  	intel_hpd_cancel_work(xe);
> > >  
> > > -	intel_suspend_encoders(xe);
> > > +	intel_encoder_suspend_all(&xe->display);
> > >  
> > >  	intel_opregion_suspend(xe, s2idle ? PCI_D1 : PCI_D3cold);
> > >  
> > > -- 
> > > 2.43.3
> > > 

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

* ✗ Fi.CI.BAT: failure for series starting with [1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c
  2024-06-17 17:03 [PATCH 1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c Imre Deak
                   ` (4 preceding siblings ...)
  2024-06-17 18:00 ` ✗ Fi.CI.SPARSE: " Patchwork
@ 2024-06-17 18:08 ` Patchwork
  2024-06-18  8:01 ` [PATCH 1/3] " Jani Nikula
  6 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2024-06-17 18:08 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-gfx

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

== Series Details ==

Series: series starting with [1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c
URL   : https://patchwork.freedesktop.org/series/134966/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_14957 -> Patchwork_134966v1
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_134966v1 absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_134966v1, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134966v1/index.html

Participating hosts (41 -> 42)
------------------------------

  Additional (3): fi-kbl-7567u bat-kbl-2 fi-elk-e7500 
  Missing    (2): bat-arlh-2 fi-snb-2520m 

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in Patchwork_134966v1:

### IGT changes ###

#### Possible regressions ####

  * igt@kms_pipe_crc_basic@hang-read-crc@pipe-b-dp-1:
    - bat-dg2-8:          [PASS][1] -> [FAIL][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14957/bat-dg2-8/igt@kms_pipe_crc_basic@hang-read-crc@pipe-b-dp-1.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134966v1/bat-dg2-8/igt@kms_pipe_crc_basic@hang-read-crc@pipe-b-dp-1.html

  
Known issues
------------

  Here are the changes found in Patchwork_134966v1 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@fbdev@info:
    - bat-kbl-2:          NOTRUN -> [SKIP][3] ([i915#1849])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134966v1/bat-kbl-2/igt@fbdev@info.html

  * igt@gem_huc_copy@huc-copy:
    - fi-kbl-7567u:       NOTRUN -> [SKIP][4] ([i915#2190])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134966v1/fi-kbl-7567u/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@parallel-random-engines:
    - bat-kbl-2:          NOTRUN -> [SKIP][5] +39 other tests skip
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134966v1/bat-kbl-2/igt@gem_lmem_swapping@parallel-random-engines.html
    - fi-kbl-7567u:       NOTRUN -> [SKIP][6] ([i915#4613]) +3 other tests skip
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134966v1/fi-kbl-7567u/igt@gem_lmem_swapping@parallel-random-engines.html

  * igt@kms_dsc@dsc-basic:
    - fi-kbl-7567u:       NOTRUN -> [SKIP][7] +11 other tests skip
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134966v1/fi-kbl-7567u/igt@kms_dsc@dsc-basic.html

  * igt@kms_pipe_crc_basic@compare-crc-sanitycheck-nv12@pipe-a-hdmi-a-1:
    - fi-elk-e7500:       NOTRUN -> [SKIP][8] +24 other tests skip
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134966v1/fi-elk-e7500/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-nv12@pipe-a-hdmi-a-1.html

  
#### Possible fixes ####

  * igt@kms_cursor_legacy@basic-flip-after-cursor-legacy:
    - {bat-mtlp-9}:       [SKIP][9] ([i915#10580]) -> [PASS][10]
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14957/bat-mtlp-9/igt@kms_cursor_legacy@basic-flip-after-cursor-legacy.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134966v1/bat-mtlp-9/igt@kms_cursor_legacy@basic-flip-after-cursor-legacy.html

  * igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size:
    - {bat-mtlp-9}:       [DMESG-WARN][11] ([i915#11009]) -> [PASS][12] +1 other test pass
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14957/bat-mtlp-9/igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134966v1/bat-mtlp-9/igt@kms_cursor_legacy@basic-flip-after-cursor-varying-size.html

  * igt@kms_frontbuffer_tracking@basic:
    - bat-arls-2:         [DMESG-WARN][13] ([i915#7507]) -> [PASS][14]
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_14957/bat-arls-2/igt@kms_frontbuffer_tracking@basic.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134966v1/bat-arls-2/igt@kms_frontbuffer_tracking@basic.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [i915#10580]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10580
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [i915#10979]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10979
  [i915#11009]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11009
  [i915#1849]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1849
  [i915#2190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2190
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613
  [i915#6121]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6121
  [i915#7507]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/7507
  [i915#9673]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9673
  [i915#9732]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9732


Build changes
-------------

  * Linux: CI_DRM_14957 -> Patchwork_134966v1

  CI-20190529: 20190529
  CI_DRM_14957: 3b4eab7e82c7a1429e257890553ad571f320b8a3 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_7890: a137e386eba9f46f838315f5d93b87561691d45e @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_134966v1: 3b4eab7e82c7a1429e257890553ad571f320b8a3 @ git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_134966v1/index.html

[-- Attachment #2: Type: text/html, Size: 6218 bytes --]

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

* Re: [PATCH 1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c
  2024-06-17 17:03 [PATCH 1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c Imre Deak
                   ` (5 preceding siblings ...)
  2024-06-17 18:08 ` ✗ Fi.CI.BAT: failure " Patchwork
@ 2024-06-18  8:01 ` Jani Nikula
  2024-06-18 11:16   ` Imre Deak
  6 siblings, 1 reply; 15+ messages in thread
From: Jani Nikula @ 2024-06-18  8:01 UTC (permalink / raw)
  To: Imre Deak, intel-gfx, intel-xe

On Mon, 17 Jun 2024, Imre Deak <imre.deak@intel.com> wrote:
> Move the encoder suspend/shutdown helpers to intel_encoder.c, this being
> the logical place for encoder functions.
>
> This also allows sharing the above helpers with the xe driver, done in a
> follow-up patch.
>
> While at it rename the functions using the usual intel_encoder prefix
> and in the functions rename the dev_priv parameter to i915.

This is good forward progress, but really i915 should also follow the xe
pattern of only calling a handful of display functions from top level,
instead of direct calls from i915_driver.c to a lot of places.

One nitpick inline that can be fixed while applying, otherwise

Reviewed-by: Jani Nikula <jani.nikula@intel.com>


>
> Signed-off-by: Imre Deak <imre.deak@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_encoder.c | 44 +++++++++++++++++
>  drivers/gpu/drm/i915/display/intel_encoder.h |  5 ++
>  drivers/gpu/drm/i915/i915_driver.c           | 51 ++------------------
>  3 files changed, 53 insertions(+), 47 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_encoder.c b/drivers/gpu/drm/i915/display/intel_encoder.c
> index dee55f56960fc..8a1dccb893a37 100644
> --- a/drivers/gpu/drm/i915/display/intel_encoder.c
> +++ b/drivers/gpu/drm/i915/display/intel_encoder.c
> @@ -37,3 +37,47 @@ void intel_encoder_link_check_queue_work(struct intel_encoder *encoder, int dela
>  	mod_delayed_work(i915->unordered_wq,
>  			 &encoder->link_check_work, msecs_to_jiffies(delay_ms));
>  }
> +
> +void intel_encoder_suspend_all(struct drm_i915_private *i915)
> +{
> +	struct intel_encoder *encoder;
> +
> +	if (!HAS_DISPLAY(i915))
> +		return;
> +
> +	/*
> +	 * TODO: check and remove holding the modeset locks if none of
> +	 * the encoders depends on this.
> +	 */
> +	drm_modeset_lock_all(&i915->drm);
> +	for_each_intel_encoder(&i915->drm, encoder)
> +		if (encoder->suspend)
> +			encoder->suspend(encoder);
> +	drm_modeset_unlock_all(&i915->drm);
> +
> +	for_each_intel_encoder(&i915->drm, encoder)
> +		if (encoder->suspend_complete)
> +			encoder->suspend_complete(encoder);
> +}
> +
> +void intel_encoder_shutdown_all(struct drm_i915_private *i915)
> +{
> +	struct intel_encoder *encoder;
> +
> +	if (!HAS_DISPLAY(i915))
> +		return;
> +
> +	/*
> +	 * TODO: check and remove holding the modeset locks if none of
> +	 * the encoders depends on this.
> +	 */
> +	drm_modeset_lock_all(&i915->drm);
> +	for_each_intel_encoder(&i915->drm, encoder)
> +		if (encoder->shutdown)
> +			encoder->shutdown(encoder);
> +	drm_modeset_unlock_all(&i915->drm);
> +
> +	for_each_intel_encoder(&i915->drm, encoder)
> +		if (encoder->shutdown_complete)
> +			encoder->shutdown_complete(encoder);
> +}
> diff --git a/drivers/gpu/drm/i915/display/intel_encoder.h b/drivers/gpu/drm/i915/display/intel_encoder.h
> index 2cda054e2b152..e6cd74576f78e 100644
> --- a/drivers/gpu/drm/i915/display/intel_encoder.h
> +++ b/drivers/gpu/drm/i915/display/intel_encoder.h
> @@ -6,6 +6,8 @@
>  #ifndef __INTEL_ENCODER_H__
>  #define __INTEL_ENCODER_H__
>  
> +struct drm_i915_private;
> +

Superfluous newline.

>  struct intel_encoder;
>  
>  void intel_encoder_link_check_init(struct intel_encoder *encoder,
> @@ -13,4 +15,7 @@ void intel_encoder_link_check_init(struct intel_encoder *encoder,
>  void intel_encoder_link_check_queue_work(struct intel_encoder *encoder, int delay_ms);
>  void intel_encoder_link_check_flush_work(struct intel_encoder *encoder);
>  
> +void intel_encoder_suspend_all(struct drm_i915_private *i915);
> +void intel_encoder_shutdown_all(struct drm_i915_private *i915);
> +
>  #endif /* __INTEL_ENCODER_H__ */
> diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
> index 161b21eff6943..e9e38ed246f66 100644
> --- a/drivers/gpu/drm/i915/i915_driver.c
> +++ b/drivers/gpu/drm/i915/i915_driver.c
> @@ -53,6 +53,7 @@
>  #include "display/intel_dmc.h"
>  #include "display/intel_dp.h"
>  #include "display/intel_dpt.h"
> +#include "display/intel_encoder.h"
>  #include "display/intel_fbdev.h"
>  #include "display/intel_hotplug.h"
>  #include "display/intel_overlay.h"
> @@ -933,50 +934,6 @@ static void i915_driver_postclose(struct drm_device *dev, struct drm_file *file)
>  	i915_gem_flush_free_objects(to_i915(dev));
>  }
>  
> -static void intel_suspend_encoders(struct drm_i915_private *dev_priv)
> -{
> -	struct intel_encoder *encoder;
> -
> -	if (!HAS_DISPLAY(dev_priv))
> -		return;
> -
> -	/*
> -	 * TODO: check and remove holding the modeset locks if none of
> -	 * the encoders depends on this.
> -	 */
> -	drm_modeset_lock_all(&dev_priv->drm);
> -	for_each_intel_encoder(&dev_priv->drm, encoder)
> -		if (encoder->suspend)
> -			encoder->suspend(encoder);
> -	drm_modeset_unlock_all(&dev_priv->drm);
> -
> -	for_each_intel_encoder(&dev_priv->drm, encoder)
> -		if (encoder->suspend_complete)
> -			encoder->suspend_complete(encoder);
> -}
> -
> -static void intel_shutdown_encoders(struct drm_i915_private *dev_priv)
> -{
> -	struct intel_encoder *encoder;
> -
> -	if (!HAS_DISPLAY(dev_priv))
> -		return;
> -
> -	/*
> -	 * TODO: check and remove holding the modeset locks if none of
> -	 * the encoders depends on this.
> -	 */
> -	drm_modeset_lock_all(&dev_priv->drm);
> -	for_each_intel_encoder(&dev_priv->drm, encoder)
> -		if (encoder->shutdown)
> -			encoder->shutdown(encoder);
> -	drm_modeset_unlock_all(&dev_priv->drm);
> -
> -	for_each_intel_encoder(&dev_priv->drm, encoder)
> -		if (encoder->shutdown_complete)
> -			encoder->shutdown_complete(encoder);
> -}
> -
>  void i915_driver_shutdown(struct drm_i915_private *i915)
>  {
>  	disable_rpm_wakeref_asserts(&i915->runtime_pm);
> @@ -999,8 +956,8 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
>  	if (HAS_DISPLAY(i915))
>  		intel_display_driver_suspend_access(i915);
>  
> -	intel_suspend_encoders(i915);
> -	intel_shutdown_encoders(i915);
> +	intel_encoder_suspend_all(i915);
> +	intel_encoder_shutdown_all(i915);
>  
>  	intel_dmc_suspend(i915);
>  
> @@ -1083,7 +1040,7 @@ static int i915_drm_suspend(struct drm_device *dev)
>  	if (HAS_DISPLAY(dev_priv))
>  		intel_display_driver_suspend_access(dev_priv);
>  
> -	intel_suspend_encoders(dev_priv);
> +	intel_encoder_suspend_all(dev_priv);
>  
>  	/* Must be called before GGTT is suspended. */
>  	intel_dpt_suspend(dev_priv);

-- 
Jani Nikula, Intel

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

* Re: [PATCH 2/3] drm/i915: Pass intel_display to the encoder suspend/shutdown helpers
  2024-06-17 17:03 ` [PATCH 2/3] drm/i915: Pass intel_display to the encoder suspend/shutdown helpers Imre Deak
  2024-06-17 17:42   ` Rodrigo Vivi
@ 2024-06-18  9:05   ` Jani Nikula
  2024-06-18 11:19     ` Imre Deak
  1 sibling, 1 reply; 15+ messages in thread
From: Jani Nikula @ 2024-06-18  9:05 UTC (permalink / raw)
  To: Imre Deak, intel-gfx, intel-xe

On Mon, 17 Jun 2024, Imre Deak <imre.deak@intel.com> wrote:
> Pass intel_display to the encoder suspend/shutdown helpers instead of
> drm_i915_private for better isolation. This assumes that HAS_DISPLAY()
> will also take an intel_display parameter in the future (or that the
> HAS_DISPLAY() check will be moved to a caller of these functions).

You can already do that! HAS_DISPLAY() takes either i915 or display. So
maybe make that change now.

In the future, only display code should have HAS_DISPLAY() anyway, not
i915 or xe core. It's not an option that the caller does the checks.

>
> Signed-off-by: Imre Deak <imre.deak@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_encoder.c | 22 +++++++++++---------
>  drivers/gpu/drm/i915/display/intel_encoder.h |  7 +++----
>  drivers/gpu/drm/i915/i915_driver.c           |  6 +++---
>  3 files changed, 18 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_encoder.c b/drivers/gpu/drm/i915/display/intel_encoder.c
> index 8a1dccb893a37..8e73d18a522d4 100644
> --- a/drivers/gpu/drm/i915/display/intel_encoder.c
> +++ b/drivers/gpu/drm/i915/display/intel_encoder.c
> @@ -38,8 +38,9 @@ void intel_encoder_link_check_queue_work(struct intel_encoder *encoder, int dela
>  			 &encoder->link_check_work, msecs_to_jiffies(delay_ms));
>  }
>  
> -void intel_encoder_suspend_all(struct drm_i915_private *i915)
> +void intel_encoder_suspend_all(struct intel_display *display)
>  {
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	struct intel_encoder *encoder;
>  
>  	if (!HAS_DISPLAY(i915))
> @@ -49,19 +50,20 @@ void intel_encoder_suspend_all(struct drm_i915_private *i915)
>  	 * TODO: check and remove holding the modeset locks if none of
>  	 * the encoders depends on this.
>  	 */
> -	drm_modeset_lock_all(&i915->drm);
> -	for_each_intel_encoder(&i915->drm, encoder)
> +	drm_modeset_lock_all(display->drm);
> +	for_each_intel_encoder(display->drm, encoder)
>  		if (encoder->suspend)
>  			encoder->suspend(encoder);
> -	drm_modeset_unlock_all(&i915->drm);
> +	drm_modeset_unlock_all(display->drm);
>  
> -	for_each_intel_encoder(&i915->drm, encoder)
> +	for_each_intel_encoder(display->drm, encoder)
>  		if (encoder->suspend_complete)
>  			encoder->suspend_complete(encoder);
>  }
>  
> -void intel_encoder_shutdown_all(struct drm_i915_private *i915)
> +void intel_encoder_shutdown_all(struct intel_display *display)
>  {
> +	struct drm_i915_private *i915 = to_i915(display->drm);
>  	struct intel_encoder *encoder;
>  
>  	if (!HAS_DISPLAY(i915))
> @@ -71,13 +73,13 @@ void intel_encoder_shutdown_all(struct drm_i915_private *i915)
>  	 * TODO: check and remove holding the modeset locks if none of
>  	 * the encoders depends on this.
>  	 */
> -	drm_modeset_lock_all(&i915->drm);
> -	for_each_intel_encoder(&i915->drm, encoder)
> +	drm_modeset_lock_all(display->drm);
> +	for_each_intel_encoder(display->drm, encoder)
>  		if (encoder->shutdown)
>  			encoder->shutdown(encoder);
> -	drm_modeset_unlock_all(&i915->drm);
> +	drm_modeset_unlock_all(display->drm);
>  
> -	for_each_intel_encoder(&i915->drm, encoder)
> +	for_each_intel_encoder(display->drm, encoder)
>  		if (encoder->shutdown_complete)
>  			encoder->shutdown_complete(encoder);
>  }
> diff --git a/drivers/gpu/drm/i915/display/intel_encoder.h b/drivers/gpu/drm/i915/display/intel_encoder.h
> index e6cd74576f78e..3fa5589f0b1ce 100644
> --- a/drivers/gpu/drm/i915/display/intel_encoder.h
> +++ b/drivers/gpu/drm/i915/display/intel_encoder.h
> @@ -6,8 +6,7 @@
>  #ifndef __INTEL_ENCODER_H__
>  #define __INTEL_ENCODER_H__
>  
> -struct drm_i915_private;
> -

Ah, this is why you missed the superfluous space. ;)

BR,
Jani.

> +struct intel_display;
>  struct intel_encoder;
>  
>  void intel_encoder_link_check_init(struct intel_encoder *encoder,
> @@ -15,7 +14,7 @@ void intel_encoder_link_check_init(struct intel_encoder *encoder,
>  void intel_encoder_link_check_queue_work(struct intel_encoder *encoder, int delay_ms);
>  void intel_encoder_link_check_flush_work(struct intel_encoder *encoder);
>  
> -void intel_encoder_suspend_all(struct drm_i915_private *i915);
> -void intel_encoder_shutdown_all(struct drm_i915_private *i915);
> +void intel_encoder_suspend_all(struct intel_display *display);
> +void intel_encoder_shutdown_all(struct intel_display *display);
>  
>  #endif /* __INTEL_ENCODER_H__ */
> diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
> index e9e38ed246f66..fb8e9c2fcea53 100644
> --- a/drivers/gpu/drm/i915/i915_driver.c
> +++ b/drivers/gpu/drm/i915/i915_driver.c
> @@ -956,8 +956,8 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
>  	if (HAS_DISPLAY(i915))
>  		intel_display_driver_suspend_access(i915);
>  
> -	intel_encoder_suspend_all(i915);
> -	intel_encoder_shutdown_all(i915);
> +	intel_encoder_suspend_all(&i915->display);
> +	intel_encoder_shutdown_all(&i915->display);
>  
>  	intel_dmc_suspend(i915);
>  
> @@ -1040,7 +1040,7 @@ static int i915_drm_suspend(struct drm_device *dev)
>  	if (HAS_DISPLAY(dev_priv))
>  		intel_display_driver_suspend_access(dev_priv);
>  
> -	intel_encoder_suspend_all(dev_priv);
> +	intel_encoder_suspend_all(&dev_priv->display);
>  
>  	/* Must be called before GGTT is suspended. */
>  	intel_dpt_suspend(dev_priv);

-- 
Jani Nikula, Intel

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

* Re: [PATCH 1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c
  2024-06-18  8:01 ` [PATCH 1/3] " Jani Nikula
@ 2024-06-18 11:16   ` Imre Deak
  0 siblings, 0 replies; 15+ messages in thread
From: Imre Deak @ 2024-06-18 11:16 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx, intel-xe

On Tue, Jun 18, 2024 at 11:01:18AM +0300, Jani Nikula wrote:
> On Mon, 17 Jun 2024, Imre Deak <imre.deak@intel.com> wrote:
> > Move the encoder suspend/shutdown helpers to intel_encoder.c, this being
> > the logical place for encoder functions.
> >
> > This also allows sharing the above helpers with the xe driver, done in a
> > follow-up patch.
> >
> > While at it rename the functions using the usual intel_encoder prefix
> > and in the functions rename the dev_priv parameter to i915.
> 
> This is good forward progress, but really i915 should also follow the xe
> pattern of only calling a handful of display functions from top level,
> instead of direct calls from i915_driver.c to a lot of places.

Yes, agreed on moving the display related calls to
intel_display_driver.c / intel_display_driver_suspend(). It needs more
thought and could be done as a follow up imo.

> One nitpick inline that can be fixed while applying, otherwise
> 
> Reviewed-by: Jani Nikula <jani.nikula@intel.com>

Thanks.

> > Signed-off-by: Imre Deak <imre.deak@intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_encoder.c | 44 +++++++++++++++++
> >  drivers/gpu/drm/i915/display/intel_encoder.h |  5 ++
> >  drivers/gpu/drm/i915/i915_driver.c           | 51 ++------------------
> >  3 files changed, 53 insertions(+), 47 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_encoder.c b/drivers/gpu/drm/i915/display/intel_encoder.c
> > index dee55f56960fc..8a1dccb893a37 100644
> > --- a/drivers/gpu/drm/i915/display/intel_encoder.c
> > +++ b/drivers/gpu/drm/i915/display/intel_encoder.c
> > @@ -37,3 +37,47 @@ void intel_encoder_link_check_queue_work(struct intel_encoder *encoder, int dela
> >  	mod_delayed_work(i915->unordered_wq,
> >  			 &encoder->link_check_work, msecs_to_jiffies(delay_ms));
> >  }
> > +
> > +void intel_encoder_suspend_all(struct drm_i915_private *i915)
> > +{
> > +	struct intel_encoder *encoder;
> > +
> > +	if (!HAS_DISPLAY(i915))
> > +		return;
> > +
> > +	/*
> > +	 * TODO: check and remove holding the modeset locks if none of
> > +	 * the encoders depends on this.
> > +	 */
> > +	drm_modeset_lock_all(&i915->drm);
> > +	for_each_intel_encoder(&i915->drm, encoder)
> > +		if (encoder->suspend)
> > +			encoder->suspend(encoder);
> > +	drm_modeset_unlock_all(&i915->drm);
> > +
> > +	for_each_intel_encoder(&i915->drm, encoder)
> > +		if (encoder->suspend_complete)
> > +			encoder->suspend_complete(encoder);
> > +}
> > +
> > +void intel_encoder_shutdown_all(struct drm_i915_private *i915)
> > +{
> > +	struct intel_encoder *encoder;
> > +
> > +	if (!HAS_DISPLAY(i915))
> > +		return;
> > +
> > +	/*
> > +	 * TODO: check and remove holding the modeset locks if none of
> > +	 * the encoders depends on this.
> > +	 */
> > +	drm_modeset_lock_all(&i915->drm);
> > +	for_each_intel_encoder(&i915->drm, encoder)
> > +		if (encoder->shutdown)
> > +			encoder->shutdown(encoder);
> > +	drm_modeset_unlock_all(&i915->drm);
> > +
> > +	for_each_intel_encoder(&i915->drm, encoder)
> > +		if (encoder->shutdown_complete)
> > +			encoder->shutdown_complete(encoder);
> > +}
> > diff --git a/drivers/gpu/drm/i915/display/intel_encoder.h b/drivers/gpu/drm/i915/display/intel_encoder.h
> > index 2cda054e2b152..e6cd74576f78e 100644
> > --- a/drivers/gpu/drm/i915/display/intel_encoder.h
> > +++ b/drivers/gpu/drm/i915/display/intel_encoder.h
> > @@ -6,6 +6,8 @@
> >  #ifndef __INTEL_ENCODER_H__
> >  #define __INTEL_ENCODER_H__
> >  
> > +struct drm_i915_private;
> > +
> 
> Superfluous newline.
> 
> >  struct intel_encoder;
> >  
> >  void intel_encoder_link_check_init(struct intel_encoder *encoder,
> > @@ -13,4 +15,7 @@ void intel_encoder_link_check_init(struct intel_encoder *encoder,
> >  void intel_encoder_link_check_queue_work(struct intel_encoder *encoder, int delay_ms);
> >  void intel_encoder_link_check_flush_work(struct intel_encoder *encoder);
> >  
> > +void intel_encoder_suspend_all(struct drm_i915_private *i915);
> > +void intel_encoder_shutdown_all(struct drm_i915_private *i915);
> > +
> >  #endif /* __INTEL_ENCODER_H__ */
> > diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
> > index 161b21eff6943..e9e38ed246f66 100644
> > --- a/drivers/gpu/drm/i915/i915_driver.c
> > +++ b/drivers/gpu/drm/i915/i915_driver.c
> > @@ -53,6 +53,7 @@
> >  #include "display/intel_dmc.h"
> >  #include "display/intel_dp.h"
> >  #include "display/intel_dpt.h"
> > +#include "display/intel_encoder.h"
> >  #include "display/intel_fbdev.h"
> >  #include "display/intel_hotplug.h"
> >  #include "display/intel_overlay.h"
> > @@ -933,50 +934,6 @@ static void i915_driver_postclose(struct drm_device *dev, struct drm_file *file)
> >  	i915_gem_flush_free_objects(to_i915(dev));
> >  }
> >  
> > -static void intel_suspend_encoders(struct drm_i915_private *dev_priv)
> > -{
> > -	struct intel_encoder *encoder;
> > -
> > -	if (!HAS_DISPLAY(dev_priv))
> > -		return;
> > -
> > -	/*
> > -	 * TODO: check and remove holding the modeset locks if none of
> > -	 * the encoders depends on this.
> > -	 */
> > -	drm_modeset_lock_all(&dev_priv->drm);
> > -	for_each_intel_encoder(&dev_priv->drm, encoder)
> > -		if (encoder->suspend)
> > -			encoder->suspend(encoder);
> > -	drm_modeset_unlock_all(&dev_priv->drm);
> > -
> > -	for_each_intel_encoder(&dev_priv->drm, encoder)
> > -		if (encoder->suspend_complete)
> > -			encoder->suspend_complete(encoder);
> > -}
> > -
> > -static void intel_shutdown_encoders(struct drm_i915_private *dev_priv)
> > -{
> > -	struct intel_encoder *encoder;
> > -
> > -	if (!HAS_DISPLAY(dev_priv))
> > -		return;
> > -
> > -	/*
> > -	 * TODO: check and remove holding the modeset locks if none of
> > -	 * the encoders depends on this.
> > -	 */
> > -	drm_modeset_lock_all(&dev_priv->drm);
> > -	for_each_intel_encoder(&dev_priv->drm, encoder)
> > -		if (encoder->shutdown)
> > -			encoder->shutdown(encoder);
> > -	drm_modeset_unlock_all(&dev_priv->drm);
> > -
> > -	for_each_intel_encoder(&dev_priv->drm, encoder)
> > -		if (encoder->shutdown_complete)
> > -			encoder->shutdown_complete(encoder);
> > -}
> > -
> >  void i915_driver_shutdown(struct drm_i915_private *i915)
> >  {
> >  	disable_rpm_wakeref_asserts(&i915->runtime_pm);
> > @@ -999,8 +956,8 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
> >  	if (HAS_DISPLAY(i915))
> >  		intel_display_driver_suspend_access(i915);
> >  
> > -	intel_suspend_encoders(i915);
> > -	intel_shutdown_encoders(i915);
> > +	intel_encoder_suspend_all(i915);
> > +	intel_encoder_shutdown_all(i915);
> >  
> >  	intel_dmc_suspend(i915);
> >  
> > @@ -1083,7 +1040,7 @@ static int i915_drm_suspend(struct drm_device *dev)
> >  	if (HAS_DISPLAY(dev_priv))
> >  		intel_display_driver_suspend_access(dev_priv);
> >  
> > -	intel_suspend_encoders(dev_priv);
> > +	intel_encoder_suspend_all(dev_priv);
> >  
> >  	/* Must be called before GGTT is suspended. */
> >  	intel_dpt_suspend(dev_priv);
> 
> -- 
> Jani Nikula, Intel

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

* Re: [PATCH 2/3] drm/i915: Pass intel_display to the encoder suspend/shutdown helpers
  2024-06-18  9:05   ` Jani Nikula
@ 2024-06-18 11:19     ` Imre Deak
  0 siblings, 0 replies; 15+ messages in thread
From: Imre Deak @ 2024-06-18 11:19 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx, intel-xe

On Tue, Jun 18, 2024 at 12:05:16PM +0300, Jani Nikula wrote:
> On Mon, 17 Jun 2024, Imre Deak <imre.deak@intel.com> wrote:
> > Pass intel_display to the encoder suspend/shutdown helpers instead of
> > drm_i915_private for better isolation. This assumes that HAS_DISPLAY()
> > will also take an intel_display parameter in the future (or that the
> > HAS_DISPLAY() check will be moved to a caller of these functions).
> 
> You can already do that! HAS_DISPLAY() takes either i915 or display. So
> maybe make that change now.

Ah the _Generic() magic, nice! Will change this.

> In the future, only display code should have HAS_DISPLAY() anyway, not
> i915 or xe core. It's not an option that the caller does the checks.

Ok.

> > Signed-off-by: Imre Deak <imre.deak@intel.com>
> > ---
> >  drivers/gpu/drm/i915/display/intel_encoder.c | 22 +++++++++++---------
> >  drivers/gpu/drm/i915/display/intel_encoder.h |  7 +++----
> >  drivers/gpu/drm/i915/i915_driver.c           |  6 +++---
> >  3 files changed, 18 insertions(+), 17 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_encoder.c b/drivers/gpu/drm/i915/display/intel_encoder.c
> > index 8a1dccb893a37..8e73d18a522d4 100644
> > --- a/drivers/gpu/drm/i915/display/intel_encoder.c
> > +++ b/drivers/gpu/drm/i915/display/intel_encoder.c
> > @@ -38,8 +38,9 @@ void intel_encoder_link_check_queue_work(struct intel_encoder *encoder, int dela
> >  			 &encoder->link_check_work, msecs_to_jiffies(delay_ms));
> >  }
> >  
> > -void intel_encoder_suspend_all(struct drm_i915_private *i915)
> > +void intel_encoder_suspend_all(struct intel_display *display)
> >  {
> > +	struct drm_i915_private *i915 = to_i915(display->drm);
> >  	struct intel_encoder *encoder;
> >  
> >  	if (!HAS_DISPLAY(i915))
> > @@ -49,19 +50,20 @@ void intel_encoder_suspend_all(struct drm_i915_private *i915)
> >  	 * TODO: check and remove holding the modeset locks if none of
> >  	 * the encoders depends on this.
> >  	 */
> > -	drm_modeset_lock_all(&i915->drm);
> > -	for_each_intel_encoder(&i915->drm, encoder)
> > +	drm_modeset_lock_all(display->drm);
> > +	for_each_intel_encoder(display->drm, encoder)
> >  		if (encoder->suspend)
> >  			encoder->suspend(encoder);
> > -	drm_modeset_unlock_all(&i915->drm);
> > +	drm_modeset_unlock_all(display->drm);
> >  
> > -	for_each_intel_encoder(&i915->drm, encoder)
> > +	for_each_intel_encoder(display->drm, encoder)
> >  		if (encoder->suspend_complete)
> >  			encoder->suspend_complete(encoder);
> >  }
> >  
> > -void intel_encoder_shutdown_all(struct drm_i915_private *i915)
> > +void intel_encoder_shutdown_all(struct intel_display *display)
> >  {
> > +	struct drm_i915_private *i915 = to_i915(display->drm);
> >  	struct intel_encoder *encoder;
> >  
> >  	if (!HAS_DISPLAY(i915))
> > @@ -71,13 +73,13 @@ void intel_encoder_shutdown_all(struct drm_i915_private *i915)
> >  	 * TODO: check and remove holding the modeset locks if none of
> >  	 * the encoders depends on this.
> >  	 */
> > -	drm_modeset_lock_all(&i915->drm);
> > -	for_each_intel_encoder(&i915->drm, encoder)
> > +	drm_modeset_lock_all(display->drm);
> > +	for_each_intel_encoder(display->drm, encoder)
> >  		if (encoder->shutdown)
> >  			encoder->shutdown(encoder);
> > -	drm_modeset_unlock_all(&i915->drm);
> > +	drm_modeset_unlock_all(display->drm);
> >  
> > -	for_each_intel_encoder(&i915->drm, encoder)
> > +	for_each_intel_encoder(display->drm, encoder)
> >  		if (encoder->shutdown_complete)
> >  			encoder->shutdown_complete(encoder);
> >  }
> > diff --git a/drivers/gpu/drm/i915/display/intel_encoder.h b/drivers/gpu/drm/i915/display/intel_encoder.h
> > index e6cd74576f78e..3fa5589f0b1ce 100644
> > --- a/drivers/gpu/drm/i915/display/intel_encoder.h
> > +++ b/drivers/gpu/drm/i915/display/intel_encoder.h
> > @@ -6,8 +6,7 @@
> >  #ifndef __INTEL_ENCODER_H__
> >  #define __INTEL_ENCODER_H__
> >  
> > -struct drm_i915_private;
> > -
> 
> Ah, this is why you missed the superfluous space. ;)
> 
> BR,
> Jani.
> 
> > +struct intel_display;
> >  struct intel_encoder;
> >  
> >  void intel_encoder_link_check_init(struct intel_encoder *encoder,
> > @@ -15,7 +14,7 @@ void intel_encoder_link_check_init(struct intel_encoder *encoder,
> >  void intel_encoder_link_check_queue_work(struct intel_encoder *encoder, int delay_ms);
> >  void intel_encoder_link_check_flush_work(struct intel_encoder *encoder);
> >  
> > -void intel_encoder_suspend_all(struct drm_i915_private *i915);
> > -void intel_encoder_shutdown_all(struct drm_i915_private *i915);
> > +void intel_encoder_suspend_all(struct intel_display *display);
> > +void intel_encoder_shutdown_all(struct intel_display *display);
> >  
> >  #endif /* __INTEL_ENCODER_H__ */
> > diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
> > index e9e38ed246f66..fb8e9c2fcea53 100644
> > --- a/drivers/gpu/drm/i915/i915_driver.c
> > +++ b/drivers/gpu/drm/i915/i915_driver.c
> > @@ -956,8 +956,8 @@ void i915_driver_shutdown(struct drm_i915_private *i915)
> >  	if (HAS_DISPLAY(i915))
> >  		intel_display_driver_suspend_access(i915);
> >  
> > -	intel_encoder_suspend_all(i915);
> > -	intel_encoder_shutdown_all(i915);
> > +	intel_encoder_suspend_all(&i915->display);
> > +	intel_encoder_shutdown_all(&i915->display);
> >  
> >  	intel_dmc_suspend(i915);
> >  
> > @@ -1040,7 +1040,7 @@ static int i915_drm_suspend(struct drm_device *dev)
> >  	if (HAS_DISPLAY(dev_priv))
> >  		intel_display_driver_suspend_access(dev_priv);
> >  
> > -	intel_encoder_suspend_all(dev_priv);
> > +	intel_encoder_suspend_all(&dev_priv->display);
> >  
> >  	/* Must be called before GGTT is suspended. */
> >  	intel_dpt_suspend(dev_priv);
> 
> -- 
> Jani Nikula, Intel

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

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

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-17 17:03 [PATCH 1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c Imre Deak
2024-06-17 17:03 ` [PATCH 2/3] drm/i915: Pass intel_display to the encoder suspend/shutdown helpers Imre Deak
2024-06-17 17:42   ` Rodrigo Vivi
2024-06-18  9:05   ` Jani Nikula
2024-06-18 11:19     ` Imre Deak
2024-06-17 17:03 ` [PATCH 3/3] drm/xe: Use the encoder suspend helper also used by the i915 driver Imre Deak
2024-06-17 17:44   ` Rodrigo Vivi
2024-06-17 17:54     ` Imre Deak
2024-06-17 18:03       ` Rodrigo Vivi
2024-06-17 17:41 ` [PATCH 1/3] drm/i915: Move encoder suspend/shutdown helpers to intel_encoder.c Rodrigo Vivi
2024-06-17 17:59 ` ✗ Fi.CI.CHECKPATCH: warning for series starting with [1/3] " Patchwork
2024-06-17 18:00 ` ✗ Fi.CI.SPARSE: " Patchwork
2024-06-17 18:08 ` ✗ Fi.CI.BAT: failure " Patchwork
2024-06-18  8:01 ` [PATCH 1/3] " Jani Nikula
2024-06-18 11:16   ` Imre Deak

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