intel-gfx.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] drm: strict type checking for drm_device based logging helpers
@ 2025-01-23 15:09 Jani Nikula
  2025-01-23 15:09 ` [PATCH 1/5] drm/mipi-dsi: stop passing non struct drm_device to drm_err() and friends Jani Nikula
                   ` (8 more replies)
  0 siblings, 9 replies; 35+ messages in thread
From: Jani Nikula @ 2025-01-23 15:09 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx, jani.nikula

Fix all cases that pass something other than struct drm_device to the
drm_device based logging helpers, and add strict type checking.

Gustavo Sousa (1):
  drm/print: Include drm_device.h

Jani Nikula (4):
  drm/mipi-dsi: stop passing non struct drm_device to drm_err() and
    friends
  drm/rockchip: stop passing non struct drm_device to drm_err() and
    friends
  drm/sched: stop passing non struct drm_device to drm_err() and friends
  drm/print: require struct drm_device for drm_err() and friends

 drivers/gpu/drm/drm_mipi_dsi.c                | 12 +++---
 drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c   | 16 +++----
 .../gpu/drm/rockchip/dw_hdmi_qp-rockchip.c    | 16 +++----
 drivers/gpu/drm/scheduler/sched_entity.c      |  2 +-
 drivers/gpu/drm/scheduler/sched_main.c        | 20 +++++----
 include/drm/drm_print.h                       | 42 +++++++++++--------
 6 files changed, 58 insertions(+), 50 deletions(-)

-- 
2.39.5


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

* [PATCH 1/5] drm/mipi-dsi: stop passing non struct drm_device to drm_err() and friends
  2025-01-23 15:09 [PATCH 0/5] drm: strict type checking for drm_device based logging helpers Jani Nikula
@ 2025-01-23 15:09 ` Jani Nikula
  2025-02-25 16:52   ` Luca Ceresoli
  2025-01-23 15:09 ` [PATCH 2/5] drm/rockchip: " Jani Nikula
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 35+ messages in thread
From: Jani Nikula @ 2025-01-23 15:09 UTC (permalink / raw)
  To: dri-devel
  Cc: intel-gfx, jani.nikula, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann

The expectation is that the struct drm_device based logging helpers get
passed an actual struct drm_device pointer rather than some random
struct pointer where you can dereference the ->dev member.

Convert drm_err(host, ...) to dev_err(host->dev, ...). This matches
current usage, as struct drm_device is not available, but drops "[drm]
*ERROR*" from logs.

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

---

Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: dri-devel@lists.freedesktop.org
---
 drivers/gpu/drm/drm_mipi_dsi.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c
index 5e5c5f84daac..7a1ebf71d798 100644
--- a/drivers/gpu/drm/drm_mipi_dsi.c
+++ b/drivers/gpu/drm/drm_mipi_dsi.c
@@ -162,13 +162,13 @@ of_mipi_dsi_device_add(struct mipi_dsi_host *host, struct device_node *node)
 	u32 reg;
 
 	if (of_alias_from_compatible(node, info.type, sizeof(info.type)) < 0) {
-		drm_err(host, "modalias failure on %pOF\n", node);
+		dev_err(host->dev, "modalias failure on %pOF\n", node);
 		return ERR_PTR(-EINVAL);
 	}
 
 	ret = of_property_read_u32(node, "reg", &reg);
 	if (ret) {
-		drm_err(host, "device node %pOF has no valid reg property: %d\n",
+		dev_err(host->dev, "device node %pOF has no valid reg property: %d\n",
 			node, ret);
 		return ERR_PTR(-EINVAL);
 	}
@@ -206,18 +206,18 @@ mipi_dsi_device_register_full(struct mipi_dsi_host *host,
 	int ret;
 
 	if (!info) {
-		drm_err(host, "invalid mipi_dsi_device_info pointer\n");
+		dev_err(host->dev, "invalid mipi_dsi_device_info pointer\n");
 		return ERR_PTR(-EINVAL);
 	}
 
 	if (info->channel > 3) {
-		drm_err(host, "invalid virtual channel: %u\n", info->channel);
+		dev_err(host->dev, "invalid virtual channel: %u\n", info->channel);
 		return ERR_PTR(-EINVAL);
 	}
 
 	dsi = mipi_dsi_device_alloc(host);
 	if (IS_ERR(dsi)) {
-		drm_err(host, "failed to allocate DSI device %ld\n",
+		dev_err(host->dev, "failed to allocate DSI device %ld\n",
 			PTR_ERR(dsi));
 		return dsi;
 	}
@@ -228,7 +228,7 @@ mipi_dsi_device_register_full(struct mipi_dsi_host *host,
 
 	ret = mipi_dsi_device_add(dsi);
 	if (ret) {
-		drm_err(host, "failed to add DSI device %d\n", ret);
+		dev_err(host->dev, "failed to add DSI device %d\n", ret);
 		kfree(dsi);
 		return ERR_PTR(ret);
 	}
-- 
2.39.5


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

* [PATCH 2/5] drm/rockchip: stop passing non struct drm_device to drm_err() and friends
  2025-01-23 15:09 [PATCH 0/5] drm: strict type checking for drm_device based logging helpers Jani Nikula
  2025-01-23 15:09 ` [PATCH 1/5] drm/mipi-dsi: stop passing non struct drm_device to drm_err() and friends Jani Nikula
@ 2025-01-23 15:09 ` Jani Nikula
  2025-01-24  9:53   ` Andy Yan
  2025-02-24 14:47   ` Louis Chauvet
  2025-01-23 15:09 ` [PATCH 3/5] drm/sched: " Jani Nikula
                   ` (6 subsequent siblings)
  8 siblings, 2 replies; 35+ messages in thread
From: Jani Nikula @ 2025-01-23 15:09 UTC (permalink / raw)
  To: dri-devel
  Cc: intel-gfx, jani.nikula, Sandy Huang, Heiko Stübner, Andy Yan,
	linux-arm-kernel, linux-rockchip

The expectation is that the struct drm_device based logging helpers get
passed an actual struct drm_device pointer rather than some random
struct pointer where you can dereference the ->dev member.

Convert drm_err(hdmi, ...) to dev_err(hdmi->dev, ...). This matches
current usage, but drops "[drm] *ERROR*" prefix from logging.

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

---

Looks like it's possible to hunt down the struct drm_device in most of
these cases, if that's desired. This was the simplest change.

Cc: Sandy Huang <hjc@rock-chips.com>
Cc: "Heiko Stübner" <heiko@sntech.de>
Cc: Andy Yan <andy.yan@rock-chips.com>
Cc: dri-devel@lists.freedesktop.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-rockchip@lists.infradead.org
---
 drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c    | 16 ++++++++--------
 drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 16 ++++++++--------
 2 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
index e7a6669c46b0..f737e7d46e66 100644
--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
@@ -203,7 +203,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
 
 	hdmi->regmap = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
 	if (IS_ERR(hdmi->regmap)) {
-		drm_err(hdmi, "Unable to get rockchip,grf\n");
+		dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
 		return PTR_ERR(hdmi->regmap);
 	}
 
@@ -214,7 +214,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
 	if (IS_ERR(hdmi->ref_clk)) {
 		ret = PTR_ERR(hdmi->ref_clk);
 		if (ret != -EPROBE_DEFER)
-			drm_err(hdmi, "failed to get reference clock\n");
+			dev_err(hdmi->dev, "failed to get reference clock\n");
 		return ret;
 	}
 
@@ -222,7 +222,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
 	if (IS_ERR(hdmi->grf_clk)) {
 		ret = PTR_ERR(hdmi->grf_clk);
 		if (ret != -EPROBE_DEFER)
-			drm_err(hdmi, "failed to get grf clock\n");
+			dev_err(hdmi->dev, "failed to get grf clock\n");
 		return ret;
 	}
 
@@ -302,16 +302,16 @@ static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder)
 
 	ret = clk_prepare_enable(hdmi->grf_clk);
 	if (ret < 0) {
-		drm_err(hdmi, "failed to enable grfclk %d\n", ret);
+		dev_err(hdmi->dev, "failed to enable grfclk %d\n", ret);
 		return;
 	}
 
 	ret = regmap_write(hdmi->regmap, hdmi->chip_data->lcdsel_grf_reg, val);
 	if (ret != 0)
-		drm_err(hdmi, "Could not write to GRF: %d\n", ret);
+		dev_err(hdmi->dev, "Could not write to GRF: %d\n", ret);
 
 	clk_disable_unprepare(hdmi->grf_clk);
-	drm_dbg(hdmi, "vop %s output to hdmi\n", ret ? "LIT" : "BIG");
+	dev_dbg(hdmi->dev, "vop %s output to hdmi\n", ret ? "LIT" : "BIG");
 }
 
 static int
@@ -574,7 +574,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
 	ret = rockchip_hdmi_parse_dt(hdmi);
 	if (ret) {
 		if (ret != -EPROBE_DEFER)
-			drm_err(hdmi, "Unable to parse OF data\n");
+			dev_err(hdmi->dev, "Unable to parse OF data\n");
 		return ret;
 	}
 
@@ -582,7 +582,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
 	if (IS_ERR(hdmi->phy)) {
 		ret = PTR_ERR(hdmi->phy);
 		if (ret != -EPROBE_DEFER)
-			drm_err(hdmi, "failed to get phy\n");
+			dev_err(hdmi->dev, "failed to get phy\n");
 		return ret;
 	}
 
diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
index f41151d49fca..3d1dddb34603 100644
--- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
+++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
@@ -242,7 +242,7 @@ static void dw_hdmi_qp_rk3588_hpd_work(struct work_struct *work)
 	if (drm) {
 		changed = drm_helper_hpd_irq_event(drm);
 		if (changed)
-			drm_dbg(hdmi, "connector status changed\n");
+			dev_dbg(hdmi->dev, "connector status changed\n");
 	}
 }
 
@@ -472,7 +472,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
 		}
 	}
 	if (hdmi->port_id < 0) {
-		drm_err(hdmi, "Failed to match HDMI port ID\n");
+		dev_err(hdmi->dev, "Failed to match HDMI port ID\n");
 		return hdmi->port_id;
 	}
 
@@ -496,20 +496,20 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
 	hdmi->regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
 						       "rockchip,grf");
 	if (IS_ERR(hdmi->regmap)) {
-		drm_err(hdmi, "Unable to get rockchip,grf\n");
+		dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
 		return PTR_ERR(hdmi->regmap);
 	}
 
 	hdmi->vo_regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
 							  "rockchip,vo-grf");
 	if (IS_ERR(hdmi->vo_regmap)) {
-		drm_err(hdmi, "Unable to get rockchip,vo-grf\n");
+		dev_err(hdmi->dev, "Unable to get rockchip,vo-grf\n");
 		return PTR_ERR(hdmi->vo_regmap);
 	}
 
 	ret = devm_clk_bulk_get_all_enabled(hdmi->dev, &clks);
 	if (ret < 0) {
-		drm_err(hdmi, "Failed to get clocks: %d\n", ret);
+		dev_err(hdmi->dev, "Failed to get clocks: %d\n", ret);
 		return ret;
 	}
 
@@ -517,7 +517,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
 						    GPIOD_OUT_HIGH);
 	if (IS_ERR(hdmi->enable_gpio)) {
 		ret = PTR_ERR(hdmi->enable_gpio);
-		drm_err(hdmi, "Failed to request enable GPIO: %d\n", ret);
+		dev_err(hdmi->dev, "Failed to request enable GPIO: %d\n", ret);
 		return ret;
 	}
 
@@ -525,7 +525,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
 	if (IS_ERR(hdmi->phy)) {
 		ret = PTR_ERR(hdmi->phy);
 		if (ret != -EPROBE_DEFER)
-			drm_err(hdmi, "failed to get phy: %d\n", ret);
+			dev_err(hdmi->dev, "failed to get phy: %d\n", ret);
 		return ret;
 	}
 
@@ -564,7 +564,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
 	connector = drm_bridge_connector_init(drm, encoder);
 	if (IS_ERR(connector)) {
 		ret = PTR_ERR(connector);
-		drm_err(hdmi, "failed to init bridge connector: %d\n", ret);
+		dev_err(hdmi->dev, "failed to init bridge connector: %d\n", ret);
 		return ret;
 	}
 
-- 
2.39.5


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

* [PATCH 3/5] drm/sched: stop passing non struct drm_device to drm_err() and friends
  2025-01-23 15:09 [PATCH 0/5] drm: strict type checking for drm_device based logging helpers Jani Nikula
  2025-01-23 15:09 ` [PATCH 1/5] drm/mipi-dsi: stop passing non struct drm_device to drm_err() and friends Jani Nikula
  2025-01-23 15:09 ` [PATCH 2/5] drm/rockchip: " Jani Nikula
@ 2025-01-23 15:09 ` Jani Nikula
  2025-01-23 19:54   ` Simona Vetter
  2025-02-24 14:48   ` Louis Chauvet
  2025-01-23 15:09 ` [PATCH 4/5] drm/print: Include drm_device.h Jani Nikula
                   ` (5 subsequent siblings)
  8 siblings, 2 replies; 35+ messages in thread
From: Jani Nikula @ 2025-01-23 15:09 UTC (permalink / raw)
  To: dri-devel
  Cc: intel-gfx, jani.nikula, Matthew Brost, Danilo Krummrich,
	Philipp Stanner, Christian König

The expectation is that the struct drm_device based logging helpers get
passed an actual struct drm_device pointer rather than some random
struct pointer where you can dereference the ->dev member.

Convert drm_err(sched, ...) to dev_err(sched->dev, ...) and
similar. This matches current usage, as struct drm_device is not
available, but drops "[drm]" or "[drm] *ERROR*" prefix from logging.

Unfortunately, there's no dev_WARN_ON(), so the conversion is not
exactly the same.

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

---

Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: Philipp Stanner <phasta@kernel.org>
Cc: "Christian König" <ckoenig.leichtzumerken@gmail.com>
Cc: dri-devel@lists.freedesktop.org
---
 drivers/gpu/drm/scheduler/sched_entity.c |  2 +-
 drivers/gpu/drm/scheduler/sched_main.c   | 20 +++++++++++---------
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c
index 69bcf0e99d57..e29af71d4b5c 100644
--- a/drivers/gpu/drm/scheduler/sched_entity.c
+++ b/drivers/gpu/drm/scheduler/sched_entity.c
@@ -92,7 +92,7 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
 		 * the lowest priority available.
 		 */
 		if (entity->priority >= sched_list[0]->num_rqs) {
-			drm_err(sched_list[0], "entity with out-of-bounds priority:%u num_rqs:%u\n",
+			dev_err(sched_list[0]->dev, "entity with out-of-bounds priority:%u num_rqs:%u\n",
 				entity->priority, sched_list[0]->num_rqs);
 			entity->priority = max_t(s32, (s32) sched_list[0]->num_rqs - 1,
 						 (s32) DRM_SCHED_PRIORITY_KERNEL);
diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
index a48be16ab84f..d1c1f22fd1db 100644
--- a/drivers/gpu/drm/scheduler/sched_main.c
+++ b/drivers/gpu/drm/scheduler/sched_main.c
@@ -103,9 +103,9 @@ static u32 drm_sched_available_credits(struct drm_gpu_scheduler *sched)
 {
 	u32 credits;
 
-	drm_WARN_ON(sched, check_sub_overflow(sched->credit_limit,
-					      atomic_read(&sched->credit_count),
-					      &credits));
+	WARN_ON(check_sub_overflow(sched->credit_limit,
+				   atomic_read(&sched->credit_count),
+				   &credits));
 
 	return credits;
 }
@@ -130,9 +130,11 @@ static bool drm_sched_can_queue(struct drm_gpu_scheduler *sched,
 	/* If a job exceeds the credit limit, truncate it to the credit limit
 	 * itself to guarantee forward progress.
 	 */
-	if (drm_WARN(sched, s_job->credits > sched->credit_limit,
-		     "Jobs may not exceed the credit limit, truncate.\n"))
+	if (s_job->credits > sched->credit_limit) {
+		dev_WARN(sched->dev,
+			 "Jobs may not exceed the credit limit, truncate.\n");
 		s_job->credits = sched->credit_limit;
+	}
 
 	return drm_sched_available_credits(sched) >= s_job->credits;
 }
@@ -790,7 +792,7 @@ int drm_sched_job_init(struct drm_sched_job *job,
 		 * or worse--a blank screen--leave a trail in the
 		 * logs, so this can be debugged easier.
 		 */
-		drm_err(job->sched, "%s: entity has no rq!\n", __func__);
+		dev_err(job->sched->dev, "%s: entity has no rq!\n", __func__);
 		return -ENOENT;
 	}
 
@@ -1280,7 +1282,7 @@ int drm_sched_init(struct drm_gpu_scheduler *sched,
 	if (num_rqs > DRM_SCHED_PRIORITY_COUNT) {
 		/* This is a gross violation--tell drivers what the  problem is.
 		 */
-		drm_err(sched, "%s: num_rqs cannot be greater than DRM_SCHED_PRIORITY_COUNT\n",
+		dev_err(sched->dev, "%s: num_rqs cannot be greater than DRM_SCHED_PRIORITY_COUNT\n",
 			__func__);
 		return -EINVAL;
 	} else if (sched->sched_rq) {
@@ -1288,7 +1290,7 @@ int drm_sched_init(struct drm_gpu_scheduler *sched,
 		 * fine-tune their DRM calling order, and return all
 		 * is good.
 		 */
-		drm_warn(sched, "%s: scheduler already initialized!\n", __func__);
+		dev_warn(sched->dev, "%s: scheduler already initialized!\n", __func__);
 		return 0;
 	}
 
@@ -1343,7 +1345,7 @@ int drm_sched_init(struct drm_gpu_scheduler *sched,
 Out_check_own:
 	if (sched->own_submit_wq)
 		destroy_workqueue(sched->submit_wq);
-	drm_err(sched, "%s: Failed to setup GPU scheduler--out of memory\n", __func__);
+	dev_err(sched->dev, "%s: Failed to setup GPU scheduler--out of memory\n", __func__);
 	return -ENOMEM;
 }
 EXPORT_SYMBOL(drm_sched_init);
-- 
2.39.5


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

* [PATCH 4/5] drm/print: Include drm_device.h
  2025-01-23 15:09 [PATCH 0/5] drm: strict type checking for drm_device based logging helpers Jani Nikula
                   ` (2 preceding siblings ...)
  2025-01-23 15:09 ` [PATCH 3/5] drm/sched: " Jani Nikula
@ 2025-01-23 15:09 ` Jani Nikula
  2025-01-23 15:14   ` Jani Nikula
  2025-01-23 15:09 ` [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends Jani Nikula
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 35+ messages in thread
From: Jani Nikula @ 2025-01-23 15:09 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx, jani.nikula, Gustavo Sousa

From: Gustavo Sousa <gustavo.sousa@intel.com>

The header drm_print.h uses members of struct drm_device pointers, as
such, it should include drm_device.h to let the compiler know the full
type definition.

Without such include, users of drm_print.h that don't explicitly need
drm_device.h would bump into build errors and be forced to include the
latter.

Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>

---

Including here as a dependency. May be merged independently.
---
 include/drm/drm_print.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h
index f77fe1531cf8..9732f514566d 100644
--- a/include/drm/drm_print.h
+++ b/include/drm/drm_print.h
@@ -32,6 +32,7 @@
 #include <linux/dynamic_debug.h>
 
 #include <drm/drm.h>
+#include <drm/drm_device.h>
 
 struct debugfs_regset32;
 struct drm_device;
-- 
2.39.5


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

* [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends
  2025-01-23 15:09 [PATCH 0/5] drm: strict type checking for drm_device based logging helpers Jani Nikula
                   ` (3 preceding siblings ...)
  2025-01-23 15:09 ` [PATCH 4/5] drm/print: Include drm_device.h Jani Nikula
@ 2025-01-23 15:09 ` Jani Nikula
  2025-02-24 14:48   ` Louis Chauvet
                     ` (2 more replies)
  2025-01-23 16:05 ` ✗ Fi.CI.SPARSE: warning for drm: strict type checking for drm_device based logging helpers Patchwork
                   ` (3 subsequent siblings)
  8 siblings, 3 replies; 35+ messages in thread
From: Jani Nikula @ 2025-01-23 15:09 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx, jani.nikula

The expectation is that the struct drm_device based logging helpers get
passed an actual struct drm_device pointer rather than some random
struct pointer where you can dereference the ->dev member.

Add a static inline helper to convert struct drm_device to struct
device, with the main benefit being the type checking of the macro
argument.

As a side effect, this also reduces macro argument double references.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
 include/drm/drm_print.h | 41 +++++++++++++++++++++++------------------
 1 file changed, 23 insertions(+), 18 deletions(-)

diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h
index 9732f514566d..f31eba1c7cab 100644
--- a/include/drm/drm_print.h
+++ b/include/drm/drm_print.h
@@ -584,9 +584,15 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
  * Prefer drm_device based logging over device or prink based logging.
  */
 
+/* Helper to enforce struct drm_device type */
+static inline struct device *__drm_to_dev(const struct drm_device *drm)
+{
+	return drm ? drm->dev : NULL;
+}
+
 /* Helper for struct drm_device based logging. */
 #define __drm_printk(drm, level, type, fmt, ...)			\
-	dev_##level##type((drm) ? (drm)->dev : NULL, "[drm] " fmt, ##__VA_ARGS__)
+	dev_##level##type(__drm_to_dev(drm), "[drm] " fmt, ##__VA_ARGS__)
 
 
 #define drm_info(drm, fmt, ...)					\
@@ -620,25 +626,25 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
 
 
 #define drm_dbg_core(drm, fmt, ...)					\
-	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_CORE, fmt, ##__VA_ARGS__)
-#define drm_dbg_driver(drm, fmt, ...)						\
-	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
+	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_CORE, fmt, ##__VA_ARGS__)
+#define drm_dbg_driver(drm, fmt, ...)					\
+	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
 #define drm_dbg_kms(drm, fmt, ...)					\
-	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_KMS, fmt, ##__VA_ARGS__)
+	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_KMS, fmt, ##__VA_ARGS__)
 #define drm_dbg_prime(drm, fmt, ...)					\
-	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_PRIME, fmt, ##__VA_ARGS__)
+	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_PRIME, fmt, ##__VA_ARGS__)
 #define drm_dbg_atomic(drm, fmt, ...)					\
-	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
+	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
 #define drm_dbg_vbl(drm, fmt, ...)					\
-	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_VBL, fmt, ##__VA_ARGS__)
+	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_VBL, fmt, ##__VA_ARGS__)
 #define drm_dbg_state(drm, fmt, ...)					\
-	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_STATE, fmt, ##__VA_ARGS__)
+	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_STATE, fmt, ##__VA_ARGS__)
 #define drm_dbg_lease(drm, fmt, ...)					\
-	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_LEASE, fmt, ##__VA_ARGS__)
+	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_LEASE, fmt, ##__VA_ARGS__)
 #define drm_dbg_dp(drm, fmt, ...)					\
-	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DP, fmt, ##__VA_ARGS__)
+	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DP, fmt, ##__VA_ARGS__)
 #define drm_dbg_drmres(drm, fmt, ...)					\
-	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DRMRES, fmt, ##__VA_ARGS__)
+	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DRMRES, fmt, ##__VA_ARGS__)
 
 #define drm_dbg(drm, fmt, ...)	drm_dbg_driver(drm, fmt, ##__VA_ARGS__)
 
@@ -727,10 +733,9 @@ void __drm_err(const char *format, ...);
 #define __DRM_DEFINE_DBG_RATELIMITED(category, drm, fmt, ...)					\
 ({												\
 	static DEFINE_RATELIMIT_STATE(rs_, DEFAULT_RATELIMIT_INTERVAL, DEFAULT_RATELIMIT_BURST);\
-	const struct drm_device *drm_ = (drm);							\
 												\
 	if (drm_debug_enabled(DRM_UT_ ## category) && __ratelimit(&rs_))			\
-		drm_dev_printk(drm_ ? drm_->dev : NULL, KERN_DEBUG, fmt, ## __VA_ARGS__);	\
+		drm_dev_printk(__drm_to_dev(drm), KERN_DEBUG, fmt, ## __VA_ARGS__);		\
 })
 
 #define drm_dbg_ratelimited(drm, fmt, ...) \
@@ -752,13 +757,13 @@ void __drm_err(const char *format, ...);
 /* Helper for struct drm_device based WARNs */
 #define drm_WARN(drm, condition, format, arg...)			\
 	WARN(condition, "%s %s: [drm] " format,				\
-			dev_driver_string((drm)->dev),			\
-			dev_name((drm)->dev), ## arg)
+			dev_driver_string(__drm_to_dev(drm)),		\
+			dev_name(__drm_to_dev(drm)), ## arg)
 
 #define drm_WARN_ONCE(drm, condition, format, arg...)			\
 	WARN_ONCE(condition, "%s %s: [drm] " format,			\
-			dev_driver_string((drm)->dev),			\
-			dev_name((drm)->dev), ## arg)
+			dev_driver_string(__drm_to_dev(drm)),		\
+			dev_name(__drm_to_dev(drm)), ## arg)
 
 #define drm_WARN_ON(drm, x)						\
 	drm_WARN((drm), (x), "%s",					\
-- 
2.39.5


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

* Re: [PATCH 4/5] drm/print: Include drm_device.h
  2025-01-23 15:09 ` [PATCH 4/5] drm/print: Include drm_device.h Jani Nikula
@ 2025-01-23 15:14   ` Jani Nikula
  2025-01-23 16:14     ` Gustavo Sousa
  0 siblings, 1 reply; 35+ messages in thread
From: Jani Nikula @ 2025-01-23 15:14 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx, Gustavo Sousa

On Thu, 23 Jan 2025, Jani Nikula <jani.nikula@intel.com> wrote:
> From: Gustavo Sousa <gustavo.sousa@intel.com>
>
> The header drm_print.h uses members of struct drm_device pointers, as
> such, it should include drm_device.h to let the compiler know the full
> type definition.
>
> Without such include, users of drm_print.h that don't explicitly need
> drm_device.h would bump into build errors and be forced to include the
> latter.
>
> Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
> Reviewed-by: Jani Nikula <jani.nikula@intel.com>

This posting should have had

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

but obviously not needed if the original [1] is merged instead.


[1] https://lore.kernel.org/r/20250121210935.84357-1-gustavo.sousa@intel.com

>
> ---
>
> Including here as a dependency. May be merged independently.
> ---
>  include/drm/drm_print.h | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h
> index f77fe1531cf8..9732f514566d 100644
> --- a/include/drm/drm_print.h
> +++ b/include/drm/drm_print.h
> @@ -32,6 +32,7 @@
>  #include <linux/dynamic_debug.h>
>  
>  #include <drm/drm.h>
> +#include <drm/drm_device.h>
>  
>  struct debugfs_regset32;
>  struct drm_device;

-- 
Jani Nikula, Intel

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

* ✗ Fi.CI.SPARSE: warning for drm: strict type checking for drm_device based logging helpers
  2025-01-23 15:09 [PATCH 0/5] drm: strict type checking for drm_device based logging helpers Jani Nikula
                   ` (4 preceding siblings ...)
  2025-01-23 15:09 ` [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends Jani Nikula
@ 2025-01-23 16:05 ` Patchwork
  2025-01-23 16:13 ` ✓ i915.CI.BAT: success " Patchwork
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 35+ messages in thread
From: Patchwork @ 2025-01-23 16:05 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

== Series Details ==

Series: drm: strict type checking for drm_device based logging helpers
URL   : https://patchwork.freedesktop.org/series/143893/
State : warning

== Summary ==

Error: dim sparse failed
Sparse version: v0.6.2
Fast mode used, each commit won't be checked separately.



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

* ✓ i915.CI.BAT: success for drm: strict type checking for drm_device based logging helpers
  2025-01-23 15:09 [PATCH 0/5] drm: strict type checking for drm_device based logging helpers Jani Nikula
                   ` (5 preceding siblings ...)
  2025-01-23 16:05 ` ✗ Fi.CI.SPARSE: warning for drm: strict type checking for drm_device based logging helpers Patchwork
@ 2025-01-23 16:13 ` Patchwork
  2025-01-24  8:26 ` ✗ i915.CI.Full: failure " Patchwork
  2025-03-04 15:07 ` [PATCH 0/5] " Jani Nikula
  8 siblings, 0 replies; 35+ messages in thread
From: Patchwork @ 2025-01-23 16:13 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

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

== Series Details ==

Series: drm: strict type checking for drm_device based logging helpers
URL   : https://patchwork.freedesktop.org/series/143893/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_16009 -> Patchwork_143893v1
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (39 -> 38)
------------------------------

  Missing    (1): fi-snb-2520m 

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

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

### IGT changes ###

#### Issues hit ####

  * igt@i915_pm_rpm@module-reload:
    - bat-dg1-7:          [PASS][1] -> [FAIL][2] ([i915#13401])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/bat-dg1-7/igt@i915_pm_rpm@module-reload.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/bat-dg1-7/igt@i915_pm_rpm@module-reload.html

  * igt@i915_selftest@live:
    - bat-arlh-3:         [PASS][3] -> [DMESG-FAIL][4] ([i915#12061] / [i915#12435])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/bat-arlh-3/igt@i915_selftest@live.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/bat-arlh-3/igt@i915_selftest@live.html

  * igt@i915_selftest@live@workarounds:
    - bat-arlh-3:         [PASS][5] -> [DMESG-FAIL][6] ([i915#12061])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/bat-arlh-3/igt@i915_selftest@live@workarounds.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/bat-arlh-3/igt@i915_selftest@live@workarounds.html
    - bat-arls-5:         [PASS][7] -> [DMESG-FAIL][8] ([i915#12061]) +1 other test dmesg-fail
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/bat-arls-5/igt@i915_selftest@live@workarounds.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/bat-arls-5/igt@i915_selftest@live@workarounds.html
    - bat-mtlp-6:         [PASS][9] -> [DMESG-FAIL][10] ([i915#12061]) +1 other test dmesg-fail
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/bat-mtlp-6/igt@i915_selftest@live@workarounds.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/bat-mtlp-6/igt@i915_selftest@live@workarounds.html

  * igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence:
    - bat-dg2-11:         [PASS][11] -> [SKIP][12] ([i915#9197]) +3 other tests skip
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/bat-dg2-11/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/bat-dg2-11/igt@kms_pipe_crc_basic@nonblocking-crc-frame-sequence.html

  
#### Possible fixes ####

  * igt@i915_selftest@live:
    - bat-rplp-1:         [ABORT][13] ([i915#13399]) -> [PASS][14] +1 other test pass
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/bat-rplp-1/igt@i915_selftest@live.html
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/bat-rplp-1/igt@i915_selftest@live.html

  * igt@i915_selftest@live@workarounds:
    - {bat-arls-6}:       [DMESG-FAIL][15] ([i915#12061]) -> [PASS][16] +1 other test pass
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/bat-arls-6/igt@i915_selftest@live@workarounds.html
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/bat-arls-6/igt@i915_selftest@live@workarounds.html

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

  [i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
  [i915#12435]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12435
  [i915#13399]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13399
  [i915#13401]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13401
  [i915#9197]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/9197


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

  * Linux: CI_DRM_16009 -> Patchwork_143893v1

  CI-20190529: 20190529
  CI_DRM_16009: 7ea93d7bd75efd69dfb3c3400705990d5b42dec5 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_8207: 9f36f9f9e8825a67b762630c2b31628ddcda5c10 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  Patchwork_143893v1: 7ea93d7bd75efd69dfb3c3400705990d5b42dec5 @ git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

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

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

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

* Re: [PATCH 4/5] drm/print: Include drm_device.h
  2025-01-23 15:14   ` Jani Nikula
@ 2025-01-23 16:14     ` Gustavo Sousa
  2025-01-24 11:50       ` Jani Nikula
  0 siblings, 1 reply; 35+ messages in thread
From: Gustavo Sousa @ 2025-01-23 16:14 UTC (permalink / raw)
  To: Jani Nikula, dri-devel; +Cc: intel-gfx

Quoting Jani Nikula (2025-01-23 12:14:31-03:00)
>On Thu, 23 Jan 2025, Jani Nikula <jani.nikula@intel.com> wrote:
>> From: Gustavo Sousa <gustavo.sousa@intel.com>
>>
>> The header drm_print.h uses members of struct drm_device pointers, as
>> such, it should include drm_device.h to let the compiler know the full
>> type definition.
>>
>> Without such include, users of drm_print.h that don't explicitly need
>> drm_device.h would bump into build errors and be forced to include the
>> latter.
>>
>> Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
>> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
>
>This posting should have had
>
>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
>but obviously not needed if the original [1] is merged instead.
>
>
>[1] https://lore.kernel.org/r/20250121210935.84357-1-gustavo.sousa@intel.com

Hm. Since that's in the upper drm layer, I thought I was not supposed to
merge it myself.

Am I? In that case, is it okay to merge it via drm-intel-next?

--
Gustavo Sousa

>
>>
>> ---
>>
>> Including here as a dependency. May be merged independently.
>> ---
>>  include/drm/drm_print.h | 1 +
>>  1 file changed, 1 insertion(+)
>>
>> diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h
>> index f77fe1531cf8..9732f514566d 100644
>> --- a/include/drm/drm_print.h
>> +++ b/include/drm/drm_print.h
>> @@ -32,6 +32,7 @@
>>  #include <linux/dynamic_debug.h>
>>  
>>  #include <drm/drm.h>
>> +#include <drm/drm_device.h>
>>  
>>  struct debugfs_regset32;
>>  struct drm_device;
>
>-- 
>Jani Nikula, Intel

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

* Re: [PATCH 3/5] drm/sched: stop passing non struct drm_device to drm_err() and friends
  2025-01-23 15:09 ` [PATCH 3/5] drm/sched: " Jani Nikula
@ 2025-01-23 19:54   ` Simona Vetter
  2025-01-24 11:46     ` Jani Nikula
  2025-02-24 14:48   ` Louis Chauvet
  1 sibling, 1 reply; 35+ messages in thread
From: Simona Vetter @ 2025-01-23 19:54 UTC (permalink / raw)
  To: Jani Nikula
  Cc: dri-devel, intel-gfx, Matthew Brost, Danilo Krummrich,
	Philipp Stanner, Christian König

On Thu, Jan 23, 2025 at 05:09:10PM +0200, Jani Nikula wrote:
> The expectation is that the struct drm_device based logging helpers get
> passed an actual struct drm_device pointer rather than some random
> struct pointer where you can dereference the ->dev member.
> 
> Convert drm_err(sched, ...) to dev_err(sched->dev, ...) and
> similar. This matches current usage, as struct drm_device is not
> available, but drops "[drm]" or "[drm] *ERROR*" prefix from logging.
> 
> Unfortunately, there's no dev_WARN_ON(), so the conversion is not
> exactly the same.
> 
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

For the two previous patches just dev_ makes sense since they're just
platform drivers, but for drm/sched I wonder whether it wouldn't be better
to switch from struct device * to struct drm_device * instead. I guess
might be best to leave that decision to scheduler folks.

Anyway on the series and with that caveat:

Reviewed-by: Simona Vetter <simona.vetter@ffwll.ch>


> 
> ---
> 
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Danilo Krummrich <dakr@kernel.org>
> Cc: Philipp Stanner <phasta@kernel.org>
> Cc: "Christian König" <ckoenig.leichtzumerken@gmail.com>
> Cc: dri-devel@lists.freedesktop.org
> ---
>  drivers/gpu/drm/scheduler/sched_entity.c |  2 +-
>  drivers/gpu/drm/scheduler/sched_main.c   | 20 +++++++++++---------
>  2 files changed, 12 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c
> index 69bcf0e99d57..e29af71d4b5c 100644
> --- a/drivers/gpu/drm/scheduler/sched_entity.c
> +++ b/drivers/gpu/drm/scheduler/sched_entity.c
> @@ -92,7 +92,7 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
>  		 * the lowest priority available.
>  		 */
>  		if (entity->priority >= sched_list[0]->num_rqs) {
> -			drm_err(sched_list[0], "entity with out-of-bounds priority:%u num_rqs:%u\n",
> +			dev_err(sched_list[0]->dev, "entity with out-of-bounds priority:%u num_rqs:%u\n",
>  				entity->priority, sched_list[0]->num_rqs);
>  			entity->priority = max_t(s32, (s32) sched_list[0]->num_rqs - 1,
>  						 (s32) DRM_SCHED_PRIORITY_KERNEL);
> diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
> index a48be16ab84f..d1c1f22fd1db 100644
> --- a/drivers/gpu/drm/scheduler/sched_main.c
> +++ b/drivers/gpu/drm/scheduler/sched_main.c
> @@ -103,9 +103,9 @@ static u32 drm_sched_available_credits(struct drm_gpu_scheduler *sched)
>  {
>  	u32 credits;
>  
> -	drm_WARN_ON(sched, check_sub_overflow(sched->credit_limit,
> -					      atomic_read(&sched->credit_count),
> -					      &credits));
> +	WARN_ON(check_sub_overflow(sched->credit_limit,
> +				   atomic_read(&sched->credit_count),
> +				   &credits));
>  
>  	return credits;
>  }
> @@ -130,9 +130,11 @@ static bool drm_sched_can_queue(struct drm_gpu_scheduler *sched,
>  	/* If a job exceeds the credit limit, truncate it to the credit limit
>  	 * itself to guarantee forward progress.
>  	 */
> -	if (drm_WARN(sched, s_job->credits > sched->credit_limit,
> -		     "Jobs may not exceed the credit limit, truncate.\n"))
> +	if (s_job->credits > sched->credit_limit) {
> +		dev_WARN(sched->dev,
> +			 "Jobs may not exceed the credit limit, truncate.\n");
>  		s_job->credits = sched->credit_limit;
> +	}
>  
>  	return drm_sched_available_credits(sched) >= s_job->credits;
>  }
> @@ -790,7 +792,7 @@ int drm_sched_job_init(struct drm_sched_job *job,
>  		 * or worse--a blank screen--leave a trail in the
>  		 * logs, so this can be debugged easier.
>  		 */
> -		drm_err(job->sched, "%s: entity has no rq!\n", __func__);
> +		dev_err(job->sched->dev, "%s: entity has no rq!\n", __func__);
>  		return -ENOENT;
>  	}
>  
> @@ -1280,7 +1282,7 @@ int drm_sched_init(struct drm_gpu_scheduler *sched,
>  	if (num_rqs > DRM_SCHED_PRIORITY_COUNT) {
>  		/* This is a gross violation--tell drivers what the  problem is.
>  		 */
> -		drm_err(sched, "%s: num_rqs cannot be greater than DRM_SCHED_PRIORITY_COUNT\n",
> +		dev_err(sched->dev, "%s: num_rqs cannot be greater than DRM_SCHED_PRIORITY_COUNT\n",
>  			__func__);
>  		return -EINVAL;
>  	} else if (sched->sched_rq) {
> @@ -1288,7 +1290,7 @@ int drm_sched_init(struct drm_gpu_scheduler *sched,
>  		 * fine-tune their DRM calling order, and return all
>  		 * is good.
>  		 */
> -		drm_warn(sched, "%s: scheduler already initialized!\n", __func__);
> +		dev_warn(sched->dev, "%s: scheduler already initialized!\n", __func__);
>  		return 0;
>  	}
>  
> @@ -1343,7 +1345,7 @@ int drm_sched_init(struct drm_gpu_scheduler *sched,
>  Out_check_own:
>  	if (sched->own_submit_wq)
>  		destroy_workqueue(sched->submit_wq);
> -	drm_err(sched, "%s: Failed to setup GPU scheduler--out of memory\n", __func__);
> +	dev_err(sched->dev, "%s: Failed to setup GPU scheduler--out of memory\n", __func__);
>  	return -ENOMEM;
>  }
>  EXPORT_SYMBOL(drm_sched_init);
> -- 
> 2.39.5
> 

-- 
Simona Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

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

* ✗ i915.CI.Full: failure for drm: strict type checking for drm_device based logging helpers
  2025-01-23 15:09 [PATCH 0/5] drm: strict type checking for drm_device based logging helpers Jani Nikula
                   ` (6 preceding siblings ...)
  2025-01-23 16:13 ` ✓ i915.CI.BAT: success " Patchwork
@ 2025-01-24  8:26 ` Patchwork
  2025-03-04 15:07 ` [PATCH 0/5] " Jani Nikula
  8 siblings, 0 replies; 35+ messages in thread
From: Patchwork @ 2025-01-24  8:26 UTC (permalink / raw)
  To: Jani Nikula; +Cc: intel-gfx

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

== Series Details ==

Series: drm: strict type checking for drm_device based logging helpers
URL   : https://patchwork.freedesktop.org/series/143893/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_16009_full -> Patchwork_143893v1_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with Patchwork_143893v1_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_143893v1_full, 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.

  

Participating hosts (11 -> 11)
------------------------------

  No changes in participating hosts

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@gem_eio@in-flight-internal-immediate:
    - shard-mtlp:         [PASS][1] -> [ABORT][2] +1 other test abort
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-mtlp-8/igt@gem_eio@in-flight-internal-immediate.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-7/igt@gem_eio@in-flight-internal-immediate.html

  
#### Warnings ####

  * igt@i915_pm_rpm@system-suspend:
    - shard-glk:          [INCOMPLETE][3] ([i915#12797]) -> [INCOMPLETE][4]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-glk3/igt@i915_pm_rpm@system-suspend.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-glk3/igt@i915_pm_rpm@system-suspend.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@api_intel_bb@blit-reloc-purge-cache:
    - shard-dg1:          NOTRUN -> [SKIP][5] ([i915#8411]) +2 other tests skip
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@api_intel_bb@blit-reloc-purge-cache.html

  * igt@api_intel_bb@crc32:
    - shard-dg1:          NOTRUN -> [SKIP][6] ([i915#6230])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@api_intel_bb@crc32.html

  * igt@debugfs_test@basic-hwmon:
    - shard-tglu:         NOTRUN -> [SKIP][7] ([i915#9318])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@debugfs_test@basic-hwmon.html

  * igt@device_reset@cold-reset-bound:
    - shard-mtlp:         NOTRUN -> [SKIP][8] ([i915#11078])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@device_reset@cold-reset-bound.html

  * igt@device_reset@unbind-cold-reset-rebind:
    - shard-dg1:          NOTRUN -> [SKIP][9] ([i915#11078])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@device_reset@unbind-cold-reset-rebind.html

  * igt@device_reset@unbind-reset-rebind:
    - shard-tglu:         [PASS][10] -> [ABORT][11] ([i915#12817] / [i915#5507])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-tglu-8/igt@device_reset@unbind-reset-rebind.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-2/igt@device_reset@unbind-reset-rebind.html

  * igt@drm_fdinfo@isolation@rcs0:
    - shard-mtlp:         NOTRUN -> [SKIP][12] ([i915#8414]) +6 other tests skip
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@drm_fdinfo@isolation@rcs0.html

  * igt@drm_fdinfo@isolation@vecs0:
    - shard-dg1:          NOTRUN -> [SKIP][13] ([i915#8414]) +7 other tests skip
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@drm_fdinfo@isolation@vecs0.html

  * igt@drm_fdinfo@virtual-busy-idle-all:
    - shard-dg2:          NOTRUN -> [SKIP][14] ([i915#8414])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@drm_fdinfo@virtual-busy-idle-all.html

  * igt@gem_basic@multigpu-create-close:
    - shard-rkl:          NOTRUN -> [SKIP][15] ([i915#7697])
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-4/igt@gem_basic@multigpu-create-close.html

  * igt@gem_ccs@block-multicopy-compressed:
    - shard-dg1:          NOTRUN -> [SKIP][16] ([i915#9323])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@gem_ccs@block-multicopy-compressed.html

  * igt@gem_close_race@multigpu-basic-threads:
    - shard-dg1:          NOTRUN -> [SKIP][17] ([i915#7697])
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@gem_close_race@multigpu-basic-threads.html

  * igt@gem_create@busy-create:
    - shard-rkl:          NOTRUN -> [DMESG-WARN][18] ([i915#12964]) +12 other tests dmesg-warn
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-5/igt@gem_create@busy-create.html

  * igt@gem_create@create-ext-cpu-access-sanity-check:
    - shard-rkl:          NOTRUN -> [SKIP][19] ([i915#6335])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-3/igt@gem_create@create-ext-cpu-access-sanity-check.html

  * igt@gem_create@create-ext-set-pat:
    - shard-rkl:          NOTRUN -> [SKIP][20] ([i915#8562])
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-5/igt@gem_create@create-ext-set-pat.html
    - shard-tglu:         NOTRUN -> [SKIP][21] ([i915#8562])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@gem_create@create-ext-set-pat.html

  * igt@gem_ctx_persistence@heartbeat-many:
    - shard-mtlp:         NOTRUN -> [SKIP][22] ([i915#8555]) +1 other test skip
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@gem_ctx_persistence@heartbeat-many.html

  * igt@gem_ctx_persistence@heartbeat-stop:
    - shard-dg1:          NOTRUN -> [SKIP][23] ([i915#8555]) +1 other test skip
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@gem_ctx_persistence@heartbeat-stop.html

  * igt@gem_ctx_persistence@smoketest:
    - shard-snb:          NOTRUN -> [SKIP][24] ([i915#1099]) +1 other test skip
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-snb2/igt@gem_ctx_persistence@smoketest.html

  * igt@gem_ctx_sseu@engines:
    - shard-dg1:          NOTRUN -> [SKIP][25] ([i915#280])
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@gem_ctx_sseu@engines.html

  * igt@gem_ctx_sseu@invalid-sseu:
    - shard-dg2:          NOTRUN -> [SKIP][26] ([i915#280]) +1 other test skip
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@gem_ctx_sseu@invalid-sseu.html

  * igt@gem_ctx_sseu@mmap-args:
    - shard-tglu-1:       NOTRUN -> [SKIP][27] ([i915#280])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@gem_ctx_sseu@mmap-args.html

  * igt@gem_eio@hibernate:
    - shard-rkl:          NOTRUN -> [ABORT][28] ([i915#7975] / [i915#8213])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-3/igt@gem_eio@hibernate.html

  * igt@gem_eio@in-flight-suspend:
    - shard-dg1:          [PASS][29] -> [DMESG-WARN][30] ([i915#4391] / [i915#4423])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg1-12/igt@gem_eio@in-flight-suspend.html
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-14/igt@gem_eio@in-flight-suspend.html

  * igt@gem_exec_balancer@bonded-dual:
    - shard-mtlp:         NOTRUN -> [SKIP][31] ([i915#4771])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@gem_exec_balancer@bonded-dual.html

  * igt@gem_exec_balancer@invalid-bonds:
    - shard-dg2:          NOTRUN -> [SKIP][32] ([i915#4036])
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@gem_exec_balancer@invalid-bonds.html

  * igt@gem_exec_balancer@parallel-bb-first:
    - shard-tglu-1:       NOTRUN -> [SKIP][33] ([i915#4525])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@gem_exec_balancer@parallel-bb-first.html

  * igt@gem_exec_balancer@parallel-keep-submit-fence:
    - shard-tglu:         NOTRUN -> [SKIP][34] ([i915#4525])
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@gem_exec_balancer@parallel-keep-submit-fence.html

  * igt@gem_exec_big@single:
    - shard-tglu-1:       NOTRUN -> [ABORT][35] ([i915#11713])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@gem_exec_big@single.html

  * igt@gem_exec_capture@capture:
    - shard-mtlp:         NOTRUN -> [FAIL][36] ([i915#11965]) +1 other test fail
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@gem_exec_capture@capture.html

  * igt@gem_exec_capture@capture@vecs0-lmem0:
    - shard-dg1:          NOTRUN -> [FAIL][37] ([i915#11965]) +2 other tests fail
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@gem_exec_capture@capture@vecs0-lmem0.html

  * igt@gem_exec_fence@submit:
    - shard-mtlp:         NOTRUN -> [SKIP][38] ([i915#4812])
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@gem_exec_fence@submit.html

  * igt@gem_exec_fence@submit67:
    - shard-dg2:          NOTRUN -> [SKIP][39] ([i915#4812]) +1 other test skip
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@gem_exec_fence@submit67.html

  * igt@gem_exec_flush@basic-uc-prw-default:
    - shard-dg2:          NOTRUN -> [SKIP][40] ([i915#3539])
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@gem_exec_flush@basic-uc-prw-default.html

  * igt@gem_exec_flush@basic-wb-ro-before-default:
    - shard-dg1:          NOTRUN -> [SKIP][41] ([i915#3539] / [i915#4852]) +2 other tests skip
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@gem_exec_flush@basic-wb-ro-before-default.html

  * igt@gem_exec_flush@basic-wb-set-default:
    - shard-dg2:          NOTRUN -> [SKIP][42] ([i915#3539] / [i915#4852])
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@gem_exec_flush@basic-wb-set-default.html

  * igt@gem_exec_reloc@basic-concurrent0:
    - shard-dg1:          NOTRUN -> [SKIP][43] ([i915#3281]) +12 other tests skip
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@gem_exec_reloc@basic-concurrent0.html

  * igt@gem_exec_reloc@basic-gtt-cpu:
    - shard-mtlp:         NOTRUN -> [SKIP][44] ([i915#3281]) +2 other tests skip
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@gem_exec_reloc@basic-gtt-cpu.html

  * igt@gem_exec_reloc@basic-gtt-noreloc:
    - shard-dg2:          NOTRUN -> [SKIP][45] ([i915#3281]) +2 other tests skip
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-10/igt@gem_exec_reloc@basic-gtt-noreloc.html

  * igt@gem_exec_reloc@basic-scanout:
    - shard-rkl:          NOTRUN -> [SKIP][46] ([i915#3281]) +7 other tests skip
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-3/igt@gem_exec_reloc@basic-scanout.html

  * igt@gem_exec_schedule@preempt-queue:
    - shard-dg1:          NOTRUN -> [SKIP][47] ([i915#4812]) +2 other tests skip
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@gem_exec_schedule@preempt-queue.html

  * igt@gem_exec_suspend@basic-s0@smem:
    - shard-dg2:          [PASS][48] -> [INCOMPLETE][49] ([i915#11441] / [i915#13304]) +1 other test incomplete
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg2-5/igt@gem_exec_suspend@basic-s0@smem.html
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-3/igt@gem_exec_suspend@basic-s0@smem.html

  * igt@gem_fenced_exec_thrash@no-spare-fences-busy:
    - shard-dg1:          NOTRUN -> [SKIP][50] ([i915#4860]) +5 other tests skip
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@gem_fenced_exec_thrash@no-spare-fences-busy.html
    - shard-mtlp:         NOTRUN -> [SKIP][51] ([i915#4860])
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@gem_fenced_exec_thrash@no-spare-fences-busy.html

  * igt@gem_huc_copy@huc-copy:
    - shard-rkl:          NOTRUN -> [SKIP][52] ([i915#2190])
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-4/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@heavy-verify-random-ccs:
    - shard-dg1:          NOTRUN -> [SKIP][53] ([i915#12193])
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@gem_lmem_swapping@heavy-verify-random-ccs.html

  * igt@gem_lmem_swapping@heavy-verify-random-ccs@lmem0:
    - shard-dg1:          NOTRUN -> [SKIP][54] ([i915#4565])
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@gem_lmem_swapping@heavy-verify-random-ccs@lmem0.html

  * igt@gem_lmem_swapping@parallel-multi:
    - shard-mtlp:         NOTRUN -> [SKIP][55] ([i915#4613]) +1 other test skip
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@gem_lmem_swapping@parallel-multi.html

  * igt@gem_lmem_swapping@random:
    - shard-rkl:          NOTRUN -> [SKIP][56] ([i915#4613]) +1 other test skip
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-3/igt@gem_lmem_swapping@random.html

  * igt@gem_lmem_swapping@random-engines:
    - shard-glk:          NOTRUN -> [SKIP][57] ([i915#4613])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-glk6/igt@gem_lmem_swapping@random-engines.html

  * igt@gem_lmem_swapping@smem-oom:
    - shard-tglu:         NOTRUN -> [SKIP][58] ([i915#4613]) +1 other test skip
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@gem_lmem_swapping@smem-oom.html

  * igt@gem_lmem_swapping@smem-oom@lmem0:
    - shard-dg1:          [PASS][59] -> [TIMEOUT][60] ([i915#5493]) +1 other test timeout
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg1-14/igt@gem_lmem_swapping@smem-oom@lmem0.html
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-17/igt@gem_lmem_swapping@smem-oom@lmem0.html

  * igt@gem_lmem_swapping@verify:
    - shard-tglu-1:       NOTRUN -> [SKIP][61] ([i915#4613]) +1 other test skip
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@gem_lmem_swapping@verify.html

  * igt@gem_mmap_gtt@pf-nonblock:
    - shard-dg2:          NOTRUN -> [SKIP][62] ([i915#4077]) +8 other tests skip
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@gem_mmap_gtt@pf-nonblock.html

  * igt@gem_mmap_wc@copy:
    - shard-mtlp:         NOTRUN -> [SKIP][63] ([i915#4083])
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@gem_mmap_wc@copy.html

  * igt@gem_mmap_wc@write-cpu-read-wc:
    - shard-dg2:          NOTRUN -> [SKIP][64] ([i915#4083]) +3 other tests skip
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-3/igt@gem_mmap_wc@write-cpu-read-wc.html

  * igt@gem_mmap_wc@write-read:
    - shard-dg1:          NOTRUN -> [SKIP][65] ([i915#4083]) +5 other tests skip
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@gem_mmap_wc@write-read.html

  * igt@gem_partial_pwrite_pread@reads-display:
    - shard-mtlp:         NOTRUN -> [SKIP][66] ([i915#3282]) +1 other test skip
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@gem_partial_pwrite_pread@reads-display.html

  * igt@gem_partial_pwrite_pread@reads-uncached:
    - shard-rkl:          NOTRUN -> [SKIP][67] ([i915#3282]) +3 other tests skip
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-6/igt@gem_partial_pwrite_pread@reads-uncached.html

  * igt@gem_pread@snoop:
    - shard-dg2:          NOTRUN -> [SKIP][68] ([i915#3282]) +3 other tests skip
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@gem_pread@snoop.html

  * igt@gem_pwrite@basic-exhaustion:
    - shard-tglu-1:       NOTRUN -> [WARN][69] ([i915#2658])
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@gem_pwrite@basic-exhaustion.html
    - shard-dg1:          NOTRUN -> [SKIP][70] ([i915#3282]) +3 other tests skip
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@gem_pwrite@basic-exhaustion.html

  * igt@gem_pxp@dmabuf-shared-protected-dst-is-context-refcounted:
    - shard-rkl:          NOTRUN -> [TIMEOUT][71] ([i915#12964])
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-3/igt@gem_pxp@dmabuf-shared-protected-dst-is-context-refcounted.html

  * igt@gem_pxp@hw-rejects-pxp-buffer:
    - shard-rkl:          NOTRUN -> [TIMEOUT][72] ([i915#12917] / [i915#12964]) +2 other tests timeout
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-6/igt@gem_pxp@hw-rejects-pxp-buffer.html

  * igt@gem_pxp@regular-baseline-src-copy-readible:
    - shard-rkl:          NOTRUN -> [SKIP][73] ([i915#4270])
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-5/igt@gem_pxp@regular-baseline-src-copy-readible.html

  * igt@gem_pxp@reject-modify-context-protection-off-2:
    - shard-dg1:          NOTRUN -> [SKIP][74] ([i915#4270]) +3 other tests skip
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@gem_pxp@reject-modify-context-protection-off-2.html

  * igt@gem_pxp@reject-modify-context-protection-off-3:
    - shard-dg2:          NOTRUN -> [SKIP][75] ([i915#4270]) +2 other tests skip
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@gem_pxp@reject-modify-context-protection-off-3.html

  * igt@gem_render_copy@linear-to-vebox-yf-tiled:
    - shard-dg2:          NOTRUN -> [SKIP][76] ([i915#5190] / [i915#8428]) +2 other tests skip
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-3/igt@gem_render_copy@linear-to-vebox-yf-tiled.html

  * igt@gem_render_copy@y-tiled-ccs-to-y-tiled-mc-ccs:
    - shard-mtlp:         NOTRUN -> [SKIP][77] ([i915#8428])
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@gem_render_copy@y-tiled-ccs-to-y-tiled-mc-ccs.html

  * igt@gem_set_tiling_vs_gtt:
    - shard-dg1:          NOTRUN -> [SKIP][78] ([i915#4079]) +1 other test skip
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@gem_set_tiling_vs_gtt.html

  * igt@gem_tiled_pread_basic:
    - shard-dg2:          NOTRUN -> [SKIP][79] ([i915#4079])
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-3/igt@gem_tiled_pread_basic.html

  * igt@gem_unfence_active_buffers:
    - shard-dg2:          NOTRUN -> [SKIP][80] ([i915#4879])
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-3/igt@gem_unfence_active_buffers.html

  * igt@gem_userptr_blits@access-control:
    - shard-rkl:          NOTRUN -> [SKIP][81] ([i915#3297])
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-6/igt@gem_userptr_blits@access-control.html

  * igt@gem_userptr_blits@dmabuf-sync:
    - shard-dg1:          NOTRUN -> [SKIP][82] ([i915#3297])
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@gem_userptr_blits@dmabuf-sync.html

  * igt@gem_userptr_blits@map-fixed-invalidate-overlap:
    - shard-dg1:          NOTRUN -> [SKIP][83] ([i915#3297] / [i915#4880])
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@gem_userptr_blits@map-fixed-invalidate-overlap.html

  * igt@gem_userptr_blits@unsync-unmap-cycles:
    - shard-mtlp:         NOTRUN -> [SKIP][84] ([i915#3297]) +2 other tests skip
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@gem_userptr_blits@unsync-unmap-cycles.html

  * igt@gem_workarounds@reset-fd:
    - shard-mtlp:         [PASS][85] -> [ABORT][86] ([i915#13193]) +1 other test abort
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-mtlp-4/igt@gem_workarounds@reset-fd.html
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-7/igt@gem_workarounds@reset-fd.html

  * igt@gen7_exec_parse@bitmasks:
    - shard-dg2:          NOTRUN -> [SKIP][87] +10 other tests skip
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@gen7_exec_parse@bitmasks.html

  * igt@gen9_exec_parse@bb-secure:
    - shard-tglu-1:       NOTRUN -> [SKIP][88] ([i915#2527] / [i915#2856]) +1 other test skip
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@gen9_exec_parse@bb-secure.html

  * igt@gen9_exec_parse@bb-start-cmd:
    - shard-dg1:          NOTRUN -> [SKIP][89] ([i915#2527]) +4 other tests skip
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@gen9_exec_parse@bb-start-cmd.html

  * igt@gen9_exec_parse@bb-start-out:
    - shard-rkl:          NOTRUN -> [SKIP][90] ([i915#2527]) +2 other tests skip
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-4/igt@gen9_exec_parse@bb-start-out.html

  * igt@gen9_exec_parse@unaligned-access:
    - shard-tglu:         NOTRUN -> [SKIP][91] ([i915#2527] / [i915#2856]) +1 other test skip
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@gen9_exec_parse@unaligned-access.html

  * igt@gen9_exec_parse@unaligned-jump:
    - shard-mtlp:         NOTRUN -> [SKIP][92] ([i915#2856])
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@gen9_exec_parse@unaligned-jump.html

  * igt@gen9_exec_parse@valid-registers:
    - shard-dg2:          NOTRUN -> [SKIP][93] ([i915#2856]) +2 other tests skip
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@gen9_exec_parse@valid-registers.html

  * igt@i915_fb_tiling:
    - shard-dg1:          NOTRUN -> [SKIP][94] ([i915#4881])
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@i915_fb_tiling.html

  * igt@i915_module_load@reload-no-display:
    - shard-tglu-1:       NOTRUN -> [DMESG-WARN][95] ([i915#13029])
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@i915_module_load@reload-no-display.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-snb:          NOTRUN -> [ABORT][96] ([i915#9820])
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-snb7/igt@i915_module_load@reload-with-fault-injection.html
    - shard-tglu:         [PASS][97] -> [ABORT][98] ([i915#12817] / [i915#9820])
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-tglu-10/igt@i915_module_load@reload-with-fault-injection.html
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-9/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_pm_freq_api@freq-suspend:
    - shard-rkl:          NOTRUN -> [SKIP][99] ([i915#8399]) +1 other test skip
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-5/igt@i915_pm_freq_api@freq-suspend.html
    - shard-tglu:         NOTRUN -> [SKIP][100] ([i915#8399])
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@i915_pm_freq_api@freq-suspend.html

  * igt@i915_pm_rps@basic-api:
    - shard-dg2:          NOTRUN -> [SKIP][101] ([i915#11681] / [i915#6621])
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@i915_pm_rps@basic-api.html

  * igt@i915_pm_sseu@full-enable:
    - shard-mtlp:         NOTRUN -> [SKIP][102] ([i915#8437])
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-3/igt@i915_pm_sseu@full-enable.html

  * igt@i915_query@test-query-geometry-subslices:
    - shard-dg1:          NOTRUN -> [SKIP][103] ([i915#5723])
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@i915_query@test-query-geometry-subslices.html

  * igt@i915_suspend@basic-s3-without-i915:
    - shard-tglu-1:       NOTRUN -> [INCOMPLETE][104] ([i915#7443])
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@i915_suspend@basic-s3-without-i915.html

  * igt@kms_addfb_basic@framebuffer-vs-set-tiling:
    - shard-dg2:          NOTRUN -> [SKIP][105] ([i915#4212]) +1 other test skip
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_addfb_basic@framebuffer-vs-set-tiling.html

  * igt@kms_async_flips@async-flip-with-page-flip-events-atomic@pipe-a-hdmi-a-3-y-rc-ccs-cc:
    - shard-dg1:          NOTRUN -> [SKIP][106] ([i915#8709]) +7 other tests skip
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_async_flips@async-flip-with-page-flip-events-atomic@pipe-a-hdmi-a-3-y-rc-ccs-cc.html

  * igt@kms_async_flips@async-flip-with-page-flip-events-atomic@pipe-d-edp-1-4-mc-ccs:
    - shard-mtlp:         NOTRUN -> [SKIP][107] ([i915#8709]) +7 other tests skip
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@kms_async_flips@async-flip-with-page-flip-events-atomic@pipe-d-edp-1-4-mc-ccs.html

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-hdmi-a-1-4-mc-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][108] ([i915#8709]) +7 other tests skip
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-8/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-hdmi-a-1-4-mc-ccs.html

  * igt@kms_atomic@plane-primary-overlay-mutable-zpos:
    - shard-dg2:          NOTRUN -> [SKIP][109] ([i915#9531])
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-3/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html
    - shard-tglu:         NOTRUN -> [SKIP][110] ([i915#9531])
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing@pipe-a-hdmi-a-4:
    - shard-dg1:          [PASS][111] -> [FAIL][112] ([i915#5956]) +1 other test fail
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg1-14/igt@kms_atomic_transition@plane-all-modeset-transition-fencing@pipe-a-hdmi-a-4.html
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-17/igt@kms_atomic_transition@plane-all-modeset-transition-fencing@pipe-a-hdmi-a-4.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels:
    - shard-dg1:          NOTRUN -> [SKIP][113] ([i915#1769] / [i915#3555])
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels.html
    - shard-snb:          NOTRUN -> [SKIP][114] ([i915#1769])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-snb2/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels.html

  * igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-edp-1:
    - shard-mtlp:         [PASS][115] -> [FAIL][116] ([i915#11808] / [i915#5956]) +1 other test fail
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-mtlp-2/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-edp-1.html
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-1/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-edp-1.html

  * igt@kms_big_fb@4-tiled-32bpp-rotate-180:
    - shard-rkl:          NOTRUN -> [SKIP][117] ([i915#5286]) +4 other tests skip
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-5/igt@kms_big_fb@4-tiled-32bpp-rotate-180.html

  * igt@kms_big_fb@4-tiled-8bpp-rotate-90:
    - shard-dg1:          NOTRUN -> [SKIP][118] ([i915#4538] / [i915#5286]) +8 other tests skip
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@kms_big_fb@4-tiled-8bpp-rotate-90.html

  * igt@kms_big_fb@4-tiled-addfb-size-offset-overflow:
    - shard-dg1:          NOTRUN -> [SKIP][119] ([i915#5286])
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_big_fb@4-tiled-addfb-size-offset-overflow.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0:
    - shard-tglu:         NOTRUN -> [SKIP][120] ([i915#5286]) +2 other tests skip
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-async-flip:
    - shard-tglu-1:       NOTRUN -> [SKIP][121] ([i915#5286]) +2 other tests skip
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-async-flip.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip:
    - shard-mtlp:         [PASS][122] -> [DMESG-FAIL][123] ([i915#11627] / [i915#13314])
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-mtlp-7/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
   [123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html

  * igt@kms_big_fb@x-tiled-16bpp-rotate-90:
    - shard-rkl:          NOTRUN -> [SKIP][124] ([i915#3638]) +2 other tests skip
   [124]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-4/igt@kms_big_fb@x-tiled-16bpp-rotate-90.html

  * igt@kms_big_fb@y-tiled-8bpp-rotate-90:
    - shard-dg1:          NOTRUN -> [SKIP][125] ([i915#3638]) +1 other test skip
   [125]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_big_fb@y-tiled-8bpp-rotate-90.html

  * igt@kms_big_fb@yf-tiled-16bpp-rotate-180:
    - shard-rkl:          NOTRUN -> [SKIP][126] +14 other tests skip
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-6/igt@kms_big_fb@yf-tiled-16bpp-rotate-180.html

  * igt@kms_big_fb@yf-tiled-64bpp-rotate-0:
    - shard-dg2:          NOTRUN -> [SKIP][127] ([i915#4538] / [i915#5190]) +8 other tests skip
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@kms_big_fb@yf-tiled-64bpp-rotate-0.html

  * igt@kms_big_fb@yf-tiled-64bpp-rotate-90:
    - shard-dg1:          NOTRUN -> [SKIP][128] ([i915#4538]) +6 other tests skip
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_big_fb@yf-tiled-64bpp-rotate-90.html

  * igt@kms_big_fb@yf-tiled-8bpp-rotate-270:
    - shard-tglu:         NOTRUN -> [SKIP][129] +38 other tests skip
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@kms_big_fb@yf-tiled-8bpp-rotate-270.html

  * igt@kms_big_fb@yf-tiled-addfb-size-overflow:
    - shard-mtlp:         NOTRUN -> [SKIP][130] ([i915#6187])
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html

  * igt@kms_ccs@bad-pixel-format-4-tiled-dg2-rc-ccs-cc@pipe-a-hdmi-a-3:
    - shard-dg1:          NOTRUN -> [SKIP][131] ([i915#4423] / [i915#6095]) +1 other test skip
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@kms_ccs@bad-pixel-format-4-tiled-dg2-rc-ccs-cc@pipe-a-hdmi-a-3.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-dg2-mc-ccs@pipe-c-hdmi-a-1:
    - shard-tglu:         NOTRUN -> [SKIP][132] ([i915#6095]) +39 other tests skip
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@kms_ccs@bad-rotation-90-4-tiled-dg2-mc-ccs@pipe-c-hdmi-a-1.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [SKIP][133] ([i915#6095]) +135 other tests skip
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-18/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-b-hdmi-a-4.html

  * igt@kms_ccs@bad-rotation-90-y-tiled-gen12-rc-ccs@pipe-d-hdmi-a-1:
    - shard-dg2:          NOTRUN -> [SKIP][134] ([i915#10307] / [i915#10434] / [i915#6095]) +2 other tests skip
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-8/igt@kms_ccs@bad-rotation-90-y-tiled-gen12-rc-ccs@pipe-d-hdmi-a-1.html

  * igt@kms_ccs@ccs-on-another-bo-yf-tiled-ccs@pipe-a-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][135] ([i915#10307] / [i915#6095]) +155 other tests skip
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-7/igt@kms_ccs@ccs-on-another-bo-yf-tiled-ccs@pipe-a-hdmi-a-3.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][136] ([i915#12313])
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-5/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs.html
    - shard-tglu:         NOTRUN -> [SKIP][137] ([i915#12313])
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs@pipe-b-hdmi-a-1:
    - shard-rkl:          NOTRUN -> [SKIP][138] ([i915#6095]) +87 other tests skip
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-4/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-mc-ccs@pipe-b-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs@pipe-c-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][139] ([i915#6095]) +14 other tests skip
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs@pipe-c-edp-1.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][140] ([i915#12313]) +2 other tests skip
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@kms_ccs@crc-primary-rotation-180-4-tiled-lnl-ccs.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
    - shard-rkl:          NOTRUN -> [SKIP][141] ([i915#12805])
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-6/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-1:
    - shard-tglu-1:       NOTRUN -> [SKIP][142] ([i915#6095]) +29 other tests skip
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc@pipe-b-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][143] ([i915#6095]) +17 other tests skip
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc@pipe-b-hdmi-a-3.html

  * igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs:
    - shard-tglu-1:       NOTRUN -> [SKIP][144] ([i915#12313]) +1 other test skip
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs.html

  * igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs:
    - shard-dg1:          NOTRUN -> [SKIP][145] ([i915#12313]) +2 other tests skip
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs.html

  * igt@kms_cdclk@mode-transition:
    - shard-rkl:          NOTRUN -> [SKIP][146] ([i915#3742])
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-4/igt@kms_cdclk@mode-transition.html

  * igt@kms_cdclk@plane-scaling@pipe-c-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][147] ([i915#4087]) +4 other tests skip
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@kms_cdclk@plane-scaling@pipe-c-edp-1.html

  * igt@kms_chamelium_color@ctm-blue-to-red:
    - shard-mtlp:         NOTRUN -> [SKIP][148] +5 other tests skip
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@kms_chamelium_color@ctm-blue-to-red.html

  * igt@kms_chamelium_color@ctm-negative:
    - shard-glk:          NOTRUN -> [SKIP][149] +73 other tests skip
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-glk6/igt@kms_chamelium_color@ctm-negative.html

  * igt@kms_chamelium_edid@dp-edid-stress-resolution-non-4k:
    - shard-dg2:          NOTRUN -> [SKIP][150] ([i915#11151] / [i915#7828]) +4 other tests skip
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_chamelium_edid@dp-edid-stress-resolution-non-4k.html

  * igt@kms_chamelium_edid@dp-mode-timings:
    - shard-mtlp:         NOTRUN -> [SKIP][151] ([i915#11151] / [i915#7828]) +2 other tests skip
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@kms_chamelium_edid@dp-mode-timings.html

  * igt@kms_chamelium_frames@dp-crc-fast:
    - shard-tglu-1:       NOTRUN -> [SKIP][152] ([i915#11151] / [i915#7828]) +2 other tests skip
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_chamelium_frames@dp-crc-fast.html

  * igt@kms_chamelium_frames@dp-crc-single:
    - shard-dg1:          NOTRUN -> [SKIP][153] ([i915#11151] / [i915#7828]) +11 other tests skip
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@kms_chamelium_frames@dp-crc-single.html

  * igt@kms_chamelium_hpd@hdmi-hpd-storm-disable:
    - shard-tglu:         NOTRUN -> [SKIP][154] ([i915#11151] / [i915#7828]) +2 other tests skip
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@kms_chamelium_hpd@hdmi-hpd-storm-disable.html

  * igt@kms_chamelium_hpd@vga-hpd-fast:
    - shard-rkl:          NOTRUN -> [SKIP][155] ([i915#11151] / [i915#7828]) +9 other tests skip
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-6/igt@kms_chamelium_hpd@vga-hpd-fast.html

  * igt@kms_color@deep-color:
    - shard-dg2:          [PASS][156] -> [SKIP][157] ([i915#3555])
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg2-10/igt@kms_color@deep-color.html
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_color@deep-color.html

  * igt@kms_content_protection@atomic-dpms:
    - shard-tglu:         NOTRUN -> [SKIP][158] ([i915#6944] / [i915#7116] / [i915#7118] / [i915#9424])
   [158]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@kms_content_protection@atomic-dpms.html

  * igt@kms_content_protection@atomic-dpms@pipe-a-dp-4:
    - shard-dg2:          NOTRUN -> [TIMEOUT][159] ([i915#7173])
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-10/igt@kms_content_protection@atomic-dpms@pipe-a-dp-4.html

  * igt@kms_content_protection@dp-mst-type-0:
    - shard-tglu:         NOTRUN -> [SKIP][160] ([i915#3116] / [i915#3299])
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@kms_content_protection@dp-mst-type-0.html

  * igt@kms_content_protection@dp-mst-type-1:
    - shard-tglu-1:       NOTRUN -> [SKIP][161] ([i915#3116] / [i915#3299])
   [161]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_content_protection@dp-mst-type-1.html
    - shard-dg2:          NOTRUN -> [SKIP][162] ([i915#3299]) +1 other test skip
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@kms_content_protection@dp-mst-type-1.html

  * igt@kms_content_protection@lic-type-1:
    - shard-mtlp:         NOTRUN -> [SKIP][163] ([i915#6944] / [i915#9424]) +1 other test skip
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@kms_content_protection@lic-type-1.html
    - shard-snb:          NOTRUN -> [INCOMPLETE][164] ([i915#8816])
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-snb7/igt@kms_content_protection@lic-type-1.html
    - shard-dg1:          NOTRUN -> [SKIP][165] ([i915#9424])
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_content_protection@lic-type-1.html

  * igt@kms_content_protection@mei-interface:
    - shard-dg2:          NOTRUN -> [SKIP][166] ([i915#9424])
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_content_protection@mei-interface.html

  * igt@kms_content_protection@type1:
    - shard-rkl:          NOTRUN -> [SKIP][167] ([i915#7118] / [i915#9424]) +1 other test skip
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-6/igt@kms_content_protection@type1.html

  * igt@kms_content_protection@uevent:
    - shard-tglu-1:       NOTRUN -> [SKIP][168] ([i915#6944] / [i915#7116] / [i915#7118] / [i915#9424])
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_content_protection@uevent.html
    - shard-dg1:          NOTRUN -> [SKIP][169] ([i915#7116] / [i915#9424])
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_content_protection@uevent.html

  * igt@kms_cursor_crc@cursor-offscreen-32x32:
    - shard-tglu:         NOTRUN -> [SKIP][170] ([i915#3555]) +3 other tests skip
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@kms_cursor_crc@cursor-offscreen-32x32.html

  * igt@kms_cursor_crc@cursor-offscreen-512x512:
    - shard-rkl:          NOTRUN -> [SKIP][171] ([i915#13049]) +2 other tests skip
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-6/igt@kms_cursor_crc@cursor-offscreen-512x512.html

  * igt@kms_cursor_crc@cursor-onscreen-512x170:
    - shard-mtlp:         NOTRUN -> [SKIP][172] ([i915#13049]) +1 other test skip
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@kms_cursor_crc@cursor-onscreen-512x170.html

  * igt@kms_cursor_crc@cursor-random-512x512:
    - shard-dg2:          NOTRUN -> [SKIP][173] ([i915#13049])
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@kms_cursor_crc@cursor-random-512x512.html
    - shard-tglu-1:       NOTRUN -> [SKIP][174] ([i915#13049])
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_cursor_crc@cursor-random-512x512.html

  * igt@kms_cursor_crc@cursor-sliding-256x85:
    - shard-rkl:          NOTRUN -> [DMESG-WARN][175] ([i915#12917] / [i915#12964])
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-6/igt@kms_cursor_crc@cursor-sliding-256x85.html

  * igt@kms_cursor_crc@cursor-sliding-512x512:
    - shard-dg1:          NOTRUN -> [SKIP][176] ([i915#13049]) +2 other tests skip
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_cursor_crc@cursor-sliding-512x512.html

  * igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic:
    - shard-mtlp:         NOTRUN -> [SKIP][177] ([i915#9809])
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@kms_cursor_legacy@2x-long-nonblocking-modeset-vs-cursor-atomic.html

  * igt@kms_cursor_legacy@2x-nonblocking-modeset-vs-cursor-atomic:
    - shard-dg2:          NOTRUN -> [SKIP][178] ([i915#13046] / [i915#5354]) +3 other tests skip
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_cursor_legacy@2x-nonblocking-modeset-vs-cursor-atomic.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size:
    - shard-dg1:          NOTRUN -> [SKIP][179] ([i915#4103] / [i915#4213])
   [179]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html

  * igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot:
    - shard-rkl:          NOTRUN -> [SKIP][180] ([i915#9067])
   [180]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-4/igt@kms_cursor_legacy@modeset-atomic-cursor-hotspot.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle:
    - shard-tglu:         NOTRUN -> [SKIP][181] ([i915#4103])
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html
    - shard-dg2:          NOTRUN -> [SKIP][182] ([i915#4103] / [i915#4213])
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-3/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html

  * igt@kms_dirtyfb@fbc-dirtyfb-ioctl:
    - shard-snb:          NOTRUN -> [FAIL][183] ([i915#12170])
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-snb5/igt@kms_dirtyfb@fbc-dirtyfb-ioctl.html

  * igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-1:
    - shard-snb:          NOTRUN -> [FAIL][184] ([i915#11968])
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-snb5/igt@kms_dirtyfb@fbc-dirtyfb-ioctl@a-hdmi-a-1.html

  * igt@kms_dirtyfb@psr-dirtyfb-ioctl:
    - shard-dg1:          NOTRUN -> [SKIP][185] ([i915#9723])
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@kms_dirtyfb@psr-dirtyfb-ioctl.html

  * igt@kms_display_modes@mst-extended-mode-negative:
    - shard-tglu-1:       NOTRUN -> [SKIP][186] ([i915#8588])
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_display_modes@mst-extended-mode-negative.html
    - shard-dg1:          NOTRUN -> [SKIP][187] ([i915#8588])
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_display_modes@mst-extended-mode-negative.html

  * igt@kms_dp_aux_dev:
    - shard-dg2:          [PASS][188] -> [SKIP][189] ([i915#1257])
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg2-10/igt@kms_dp_aux_dev.html
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_dp_aux_dev.html

  * igt@kms_dp_linktrain_fallback@dp-fallback:
    - shard-dg1:          NOTRUN -> [SKIP][190] ([i915#12402])
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_dp_linktrain_fallback@dp-fallback.html

  * igt@kms_dsc@dsc-fractional-bpp:
    - shard-rkl:          NOTRUN -> [SKIP][191] ([i915#3840])
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-5/igt@kms_dsc@dsc-fractional-bpp.html
    - shard-tglu:         NOTRUN -> [SKIP][192] ([i915#3840])
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@kms_dsc@dsc-fractional-bpp.html

  * igt@kms_dsc@dsc-fractional-bpp-with-bpc:
    - shard-dg1:          NOTRUN -> [SKIP][193] ([i915#3840])
   [193]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@kms_dsc@dsc-fractional-bpp-with-bpc.html

  * igt@kms_dsc@dsc-with-bpc-formats:
    - shard-dg2:          NOTRUN -> [SKIP][194] ([i915#3555] / [i915#3840])
   [194]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-3/igt@kms_dsc@dsc-with-bpc-formats.html
    - shard-tglu:         NOTRUN -> [SKIP][195] ([i915#3555] / [i915#3840])
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@kms_dsc@dsc-with-bpc-formats.html

  * igt@kms_dsc@dsc-with-formats:
    - shard-rkl:          NOTRUN -> [SKIP][196] ([i915#3555] / [i915#3840])
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-6/igt@kms_dsc@dsc-with-formats.html

  * igt@kms_dsc@dsc-with-output-formats-with-bpc:
    - shard-rkl:          NOTRUN -> [SKIP][197] ([i915#3840] / [i915#9053])
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-4/igt@kms_dsc@dsc-with-output-formats-with-bpc.html

  * igt@kms_feature_discovery@display-2x:
    - shard-rkl:          NOTRUN -> [SKIP][198] ([i915#1839])
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-6/igt@kms_feature_discovery@display-2x.html

  * igt@kms_feature_discovery@display-4x:
    - shard-dg2:          NOTRUN -> [SKIP][199] ([i915#1839])
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_feature_discovery@display-4x.html

  * igt@kms_feature_discovery@dp-mst:
    - shard-tglu-1:       NOTRUN -> [SKIP][200] ([i915#9337])
   [200]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_feature_discovery@dp-mst.html
    - shard-dg1:          NOTRUN -> [SKIP][201] ([i915#9337])
   [201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_feature_discovery@dp-mst.html

  * igt@kms_feature_discovery@psr2:
    - shard-dg1:          NOTRUN -> [SKIP][202] ([i915#658]) +1 other test skip
   [202]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_feature_discovery@psr2.html

  * igt@kms_flip@2x-flip-vs-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][203] ([i915#9934]) +6 other tests skip
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-5/igt@kms_flip@2x-flip-vs-dpms.html

  * igt@kms_flip@2x-modeset-vs-vblank-race-interruptible:
    - shard-mtlp:         NOTRUN -> [SKIP][204] ([i915#3637]) +3 other tests skip
   [204]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@kms_flip@2x-modeset-vs-vblank-race-interruptible.html

  * igt@kms_flip@2x-plain-flip-fb-recreate-interruptible:
    - shard-dg1:          NOTRUN -> [SKIP][205] ([i915#9934]) +5 other tests skip
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html
    - shard-snb:          NOTRUN -> [FAIL][206] ([i915#11989]) +1 other test fail
   [206]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-snb7/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html

  * igt@kms_flip@2x-plain-flip-ts-check-interruptible:
    - shard-tglu:         NOTRUN -> [SKIP][207] ([i915#3637]) +2 other tests skip
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@kms_flip@2x-plain-flip-ts-check-interruptible.html

  * igt@kms_flip@2x-single-buffer-flip-vs-dpms-off-vs-modeset:
    - shard-dg2:          NOTRUN -> [SKIP][208] ([i915#9934]) +5 other tests skip
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_flip@2x-single-buffer-flip-vs-dpms-off-vs-modeset.html

  * igt@kms_flip@2x-wf_vblank-ts-check:
    - shard-tglu-1:       NOTRUN -> [SKIP][209] ([i915#3637]) +2 other tests skip
   [209]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_flip@2x-wf_vblank-ts-check.html

  * igt@kms_flip@flip-vs-blocking-wf-vblank:
    - shard-tglu-1:       NOTRUN -> [FAIL][210] ([i915#11989]) +2 other tests fail
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_flip@flip-vs-blocking-wf-vblank.html

  * igt@kms_flip@flip-vs-expired-vblank@b-hdmi-a4:
    - shard-dg1:          [PASS][211] -> [FAIL][212] ([i915#13027]) +1 other test fail
   [211]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg1-17/igt@kms_flip@flip-vs-expired-vblank@b-hdmi-a4.html
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-14/igt@kms_flip@flip-vs-expired-vblank@b-hdmi-a4.html

  * igt@kms_flip@flip-vs-suspend-interruptible@c-hdmi-a4:
    - shard-dg1:          [PASS][213] -> [DMESG-WARN][214] ([i915#4423]) +2 other tests dmesg-warn
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg1-14/igt@kms_flip@flip-vs-suspend-interruptible@c-hdmi-a4.html
   [214]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-17/igt@kms_flip@flip-vs-suspend-interruptible@c-hdmi-a4.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode:
    - shard-dg2:          NOTRUN -> [SKIP][215] ([i915#2672]) +2 other tests skip
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling@pipe-a-valid-mode:
    - shard-tglu:         NOTRUN -> [SKIP][216] ([i915#2587] / [i915#2672]) +1 other test skip
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-downscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling:
    - shard-tglu:         NOTRUN -> [SKIP][217] ([i915#2587] / [i915#2672] / [i915#3555]) +1 other test skip
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling@pipe-a-valid-mode:
    - shard-rkl:          NOTRUN -> [SKIP][218] ([i915#2672]) +2 other tests skip
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-5/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling:
    - shard-rkl:          NOTRUN -> [SKIP][219] ([i915#2672] / [i915#3555]) +2 other tests skip
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-4/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling:
    - shard-mtlp:         NOTRUN -> [SKIP][220] ([i915#2672] / [i915#3555] / [i915#8813]) +2 other tests skip
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling@pipe-a-default-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][221] ([i915#2672] / [i915#8813]) +2 other tests skip
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling@pipe-a-default-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling:
    - shard-dg1:          NOTRUN -> [SKIP][222] ([i915#2672] / [i915#3555]) +4 other tests skip
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling@pipe-a-valid-mode:
    - shard-dg1:          NOTRUN -> [SKIP][223] ([i915#2587] / [i915#2672]) +4 other tests skip
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-16bpp-ytile-downscaling:
    - shard-dg2:          NOTRUN -> [SKIP][224] ([i915#2672] / [i915#3555] / [i915#5190]) +2 other tests skip
   [224]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-16bpp-ytile-downscaling.html

  * igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-cpu:
    - shard-dg2:          [PASS][225] -> [FAIL][226] ([i915#6880])
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-cpu.html
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-10/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt:
    - shard-dg2:          NOTRUN -> [SKIP][227] ([i915#5354]) +22 other tests skip
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-dg2:          NOTRUN -> [SKIP][228] ([i915#8708]) +12 other tests skip
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-move:
    - shard-mtlp:         NOTRUN -> [SKIP][229] ([i915#1825]) +12 other tests skip
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][230] ([i915#1825]) +25 other tests skip
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-4/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-shrfb-draw-mmap-wc:
    - shard-tglu-1:       NOTRUN -> [SKIP][231] +37 other tests skip
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-pwrite:
    - shard-dg2:          NOTRUN -> [SKIP][232] ([i915#10433] / [i915#3458]) +3 other tests skip
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-onoff:
    - shard-dg1:          NOTRUN -> [SKIP][233] +68 other tests skip
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][234] ([i915#8708]) +3 other tests skip
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-tiling-y:
    - shard-dg2:          NOTRUN -> [SKIP][235] ([i915#10055])
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@kms_frontbuffer_tracking@fbcpsr-tiling-y.html

  * igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-blt:
    - shard-dg1:          NOTRUN -> [SKIP][236] ([i915#3458]) +25 other tests skip
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-dg1:          NOTRUN -> [SKIP][237] ([i915#8708]) +13 other tests skip
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-msflip-blt:
    - shard-dg2:          NOTRUN -> [SKIP][238] ([i915#3458]) +8 other tests skip
   [238]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-plflip-blt:
    - shard-rkl:          NOTRUN -> [SKIP][239] ([i915#3023]) +20 other tests skip
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-4/igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-plflip-blt.html

  * igt@kms_hdr@bpc-switch-suspend:
    - shard-dg2:          [PASS][240] -> [SKIP][241] ([i915#3555] / [i915#8228])
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg2-10/igt@kms_hdr@bpc-switch-suspend.html
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_hdr@bpc-switch-suspend.html

  * igt@kms_hdr@brightness-with-hdr:
    - shard-dg1:          NOTRUN -> [SKIP][242] ([i915#12713])
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_hdr@brightness-with-hdr.html

  * igt@kms_hdr@invalid-metadata-sizes:
    - shard-tglu-1:       NOTRUN -> [SKIP][243] ([i915#3555] / [i915#8228])
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_hdr@invalid-metadata-sizes.html

  * igt@kms_hdr@static-swap:
    - shard-rkl:          NOTRUN -> [SKIP][244] ([i915#3555] / [i915#8228])
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-4/igt@kms_hdr@static-swap.html

  * igt@kms_hdr@static-toggle:
    - shard-dg1:          NOTRUN -> [SKIP][245] ([i915#3555] / [i915#8228]) +2 other tests skip
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_hdr@static-toggle.html

  * igt@kms_joiner@basic-force-ultra-joiner:
    - shard-tglu-1:       NOTRUN -> [SKIP][246] ([i915#12394] / [i915#13522])
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_joiner@basic-force-ultra-joiner.html
    - shard-dg2:          NOTRUN -> [SKIP][247] ([i915#10656] / [i915#13522])
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@kms_joiner@basic-force-ultra-joiner.html

  * igt@kms_joiner@invalid-modeset-big-joiner:
    - shard-dg1:          NOTRUN -> [SKIP][248] ([i915#10656])
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@kms_joiner@invalid-modeset-big-joiner.html

  * igt@kms_joiner@invalid-modeset-ultra-joiner:
    - shard-mtlp:         NOTRUN -> [SKIP][249] ([i915#12339])
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@kms_joiner@invalid-modeset-ultra-joiner.html
    - shard-dg1:          NOTRUN -> [SKIP][250] ([i915#12339])
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_joiner@invalid-modeset-ultra-joiner.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-rkl:          NOTRUN -> [SKIP][251] ([i915#4070] / [i915#4816])
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-6/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_panel_fitting@atomic-fastset:
    - shard-tglu:         NOTRUN -> [SKIP][252] ([i915#6301])
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@kms_panel_fitting@atomic-fastset.html
    - shard-dg2:          NOTRUN -> [SKIP][253] ([i915#6301])
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-3/igt@kms_panel_fitting@atomic-fastset.html

  * igt@kms_panel_fitting@legacy:
    - shard-rkl:          NOTRUN -> [SKIP][254] ([i915#6301])
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-6/igt@kms_panel_fitting@legacy.html

  * igt@kms_plane_lowres@tiling-x:
    - shard-mtlp:         NOTRUN -> [SKIP][255] ([i915#11614] / [i915#3582]) +1 other test skip
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@kms_plane_lowres@tiling-x.html

  * igt@kms_plane_lowres@tiling-x@pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][256] ([i915#10226] / [i915#11614] / [i915#3582]) +2 other tests skip
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@kms_plane_lowres@tiling-x@pipe-a-edp-1.html

  * igt@kms_plane_multiple@tiling-y:
    - shard-dg2:          NOTRUN -> [SKIP][257] ([i915#8806])
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_plane_multiple@tiling-y.html

  * igt@kms_plane_multiple@tiling-yf:
    - shard-dg2:          NOTRUN -> [SKIP][258] ([i915#3555] / [i915#8806])
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-3/igt@kms_plane_multiple@tiling-yf.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format:
    - shard-tglu-1:       NOTRUN -> [SKIP][259] ([i915#12247]) +4 other tests skip
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format.html
    - shard-dg2:          NOTRUN -> [SKIP][260] ([i915#12247] / [i915#9423])
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-d:
    - shard-dg2:          NOTRUN -> [SKIP][261] ([i915#12247]) +7 other tests skip
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-d.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25:
    - shard-rkl:          NOTRUN -> [SKIP][262] ([i915#12247] / [i915#6953])
   [262]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-5/igt@kms_plane_scaling@planes-downscale-factor-0-25.html
    - shard-tglu:         NOTRUN -> [SKIP][263] ([i915#12247] / [i915#6953]) +1 other test skip
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@kms_plane_scaling@planes-downscale-factor-0-25.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-d:
    - shard-dg1:          NOTRUN -> [SKIP][264] ([i915#12247]) +9 other tests skip
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-d.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-b:
    - shard-rkl:          NOTRUN -> [SKIP][265] ([i915#12247]) +4 other tests skip
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-5/igt@kms_plane_scaling@planes-downscale-factor-0-25@pipe-b.html

  * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75:
    - shard-mtlp:         NOTRUN -> [SKIP][266] ([i915#12247] / [i915#6953])
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75.html

  * igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75@pipe-d:
    - shard-mtlp:         NOTRUN -> [SKIP][267] ([i915#12247]) +3 other tests skip
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75@pipe-d.html

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25:
    - shard-dg2:          NOTRUN -> [SKIP][268] ([i915#12247] / [i915#6953] / [i915#9423])
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-3/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25.html

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-b:
    - shard-tglu:         NOTRUN -> [SKIP][269] ([i915#12247]) +7 other tests skip
   [269]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-b.html

  * igt@kms_pm_backlight@fade-with-dpms:
    - shard-rkl:          NOTRUN -> [SKIP][270] ([i915#5354])
   [270]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-6/igt@kms_pm_backlight@fade-with-dpms.html

  * igt@kms_pm_dc@dc3co-vpb-simulation:
    - shard-rkl:          NOTRUN -> [SKIP][271] ([i915#9685]) +1 other test skip
   [271]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-5/igt@kms_pm_dc@dc3co-vpb-simulation.html
    - shard-tglu:         NOTRUN -> [SKIP][272] ([i915#9685])
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@kms_pm_dc@dc3co-vpb-simulation.html

  * igt@kms_pm_dc@dc5-retention-flops:
    - shard-dg1:          NOTRUN -> [SKIP][273] ([i915#3828])
   [273]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_pm_dc@dc5-retention-flops.html

  * igt@kms_pm_dc@dc9-dpms:
    - shard-tglu:         NOTRUN -> [SKIP][274] ([i915#4281])
   [274]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@kms_pm_dc@dc9-dpms.html

  * igt@kms_pm_lpsp@kms-lpsp:
    - shard-dg1:          NOTRUN -> [SKIP][275] ([i915#9340])
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_pm_lpsp@kms-lpsp.html

  * igt@kms_pm_rpm@dpms-non-lpsp:
    - shard-mtlp:         NOTRUN -> [SKIP][276] ([i915#9519])
   [276]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-3/igt@kms_pm_rpm@dpms-non-lpsp.html

  * igt@kms_pm_rpm@fences:
    - shard-dg1:          NOTRUN -> [SKIP][277] ([i915#4077]) +11 other tests skip
   [277]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@kms_pm_rpm@fences.html

  * igt@kms_pm_rpm@modeset-lpsp-stress:
    - shard-dg1:          NOTRUN -> [SKIP][278] ([i915#9519]) +1 other test skip
   [278]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_pm_rpm@modeset-lpsp-stress.html

  * igt@kms_pm_rpm@modeset-non-lpsp:
    - shard-tglu:         NOTRUN -> [SKIP][279] ([i915#9519])
   [279]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@kms_pm_rpm@modeset-non-lpsp.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait:
    - shard-tglu-1:       NOTRUN -> [SKIP][280] ([i915#9519])
   [280]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_pm_rpm@modeset-non-lpsp-stress-no-wait.html

  * igt@kms_pm_rpm@pm-caching:
    - shard-mtlp:         NOTRUN -> [SKIP][281] ([i915#4077]) +2 other tests skip
   [281]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@kms_pm_rpm@pm-caching.html

  * igt@kms_prime@basic-modeset-hybrid:
    - shard-dg2:          NOTRUN -> [SKIP][282] ([i915#6524] / [i915#6805]) +1 other test skip
   [282]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_prime@basic-modeset-hybrid.html

  * igt@kms_prime@d3hot:
    - shard-tglu:         NOTRUN -> [SKIP][283] ([i915#6524])
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@kms_prime@d3hot.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf:
    - shard-dg1:          NOTRUN -> [SKIP][284] ([i915#11520]) +13 other tests skip
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf@pipe-a-edp-1:
    - shard-mtlp:         NOTRUN -> [SKIP][285] ([i915#9808]) +3 other tests skip
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@kms_psr2_sf@fbc-psr2-cursor-plane-update-sf@pipe-a-edp-1.html

  * igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-continuous-sf:
    - shard-mtlp:         NOTRUN -> [SKIP][286] ([i915#12316]) +3 other tests skip
   [286]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@kms_psr2_sf@fbc-psr2-overlay-plane-update-continuous-sf.html

  * igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area:
    - shard-glk:          NOTRUN -> [SKIP][287] ([i915#11520])
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-glk6/igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area.html

  * igt@kms_psr2_sf@fbc-psr2-primary-plane-update-sf-dmg-area:
    - shard-tglu:         NOTRUN -> [SKIP][288] ([i915#11520]) +1 other test skip
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@kms_psr2_sf@fbc-psr2-primary-plane-update-sf-dmg-area.html

  * igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf:
    - shard-rkl:          NOTRUN -> [SKIP][289] ([i915#11520]) +2 other tests skip
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-6/igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf.html

  * igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-fully-sf:
    - shard-snb:          NOTRUN -> [SKIP][290] ([i915#11520]) +6 other tests skip
   [290]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-snb5/igt@kms_psr2_sf@psr2-cursor-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area:
    - shard-dg2:          NOTRUN -> [SKIP][291] ([i915#11520]) +4 other tests skip
   [291]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area.html
    - shard-tglu-1:       NOTRUN -> [SKIP][292] ([i915#11520]) +2 other tests skip
   [292]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_su@frontbuffer-xrgb8888:
    - shard-rkl:          NOTRUN -> [SKIP][293] ([i915#9683])
   [293]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-3/igt@kms_psr2_su@frontbuffer-xrgb8888.html

  * igt@kms_psr2_su@page_flip-nv12:
    - shard-dg1:          NOTRUN -> [SKIP][294] ([i915#9683])
   [294]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_psr2_su@page_flip-nv12.html

  * igt@kms_psr@fbc-psr2-no-drrs:
    - shard-mtlp:         NOTRUN -> [SKIP][295] ([i915#9688]) +8 other tests skip
   [295]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@kms_psr@fbc-psr2-no-drrs.html

  * igt@kms_psr@pr-basic:
    - shard-tglu:         NOTRUN -> [SKIP][296] ([i915#9732]) +11 other tests skip
   [296]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@kms_psr@pr-basic.html

  * igt@kms_psr@pr-sprite-mmap-gtt:
    - shard-rkl:          NOTRUN -> [SKIP][297] ([i915#1072] / [i915#9732]) +20 other tests skip
   [297]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-6/igt@kms_psr@pr-sprite-mmap-gtt.html

  * igt@kms_psr@psr-primary-mmap-cpu:
    - shard-dg2:          NOTRUN -> [SKIP][298] ([i915#1072] / [i915#9732]) +15 other tests skip
   [298]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@kms_psr@psr-primary-mmap-cpu.html

  * igt@kms_psr@psr2-primary-mmap-cpu:
    - shard-tglu-1:       NOTRUN -> [SKIP][299] ([i915#9732]) +9 other tests skip
   [299]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_psr@psr2-primary-mmap-cpu.html
    - shard-dg1:          NOTRUN -> [SKIP][300] ([i915#1072] / [i915#9732]) +26 other tests skip
   [300]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_psr@psr2-primary-mmap-cpu.html

  * igt@kms_psr_stress_test@flip-primary-invalidate-overlay:
    - shard-dg2:          NOTRUN -> [SKIP][301] ([i915#9685])
   [301]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html

  * igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
    - shard-dg1:          NOTRUN -> [SKIP][302] ([i915#9685])
   [302]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html

  * igt@kms_rotation_crc@bad-pixel-format:
    - shard-snb:          NOTRUN -> [SKIP][303] +247 other tests skip
   [303]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-snb7/igt@kms_rotation_crc@bad-pixel-format.html
    - shard-mtlp:         NOTRUN -> [SKIP][304] ([i915#12755]) +1 other test skip
   [304]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@kms_rotation_crc@bad-pixel-format.html

  * igt@kms_rotation_crc@primary-4-tiled-reflect-x-180:
    - shard-tglu:         NOTRUN -> [SKIP][305] ([i915#5289])
   [305]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@kms_rotation_crc@primary-4-tiled-reflect-x-180.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
    - shard-dg1:          NOTRUN -> [SKIP][306] ([i915#5289])
   [306]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html
    - shard-mtlp:         NOTRUN -> [SKIP][307] ([i915#5289])
   [307]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180:
    - shard-dg2:          NOTRUN -> [SKIP][308] ([i915#5190])
   [308]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html

  * igt@kms_scaling_modes@scaling-mode-center:
    - shard-dg1:          NOTRUN -> [SKIP][309] ([i915#3555]) +7 other tests skip
   [309]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@kms_scaling_modes@scaling-mode-center.html

  * igt@kms_selftest@drm_framebuffer:
    - shard-dg1:          NOTRUN -> [ABORT][310] ([i915#13179]) +1 other test abort
   [310]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@kms_selftest@drm_framebuffer.html

  * igt@kms_setmode@basic-clone-single-crtc:
    - shard-rkl:          NOTRUN -> [SKIP][311] ([i915#3555]) +1 other test skip
   [311]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-5/igt@kms_setmode@basic-clone-single-crtc.html

  * igt@kms_sysfs_edid_timing:
    - shard-dg2:          NOTRUN -> [FAIL][312] ([IGT#160])
   [312]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@kms_sysfs_edid_timing.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-dg1:          NOTRUN -> [SKIP][313] ([i915#8623])
   [313]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@kms_tiled_display@basic-test-pattern.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-rkl:          NOTRUN -> [SKIP][314] ([i915#8623])
   [314]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-3/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  * igt@kms_universal_plane@universal-plane-functional:
    - shard-rkl:          [PASS][315] -> [DMESG-WARN][316] ([i915#12964]) +3 other tests dmesg-warn
   [315]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-rkl-5/igt@kms_universal_plane@universal-plane-functional.html
   [316]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-7/igt@kms_universal_plane@universal-plane-functional.html

  * igt@kms_vrr@flip-basic-fastset:
    - shard-mtlp:         NOTRUN -> [SKIP][317] ([i915#8808] / [i915#9906])
   [317]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@kms_vrr@flip-basic-fastset.html

  * igt@kms_vrr@flipline:
    - shard-dg2:          NOTRUN -> [SKIP][318] ([i915#3555]) +3 other tests skip
   [318]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@kms_vrr@flipline.html
    - shard-tglu-1:       NOTRUN -> [SKIP][319] ([i915#3555])
   [319]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@kms_vrr@flipline.html

  * igt@kms_vrr@negative-basic:
    - shard-rkl:          NOTRUN -> [SKIP][320] ([i915#3555] / [i915#9906])
   [320]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-3/igt@kms_vrr@negative-basic.html

  * igt@kms_vrr@seamless-rr-switch-virtual:
    - shard-dg2:          NOTRUN -> [SKIP][321] ([i915#9906])
   [321]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-3/igt@kms_vrr@seamless-rr-switch-virtual.html
    - shard-tglu:         NOTRUN -> [SKIP][322] ([i915#9906])
   [322]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@kms_vrr@seamless-rr-switch-virtual.html

  * igt@kms_writeback@writeback-check-output:
    - shard-rkl:          NOTRUN -> [SKIP][323] ([i915#2437])
   [323]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-4/igt@kms_writeback@writeback-check-output.html

  * igt@kms_writeback@writeback-check-output-xrgb2101010:
    - shard-glk:          NOTRUN -> [SKIP][324] ([i915#2437])
   [324]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-glk6/igt@kms_writeback@writeback-check-output-xrgb2101010.html

  * igt@kms_writeback@writeback-fb-id-xrgb2101010:
    - shard-dg2:          NOTRUN -> [SKIP][325] ([i915#2437] / [i915#9412])
   [325]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@kms_writeback@writeback-fb-id-xrgb2101010.html

  * igt@kms_writeback@writeback-pixel-formats:
    - shard-tglu:         NOTRUN -> [SKIP][326] ([i915#2437] / [i915#9412])
   [326]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@kms_writeback@writeback-pixel-formats.html
    - shard-rkl:          NOTRUN -> [SKIP][327] ([i915#2437] / [i915#9412])
   [327]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-5/igt@kms_writeback@writeback-pixel-formats.html

  * igt@perf@mi-rpc:
    - shard-rkl:          NOTRUN -> [SKIP][328] ([i915#2434])
   [328]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-4/igt@perf@mi-rpc.html

  * igt@perf@per-context-mode-unprivileged:
    - shard-dg1:          NOTRUN -> [SKIP][329] ([i915#2433])
   [329]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@perf@per-context-mode-unprivileged.html

  * igt@perf@unprivileged-single-ctx-counters:
    - shard-rkl:          NOTRUN -> [SKIP][330] ([i915#2433])
   [330]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-3/igt@perf@unprivileged-single-ctx-counters.html

  * igt@perf_pmu@cpu-hotplug:
    - shard-dg1:          NOTRUN -> [SKIP][331] ([i915#8850])
   [331]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@perf_pmu@cpu-hotplug.html

  * igt@perf_pmu@most-busy-check-all:
    - shard-dg2:          [PASS][332] -> [FAIL][333] ([i915#11943]) +2 other tests fail
   [332]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg2-6/igt@perf_pmu@most-busy-check-all.html
   [333]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-6/igt@perf_pmu@most-busy-check-all.html

  * igt@perf_pmu@rc6-all-gts:
    - shard-tglu:         NOTRUN -> [SKIP][334] ([i915#8516])
   [334]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@perf_pmu@rc6-all-gts.html
    - shard-rkl:          NOTRUN -> [SKIP][335] ([i915#8516])
   [335]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-5/igt@perf_pmu@rc6-all-gts.html

  * igt@perf_pmu@rc6@other-idle-gt0:
    - shard-dg2:          NOTRUN -> [SKIP][336] ([i915#8516])
   [336]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@perf_pmu@rc6@other-idle-gt0.html
    - shard-tglu-1:       NOTRUN -> [SKIP][337] ([i915#8516])
   [337]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@perf_pmu@rc6@other-idle-gt0.html

  * igt@prime_vgem@basic-write:
    - shard-dg2:          NOTRUN -> [SKIP][338] ([i915#3291] / [i915#3708])
   [338]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@prime_vgem@basic-write.html

  * igt@prime_vgem@coherency-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][339] ([i915#3708] / [i915#4077])
   [339]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@prime_vgem@coherency-gtt.html

  * igt@prime_vgem@fence-flip-hang:
    - shard-dg1:          NOTRUN -> [SKIP][340] ([i915#3708]) +1 other test skip
   [340]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@prime_vgem@fence-flip-hang.html

  * igt@sriov_basic@bind-unbind-vf:
    - shard-rkl:          NOTRUN -> [SKIP][341] ([i915#9917]) +1 other test skip
   [341]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-4/igt@sriov_basic@bind-unbind-vf.html

  * igt@sriov_basic@enable-vfs-autoprobe-off@numvfs-all:
    - shard-tglu-1:       NOTRUN -> [FAIL][342] ([i915#12910]) +9 other tests fail
   [342]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@sriov_basic@enable-vfs-autoprobe-off@numvfs-all.html

  * igt@sriov_basic@enable-vfs-autoprobe-on:
    - shard-dg2:          NOTRUN -> [SKIP][343] ([i915#9917])
   [343]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@sriov_basic@enable-vfs-autoprobe-on.html

  * igt@sriov_basic@enable-vfs-bind-unbind-each:
    - shard-dg1:          NOTRUN -> [SKIP][344] ([i915#9917]) +1 other test skip
   [344]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@sriov_basic@enable-vfs-bind-unbind-each.html

  * igt@sriov_basic@enable-vfs-bind-unbind-each@numvfs-4:
    - shard-mtlp:         NOTRUN -> [FAIL][345] ([i915#12910]) +8 other tests fail
   [345]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@sriov_basic@enable-vfs-bind-unbind-each@numvfs-4.html

  
#### Possible fixes ####

  * igt@gem_ctx_isolation@preservation-reset:
    - shard-rkl:          [DMESG-WARN][346] ([i915#12964]) -> [PASS][347] +4 other tests pass
   [346]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-rkl-5/igt@gem_ctx_isolation@preservation-reset.html
   [347]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-7/igt@gem_ctx_isolation@preservation-reset.html

  * igt@gem_eio@in-flight-contexts-immediate:
    - shard-mtlp:         [ABORT][348] -> [PASS][349] +1 other test pass
   [348]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-mtlp-7/igt@gem_eio@in-flight-contexts-immediate.html
   [349]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@gem_eio@in-flight-contexts-immediate.html

  * igt@gem_eio@in-flight-internal-1us:
    - shard-mtlp:         [ABORT][350] ([i915#13193]) -> [PASS][351]
   [350]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-mtlp-4/igt@gem_eio@in-flight-internal-1us.html
   [351]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@gem_eio@in-flight-internal-1us.html

  * igt@gem_tiled_swapping@non-threaded:
    - shard-rkl:          [FAIL][352] ([i915#13557]) -> [PASS][353]
   [352]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-rkl-5/igt@gem_tiled_swapping@non-threaded.html
   [353]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-7/igt@gem_tiled_swapping@non-threaded.html

  * igt@i915_pm_freq_api@freq-suspend@gt0:
    - shard-dg2:          [INCOMPLETE][354] ([i915#12455]) -> [PASS][355] +1 other test pass
   [354]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg2-7/igt@i915_pm_freq_api@freq-suspend@gt0.html
   [355]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-10/igt@i915_pm_freq_api@freq-suspend@gt0.html

  * igt@kms_async_flips@alternate-sync-async-flip-atomic:
    - shard-glk:          [FAIL][356] ([i915#10991] / [i915#13335]) -> [PASS][357]
   [356]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-glk8/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
   [357]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-glk1/igt@kms_async_flips@alternate-sync-async-flip-atomic.html

  * igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-hdmi-a-2:
    - shard-glk:          [FAIL][358] ([i915#13335]) -> [PASS][359]
   [358]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-glk8/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-hdmi-a-2.html
   [359]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-glk1/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-hdmi-a-2.html

  * igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-hdmi-a-2:
    - shard-glk:          [FAIL][360] ([i915#10991]) -> [PASS][361]
   [360]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-glk8/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-hdmi-a-2.html
   [361]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-glk1/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-hdmi-a-2.html

  * igt@kms_cursor_crc@cursor-random-128x42:
    - shard-tglu:         [FAIL][362] ([i915#13566]) -> [PASS][363] +9 other tests pass
   [362]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-tglu-3/igt@kms_cursor_crc@cursor-random-128x42.html
   [363]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-4/igt@kms_cursor_crc@cursor-random-128x42.html
    - shard-rkl:          [FAIL][364] ([i915#13566]) -> [PASS][365]
   [364]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-rkl-1/igt@kms_cursor_crc@cursor-random-128x42.html
   [365]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-7/igt@kms_cursor_crc@cursor-random-128x42.html

  * igt@kms_cursor_legacy@short-flip-before-cursor-atomic-transitions:
    - shard-glk:          [FAIL][366] ([i915#2346]) -> [PASS][367] +1 other test pass
   [366]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-glk8/igt@kms_cursor_legacy@short-flip-before-cursor-atomic-transitions.html
   [367]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-glk1/igt@kms_cursor_legacy@short-flip-before-cursor-atomic-transitions.html

  * igt@kms_flip@flip-vs-expired-vblank:
    - shard-dg2:          [FAIL][368] ([i915#13027]) -> [PASS][369]
   [368]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg2-2/igt@kms_flip@flip-vs-expired-vblank.html
   [369]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-2/igt@kms_flip@flip-vs-expired-vblank.html

  * igt@kms_flip@flip-vs-expired-vblank@b-hdmi-a3:
    - shard-dg2:          [FAIL][370] ([i915#13528]) -> [PASS][371]
   [370]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg2-2/igt@kms_flip@flip-vs-expired-vblank@b-hdmi-a3.html
   [371]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-2/igt@kms_flip@flip-vs-expired-vblank@b-hdmi-a3.html

  * igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw:
    - shard-dg2:          [FAIL][372] ([i915#6880]) -> [PASS][373]
   [372]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw.html
   [373]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-10/igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw.html

  * igt@kms_pm_rpm@modeset-lpsp:
    - shard-dg2:          [SKIP][374] ([i915#9519]) -> [PASS][375] +1 other test pass
   [374]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg2-3/igt@kms_pm_rpm@modeset-lpsp.html
   [375]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-8/igt@kms_pm_rpm@modeset-lpsp.html

  * igt@kms_pm_rpm@modeset-lpsp-stress-no-wait:
    - shard-rkl:          [SKIP][376] ([i915#9519]) -> [PASS][377] +1 other test pass
   [376]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-rkl-5/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html
   [377]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-7/igt@kms_pm_rpm@modeset-lpsp-stress-no-wait.html

  * igt@perf_pmu@most-busy-check-all@vcs0:
    - shard-dg1:          [FAIL][378] ([i915#11943]) -> [PASS][379]
   [378]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg1-17/igt@perf_pmu@most-busy-check-all@vcs0.html
   [379]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-18/igt@perf_pmu@most-busy-check-all@vcs0.html

  
#### Warnings ####

  * igt@gem_mmap_offset@clear-via-pagefault:
    - shard-mtlp:         [ABORT][380] -> [ABORT][381] ([i915#10729]) +1 other test abort
   [380]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-mtlp-1/igt@gem_mmap_offset@clear-via-pagefault.html
   [381]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-5/igt@gem_mmap_offset@clear-via-pagefault.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-dg2:          [DMESG-WARN][382] ([i915#13475]) -> [ABORT][383] ([i915#9820])
   [382]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg2-4/igt@i915_module_load@reload-with-fault-injection.html
   [383]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@i915_module_load@reload-with-fault-injection.html

  * igt@kms_chamelium_frames@hdmi-cmp-planar-formats:
    - shard-dg1:          [SKIP][384] ([i915#11151] / [i915#7828]) -> [SKIP][385] ([i915#11151] / [i915#4423] / [i915#7828])
   [384]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg1-17/igt@kms_chamelium_frames@hdmi-cmp-planar-formats.html
   [385]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@kms_chamelium_frames@hdmi-cmp-planar-formats.html

  * igt@kms_content_protection@atomic-dpms:
    - shard-dg2:          [SKIP][386] ([i915#7118] / [i915#9424]) -> [TIMEOUT][387] ([i915#7173])
   [386]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-dg2-7/igt@kms_content_protection@atomic-dpms.html
   [387]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-10/igt@kms_content_protection@atomic-dpms.html

  * igt@kms_hdr@brightness-with-hdr:
    - shard-mtlp:         [SKIP][388] ([i915#1187] / [i915#12713]) -> [SKIP][389] ([i915#12713])
   [388]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-mtlp-1/igt@kms_hdr@brightness-with-hdr.html
   [389]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-8/igt@kms_hdr@brightness-with-hdr.html
    - shard-rkl:          [SKIP][390] ([i915#1187] / [i915#12713]) -> [SKIP][391] ([i915#12713])
   [390]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_16009/shard-rkl-3/igt@kms_hdr@brightness-with-hdr.html
   [391]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-1/igt@kms_hdr@brightness-with-hdr.html

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

  [IGT#160]: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/160
  [i915#10055]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10055
  [i915#10226]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10226
  [i915#10307]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10307
  [i915#10433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10433
  [i915#10434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10434
  [i915#10656]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10656
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [i915#10729]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10729
  [i915#1099]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1099
  [i915#10991]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10991
  [i915#11078]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11078
  [i915#11151]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11151
  [i915#11441]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11441
  [i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520
  [i915#11614]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11614
  [i915#11627]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11627
  [i915#11681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11681
  [i915#11713]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11713
  [i915#11808]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11808
  [i915#1187]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1187
  [i915#11943]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11943
  [i915#11965]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11965
  [i915#11968]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11968
  [i915#11989]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11989
  [i915#12170]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12170
  [i915#12193]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12193
  [i915#12247]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12247
  [i915#12313]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12313
  [i915#12316]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12316
  [i915#12339]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12339
  [i915#12394]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12394
  [i915#12402]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12402
  [i915#12455]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12455
  [i915#12549]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12549
  [i915#1257]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1257
  [i915#12713]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12713
  [i915#12755]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12755
  [i915#12797]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12797
  [i915#12805]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12805
  [i915#12817]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12817
  [i915#12910]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12910
  [i915#12917]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12917
  [i915#12964]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12964
  [i915#13027]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13027
  [i915#13029]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13029
  [i915#13046]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13046
  [i915#13049]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13049
  [i915#13179]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13179
  [i915#13193]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13193
  [i915#13304]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13304
  [i915#13314]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13314
  [i915#13335]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13335
  [i915#13475]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13475
  [i915#13522]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13522
  [i915#13528]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13528
  [i915#13557]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13557
  [i915#13566]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13566
  [i915#1769]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1769
  [i915#1825]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1825
  [i915#1839]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1839
  [i915#2190]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2190
  [i915#2346]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2346
  [i915#2433]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2433
  [i915#2434]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2434
  [i915#2437]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2437
  [i915#2527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2527
  [i915#2587]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2587
  [i915#2658]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2658
  [i915#2672]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2672
  [i915#280]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/280
  [i915#284]: https://gitlab.freedesktop.org/drm/i915/k

== Logs ==

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

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

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

* Re:[PATCH 2/5] drm/rockchip: stop passing non struct drm_device to drm_err() and friends
  2025-01-23 15:09 ` [PATCH 2/5] drm/rockchip: " Jani Nikula
@ 2025-01-24  9:53   ` Andy Yan
  2025-01-24 11:43     ` Jani Nikula
  2025-02-24 14:47   ` Louis Chauvet
  1 sibling, 1 reply; 35+ messages in thread
From: Andy Yan @ 2025-01-24  9:53 UTC (permalink / raw)
  To: Jani Nikula
  Cc: dri-devel, intel-gfx, Sandy Huang, Heiko Stübner, Andy Yan,
	linux-arm-kernel, linux-rockchip, Cristian Ciocaltea


Hi,

At 2025-01-23 23:09:09, "Jani Nikula" <jani.nikula@intel.com> wrote:
>The expectation is that the struct drm_device based logging helpers get
>passed an actual struct drm_device pointer rather than some random
>struct pointer where you can dereference the ->dev member.
>
>Convert drm_err(hdmi, ...) to dev_err(hdmi->dev, ...). This matches
>current usage, but drops "[drm] *ERROR*" prefix from logging.

Frankly, I prefer the original version of the log.
It is a platform driver, so it should use its own device.
It is a driver that works in drm subsystem, so it's better to use "[drm] *ERROR*" prefix when logging

>
>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
>---
>
>Looks like it's possible to hunt down the struct drm_device in most of
>these cases, if that's desired. This was the simplest change.
>
>Cc: Sandy Huang <hjc@rock-chips.com>
>Cc: "Heiko Stübner" <heiko@sntech.de>
>Cc: Andy Yan <andy.yan@rock-chips.com>
>Cc: dri-devel@lists.freedesktop.org
>Cc: linux-arm-kernel@lists.infradead.org
>Cc: linux-rockchip@lists.infradead.org
>---
> drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c    | 16 ++++++++--------
> drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 16 ++++++++--------
> 2 files changed, 16 insertions(+), 16 deletions(-)
>
>diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>index e7a6669c46b0..f737e7d46e66 100644
>--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>@@ -203,7 +203,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
> 
> 	hdmi->regmap = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
> 	if (IS_ERR(hdmi->regmap)) {
>-		drm_err(hdmi, "Unable to get rockchip,grf\n");
>+		dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
> 		return PTR_ERR(hdmi->regmap);
> 	}
> 
>@@ -214,7 +214,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
> 	if (IS_ERR(hdmi->ref_clk)) {
> 		ret = PTR_ERR(hdmi->ref_clk);
> 		if (ret != -EPROBE_DEFER)
>-			drm_err(hdmi, "failed to get reference clock\n");
>+			dev_err(hdmi->dev, "failed to get reference clock\n");
> 		return ret;
> 	}
> 
>@@ -222,7 +222,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
> 	if (IS_ERR(hdmi->grf_clk)) {
> 		ret = PTR_ERR(hdmi->grf_clk);
> 		if (ret != -EPROBE_DEFER)
>-			drm_err(hdmi, "failed to get grf clock\n");
>+			dev_err(hdmi->dev, "failed to get grf clock\n");
> 		return ret;
> 	}
> 
>@@ -302,16 +302,16 @@ static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder)
> 
> 	ret = clk_prepare_enable(hdmi->grf_clk);
> 	if (ret < 0) {
>-		drm_err(hdmi, "failed to enable grfclk %d\n", ret);
>+		dev_err(hdmi->dev, "failed to enable grfclk %d\n", ret);
> 		return;
> 	}
> 
> 	ret = regmap_write(hdmi->regmap, hdmi->chip_data->lcdsel_grf_reg, val);
> 	if (ret != 0)
>-		drm_err(hdmi, "Could not write to GRF: %d\n", ret);
>+		dev_err(hdmi->dev, "Could not write to GRF: %d\n", ret);
> 
> 	clk_disable_unprepare(hdmi->grf_clk);
>-	drm_dbg(hdmi, "vop %s output to hdmi\n", ret ? "LIT" : "BIG");
>+	dev_dbg(hdmi->dev, "vop %s output to hdmi\n", ret ? "LIT" : "BIG");
> }
> 
> static int
>@@ -574,7 +574,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
> 	ret = rockchip_hdmi_parse_dt(hdmi);
> 	if (ret) {
> 		if (ret != -EPROBE_DEFER)
>-			drm_err(hdmi, "Unable to parse OF data\n");
>+			dev_err(hdmi->dev, "Unable to parse OF data\n");
> 		return ret;
> 	}
> 
>@@ -582,7 +582,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
> 	if (IS_ERR(hdmi->phy)) {
> 		ret = PTR_ERR(hdmi->phy);
> 		if (ret != -EPROBE_DEFER)
>-			drm_err(hdmi, "failed to get phy\n");
>+			dev_err(hdmi->dev, "failed to get phy\n");
> 		return ret;
> 	}
> 
>diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>index f41151d49fca..3d1dddb34603 100644
>--- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>+++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>@@ -242,7 +242,7 @@ static void dw_hdmi_qp_rk3588_hpd_work(struct work_struct *work)
> 	if (drm) {
> 		changed = drm_helper_hpd_irq_event(drm);
> 		if (changed)
>-			drm_dbg(hdmi, "connector status changed\n");
>+			dev_dbg(hdmi->dev, "connector status changed\n");
> 	}
> }
> 
>@@ -472,7 +472,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
> 		}
> 	}
> 	if (hdmi->port_id < 0) {
>-		drm_err(hdmi, "Failed to match HDMI port ID\n");
>+		dev_err(hdmi->dev, "Failed to match HDMI port ID\n");
> 		return hdmi->port_id;
> 	}
> 
>@@ -496,20 +496,20 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
> 	hdmi->regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
> 						       "rockchip,grf");
> 	if (IS_ERR(hdmi->regmap)) {
>-		drm_err(hdmi, "Unable to get rockchip,grf\n");
>+		dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
> 		return PTR_ERR(hdmi->regmap);
> 	}
> 
> 	hdmi->vo_regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
> 							  "rockchip,vo-grf");
> 	if (IS_ERR(hdmi->vo_regmap)) {
>-		drm_err(hdmi, "Unable to get rockchip,vo-grf\n");
>+		dev_err(hdmi->dev, "Unable to get rockchip,vo-grf\n");
> 		return PTR_ERR(hdmi->vo_regmap);
> 	}
> 
> 	ret = devm_clk_bulk_get_all_enabled(hdmi->dev, &clks);
> 	if (ret < 0) {
>-		drm_err(hdmi, "Failed to get clocks: %d\n", ret);
>+		dev_err(hdmi->dev, "Failed to get clocks: %d\n", ret);
> 		return ret;
> 	}
> 
>@@ -517,7 +517,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
> 						    GPIOD_OUT_HIGH);
> 	if (IS_ERR(hdmi->enable_gpio)) {
> 		ret = PTR_ERR(hdmi->enable_gpio);
>-		drm_err(hdmi, "Failed to request enable GPIO: %d\n", ret);
>+		dev_err(hdmi->dev, "Failed to request enable GPIO: %d\n", ret);
> 		return ret;
> 	}
> 
>@@ -525,7 +525,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
> 	if (IS_ERR(hdmi->phy)) {
> 		ret = PTR_ERR(hdmi->phy);
> 		if (ret != -EPROBE_DEFER)
>-			drm_err(hdmi, "failed to get phy: %d\n", ret);
>+			dev_err(hdmi->dev, "failed to get phy: %d\n", ret);
> 		return ret;
> 	}
> 
>@@ -564,7 +564,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
> 	connector = drm_bridge_connector_init(drm, encoder);
> 	if (IS_ERR(connector)) {
> 		ret = PTR_ERR(connector);
>-		drm_err(hdmi, "failed to init bridge connector: %d\n", ret);
>+		dev_err(hdmi->dev, "failed to init bridge connector: %d\n", ret);
> 		return ret;
> 	}
> 
>-- 
>2.39.5
>
>
>_______________________________________________
>Linux-rockchip mailing list
>Linux-rockchip@lists.infradead.org
>http://lists.infradead.org/mailman/listinfo/linux-rockchip

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

* Re:[PATCH 2/5] drm/rockchip: stop passing non struct drm_device to drm_err() and friends
  2025-01-24  9:53   ` Andy Yan
@ 2025-01-24 11:43     ` Jani Nikula
  2025-01-25  3:53       ` Andy Yan
  0 siblings, 1 reply; 35+ messages in thread
From: Jani Nikula @ 2025-01-24 11:43 UTC (permalink / raw)
  To: Andy Yan
  Cc: dri-devel, intel-gfx, Sandy Huang, Heiko Stübner, Andy Yan,
	linux-arm-kernel, linux-rockchip, Cristian Ciocaltea

On Fri, 24 Jan 2025, "Andy Yan" <andyshrk@163.com> wrote:
> Hi,
>
> At 2025-01-23 23:09:09, "Jani Nikula" <jani.nikula@intel.com> wrote:
>>The expectation is that the struct drm_device based logging helpers get
>>passed an actual struct drm_device pointer rather than some random
>>struct pointer where you can dereference the ->dev member.
>>
>>Convert drm_err(hdmi, ...) to dev_err(hdmi->dev, ...). This matches
>>current usage, but drops "[drm] *ERROR*" prefix from logging.
>
> Frankly, I prefer the original version of the log.
> It is a platform driver, so it should use its own device.
> It is a driver that works in drm subsystem, so it's better to use "[drm] *ERROR*" prefix when logging

If you need to do struct device based logging that is not the same
device as the struct drm_device dev member, you need to use dev_err()
and friends. You can't and must not use drm_err() and friends.

It's as simple as that.

The current drm_err(hdmi, ...) usage is simply abuse of the macros, and
must stop.


BR,
Jani.


>
>>
>>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>
>>---
>>
>>Looks like it's possible to hunt down the struct drm_device in most of
>>these cases, if that's desired. This was the simplest change.
>>
>>Cc: Sandy Huang <hjc@rock-chips.com>
>>Cc: "Heiko Stübner" <heiko@sntech.de>
>>Cc: Andy Yan <andy.yan@rock-chips.com>
>>Cc: dri-devel@lists.freedesktop.org
>>Cc: linux-arm-kernel@lists.infradead.org
>>Cc: linux-rockchip@lists.infradead.org
>>---
>> drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c    | 16 ++++++++--------
>> drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 16 ++++++++--------
>> 2 files changed, 16 insertions(+), 16 deletions(-)
>>
>>diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>>index e7a6669c46b0..f737e7d46e66 100644
>>--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>>+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>>@@ -203,7 +203,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>> 
>> 	hdmi->regmap = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
>> 	if (IS_ERR(hdmi->regmap)) {
>>-		drm_err(hdmi, "Unable to get rockchip,grf\n");
>>+		dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
>> 		return PTR_ERR(hdmi->regmap);
>> 	}
>> 
>>@@ -214,7 +214,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>> 	if (IS_ERR(hdmi->ref_clk)) {
>> 		ret = PTR_ERR(hdmi->ref_clk);
>> 		if (ret != -EPROBE_DEFER)
>>-			drm_err(hdmi, "failed to get reference clock\n");
>>+			dev_err(hdmi->dev, "failed to get reference clock\n");
>> 		return ret;
>> 	}
>> 
>>@@ -222,7 +222,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>> 	if (IS_ERR(hdmi->grf_clk)) {
>> 		ret = PTR_ERR(hdmi->grf_clk);
>> 		if (ret != -EPROBE_DEFER)
>>-			drm_err(hdmi, "failed to get grf clock\n");
>>+			dev_err(hdmi->dev, "failed to get grf clock\n");
>> 		return ret;
>> 	}
>> 
>>@@ -302,16 +302,16 @@ static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder)
>> 
>> 	ret = clk_prepare_enable(hdmi->grf_clk);
>> 	if (ret < 0) {
>>-		drm_err(hdmi, "failed to enable grfclk %d\n", ret);
>>+		dev_err(hdmi->dev, "failed to enable grfclk %d\n", ret);
>> 		return;
>> 	}
>> 
>> 	ret = regmap_write(hdmi->regmap, hdmi->chip_data->lcdsel_grf_reg, val);
>> 	if (ret != 0)
>>-		drm_err(hdmi, "Could not write to GRF: %d\n", ret);
>>+		dev_err(hdmi->dev, "Could not write to GRF: %d\n", ret);
>> 
>> 	clk_disable_unprepare(hdmi->grf_clk);
>>-	drm_dbg(hdmi, "vop %s output to hdmi\n", ret ? "LIT" : "BIG");
>>+	dev_dbg(hdmi->dev, "vop %s output to hdmi\n", ret ? "LIT" : "BIG");
>> }
>> 
>> static int
>>@@ -574,7 +574,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
>> 	ret = rockchip_hdmi_parse_dt(hdmi);
>> 	if (ret) {
>> 		if (ret != -EPROBE_DEFER)
>>-			drm_err(hdmi, "Unable to parse OF data\n");
>>+			dev_err(hdmi->dev, "Unable to parse OF data\n");
>> 		return ret;
>> 	}
>> 
>>@@ -582,7 +582,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
>> 	if (IS_ERR(hdmi->phy)) {
>> 		ret = PTR_ERR(hdmi->phy);
>> 		if (ret != -EPROBE_DEFER)
>>-			drm_err(hdmi, "failed to get phy\n");
>>+			dev_err(hdmi->dev, "failed to get phy\n");
>> 		return ret;
>> 	}
>> 
>>diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>index f41151d49fca..3d1dddb34603 100644
>>--- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>+++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>@@ -242,7 +242,7 @@ static void dw_hdmi_qp_rk3588_hpd_work(struct work_struct *work)
>> 	if (drm) {
>> 		changed = drm_helper_hpd_irq_event(drm);
>> 		if (changed)
>>-			drm_dbg(hdmi, "connector status changed\n");
>>+			dev_dbg(hdmi->dev, "connector status changed\n");
>> 	}
>> }
>> 
>>@@ -472,7 +472,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>> 		}
>> 	}
>> 	if (hdmi->port_id < 0) {
>>-		drm_err(hdmi, "Failed to match HDMI port ID\n");
>>+		dev_err(hdmi->dev, "Failed to match HDMI port ID\n");
>> 		return hdmi->port_id;
>> 	}
>> 
>>@@ -496,20 +496,20 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>> 	hdmi->regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
>> 						       "rockchip,grf");
>> 	if (IS_ERR(hdmi->regmap)) {
>>-		drm_err(hdmi, "Unable to get rockchip,grf\n");
>>+		dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
>> 		return PTR_ERR(hdmi->regmap);
>> 	}
>> 
>> 	hdmi->vo_regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
>> 							  "rockchip,vo-grf");
>> 	if (IS_ERR(hdmi->vo_regmap)) {
>>-		drm_err(hdmi, "Unable to get rockchip,vo-grf\n");
>>+		dev_err(hdmi->dev, "Unable to get rockchip,vo-grf\n");
>> 		return PTR_ERR(hdmi->vo_regmap);
>> 	}
>> 
>> 	ret = devm_clk_bulk_get_all_enabled(hdmi->dev, &clks);
>> 	if (ret < 0) {
>>-		drm_err(hdmi, "Failed to get clocks: %d\n", ret);
>>+		dev_err(hdmi->dev, "Failed to get clocks: %d\n", ret);
>> 		return ret;
>> 	}
>> 
>>@@ -517,7 +517,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>> 						    GPIOD_OUT_HIGH);
>> 	if (IS_ERR(hdmi->enable_gpio)) {
>> 		ret = PTR_ERR(hdmi->enable_gpio);
>>-		drm_err(hdmi, "Failed to request enable GPIO: %d\n", ret);
>>+		dev_err(hdmi->dev, "Failed to request enable GPIO: %d\n", ret);
>> 		return ret;
>> 	}
>> 
>>@@ -525,7 +525,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>> 	if (IS_ERR(hdmi->phy)) {
>> 		ret = PTR_ERR(hdmi->phy);
>> 		if (ret != -EPROBE_DEFER)
>>-			drm_err(hdmi, "failed to get phy: %d\n", ret);
>>+			dev_err(hdmi->dev, "failed to get phy: %d\n", ret);
>> 		return ret;
>> 	}
>> 
>>@@ -564,7 +564,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>> 	connector = drm_bridge_connector_init(drm, encoder);
>> 	if (IS_ERR(connector)) {
>> 		ret = PTR_ERR(connector);
>>-		drm_err(hdmi, "failed to init bridge connector: %d\n", ret);
>>+		dev_err(hdmi->dev, "failed to init bridge connector: %d\n", ret);
>> 		return ret;
>> 	}
>> 
>>-- 
>>2.39.5
>>
>>
>>_______________________________________________
>>Linux-rockchip mailing list
>>Linux-rockchip@lists.infradead.org
>>http://lists.infradead.org/mailman/listinfo/linux-rockchip

-- 
Jani Nikula, Intel

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

* Re: [PATCH 3/5] drm/sched: stop passing non struct drm_device to drm_err() and friends
  2025-01-23 19:54   ` Simona Vetter
@ 2025-01-24 11:46     ` Jani Nikula
  2025-01-27 10:11       ` Philipp Stanner
  2025-02-24 15:29       ` Tvrtko Ursulin
  0 siblings, 2 replies; 35+ messages in thread
From: Jani Nikula @ 2025-01-24 11:46 UTC (permalink / raw)
  To: Simona Vetter
  Cc: dri-devel, intel-gfx, Matthew Brost, Danilo Krummrich,
	Philipp Stanner, Christian König

On Thu, 23 Jan 2025, Simona Vetter <simona.vetter@ffwll.ch> wrote:
> On Thu, Jan 23, 2025 at 05:09:10PM +0200, Jani Nikula wrote:
>> The expectation is that the struct drm_device based logging helpers get
>> passed an actual struct drm_device pointer rather than some random
>> struct pointer where you can dereference the ->dev member.
>> 
>> Convert drm_err(sched, ...) to dev_err(sched->dev, ...) and
>> similar. This matches current usage, as struct drm_device is not
>> available, but drops "[drm]" or "[drm] *ERROR*" prefix from logging.
>> 
>> Unfortunately, there's no dev_WARN_ON(), so the conversion is not
>> exactly the same.
>> 
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
> For the two previous patches just dev_ makes sense since they're just
> platform drivers, but for drm/sched I wonder whether it wouldn't be better
> to switch from struct device * to struct drm_device * instead. I guess
> might be best to leave that decision to scheduler folks.

I had a very brief look, and it seemed like struct drm_device isn't
passed around in sched. If use of struct drm_device is preferred, I'm
not the best person to figure out how to do that. But the abuse of the
drm_err() and friends macros needs to stop.

> Anyway on the series and with that caveat:
>
> Reviewed-by: Simona Vetter <simona.vetter@ffwll.ch>

Thanks,
Jani.

>
>
>> 
>> ---
>> 
>> Cc: Matthew Brost <matthew.brost@intel.com>
>> Cc: Danilo Krummrich <dakr@kernel.org>
>> Cc: Philipp Stanner <phasta@kernel.org>
>> Cc: "Christian König" <ckoenig.leichtzumerken@gmail.com>
>> Cc: dri-devel@lists.freedesktop.org
>> ---
>>  drivers/gpu/drm/scheduler/sched_entity.c |  2 +-
>>  drivers/gpu/drm/scheduler/sched_main.c   | 20 +++++++++++---------
>>  2 files changed, 12 insertions(+), 10 deletions(-)
>> 
>> diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c
>> index 69bcf0e99d57..e29af71d4b5c 100644
>> --- a/drivers/gpu/drm/scheduler/sched_entity.c
>> +++ b/drivers/gpu/drm/scheduler/sched_entity.c
>> @@ -92,7 +92,7 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
>>  		 * the lowest priority available.
>>  		 */
>>  		if (entity->priority >= sched_list[0]->num_rqs) {
>> -			drm_err(sched_list[0], "entity with out-of-bounds priority:%u num_rqs:%u\n",
>> +			dev_err(sched_list[0]->dev, "entity with out-of-bounds priority:%u num_rqs:%u\n",
>>  				entity->priority, sched_list[0]->num_rqs);
>>  			entity->priority = max_t(s32, (s32) sched_list[0]->num_rqs - 1,
>>  						 (s32) DRM_SCHED_PRIORITY_KERNEL);
>> diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
>> index a48be16ab84f..d1c1f22fd1db 100644
>> --- a/drivers/gpu/drm/scheduler/sched_main.c
>> +++ b/drivers/gpu/drm/scheduler/sched_main.c
>> @@ -103,9 +103,9 @@ static u32 drm_sched_available_credits(struct drm_gpu_scheduler *sched)
>>  {
>>  	u32 credits;
>>  
>> -	drm_WARN_ON(sched, check_sub_overflow(sched->credit_limit,
>> -					      atomic_read(&sched->credit_count),
>> -					      &credits));
>> +	WARN_ON(check_sub_overflow(sched->credit_limit,
>> +				   atomic_read(&sched->credit_count),
>> +				   &credits));
>>  
>>  	return credits;
>>  }
>> @@ -130,9 +130,11 @@ static bool drm_sched_can_queue(struct drm_gpu_scheduler *sched,
>>  	/* If a job exceeds the credit limit, truncate it to the credit limit
>>  	 * itself to guarantee forward progress.
>>  	 */
>> -	if (drm_WARN(sched, s_job->credits > sched->credit_limit,
>> -		     "Jobs may not exceed the credit limit, truncate.\n"))
>> +	if (s_job->credits > sched->credit_limit) {
>> +		dev_WARN(sched->dev,
>> +			 "Jobs may not exceed the credit limit, truncate.\n");
>>  		s_job->credits = sched->credit_limit;
>> +	}
>>  
>>  	return drm_sched_available_credits(sched) >= s_job->credits;
>>  }
>> @@ -790,7 +792,7 @@ int drm_sched_job_init(struct drm_sched_job *job,
>>  		 * or worse--a blank screen--leave a trail in the
>>  		 * logs, so this can be debugged easier.
>>  		 */
>> -		drm_err(job->sched, "%s: entity has no rq!\n", __func__);
>> +		dev_err(job->sched->dev, "%s: entity has no rq!\n", __func__);
>>  		return -ENOENT;
>>  	}
>>  
>> @@ -1280,7 +1282,7 @@ int drm_sched_init(struct drm_gpu_scheduler *sched,
>>  	if (num_rqs > DRM_SCHED_PRIORITY_COUNT) {
>>  		/* This is a gross violation--tell drivers what the  problem is.
>>  		 */
>> -		drm_err(sched, "%s: num_rqs cannot be greater than DRM_SCHED_PRIORITY_COUNT\n",
>> +		dev_err(sched->dev, "%s: num_rqs cannot be greater than DRM_SCHED_PRIORITY_COUNT\n",
>>  			__func__);
>>  		return -EINVAL;
>>  	} else if (sched->sched_rq) {
>> @@ -1288,7 +1290,7 @@ int drm_sched_init(struct drm_gpu_scheduler *sched,
>>  		 * fine-tune their DRM calling order, and return all
>>  		 * is good.
>>  		 */
>> -		drm_warn(sched, "%s: scheduler already initialized!\n", __func__);
>> +		dev_warn(sched->dev, "%s: scheduler already initialized!\n", __func__);
>>  		return 0;
>>  	}
>>  
>> @@ -1343,7 +1345,7 @@ int drm_sched_init(struct drm_gpu_scheduler *sched,
>>  Out_check_own:
>>  	if (sched->own_submit_wq)
>>  		destroy_workqueue(sched->submit_wq);
>> -	drm_err(sched, "%s: Failed to setup GPU scheduler--out of memory\n", __func__);
>> +	dev_err(sched->dev, "%s: Failed to setup GPU scheduler--out of memory\n", __func__);
>>  	return -ENOMEM;
>>  }
>>  EXPORT_SYMBOL(drm_sched_init);
>> -- 
>> 2.39.5
>> 

-- 
Jani Nikula, Intel

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

* Re: [PATCH 4/5] drm/print: Include drm_device.h
  2025-01-23 16:14     ` Gustavo Sousa
@ 2025-01-24 11:50       ` Jani Nikula
  2025-01-24 12:21         ` Gustavo Sousa
  0 siblings, 1 reply; 35+ messages in thread
From: Jani Nikula @ 2025-01-24 11:50 UTC (permalink / raw)
  To: Gustavo Sousa, dri-devel; +Cc: intel-gfx

On Thu, 23 Jan 2025, Gustavo Sousa <gustavo.sousa@intel.com> wrote:
> Quoting Jani Nikula (2025-01-23 12:14:31-03:00)
>>On Thu, 23 Jan 2025, Jani Nikula <jani.nikula@intel.com> wrote:
>>> From: Gustavo Sousa <gustavo.sousa@intel.com>
>>>
>>> The header drm_print.h uses members of struct drm_device pointers, as
>>> such, it should include drm_device.h to let the compiler know the full
>>> type definition.
>>>
>>> Without such include, users of drm_print.h that don't explicitly need
>>> drm_device.h would bump into build errors and be forced to include the
>>> latter.
>>>
>>> Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
>>> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
>>
>>This posting should have had
>>
>>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>
>>but obviously not needed if the original [1] is merged instead.
>>
>>
>>[1] https://lore.kernel.org/r/20250121210935.84357-1-gustavo.sousa@intel.com
>
> Hm. Since that's in the upper drm layer, I thought I was not supposed to
> merge it myself.
>
> Am I? In that case, is it okay to merge it via drm-intel-next?

It's generally not okay to merge non-i915 stuff via drm-intel-next,
because only i915 is under our maintenance. We'd need rationale and acks
for that, which we occasionally do, but there's no reason here.

But you can apply for drm-misc commit rights, similar to drm-intel, and
apply the patches to drm-misc-next yourself. See the maintainer tools
documentation.


BR,
Jani.


>
> --
> Gustavo Sousa
>
>>
>>>
>>> ---
>>>
>>> Including here as a dependency. May be merged independently.
>>> ---
>>>  include/drm/drm_print.h | 1 +
>>>  1 file changed, 1 insertion(+)
>>>
>>> diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h
>>> index f77fe1531cf8..9732f514566d 100644
>>> --- a/include/drm/drm_print.h
>>> +++ b/include/drm/drm_print.h
>>> @@ -32,6 +32,7 @@
>>>  #include <linux/dynamic_debug.h>
>>>  
>>>  #include <drm/drm.h>
>>> +#include <drm/drm_device.h>
>>>  
>>>  struct debugfs_regset32;
>>>  struct drm_device;
>>
>>-- 
>>Jani Nikula, Intel

-- 
Jani Nikula, Intel

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

* Re: [PATCH 4/5] drm/print: Include drm_device.h
  2025-01-24 11:50       ` Jani Nikula
@ 2025-01-24 12:21         ` Gustavo Sousa
  2025-01-24 12:55           ` Simona Vetter
  0 siblings, 1 reply; 35+ messages in thread
From: Gustavo Sousa @ 2025-01-24 12:21 UTC (permalink / raw)
  To: Jani Nikula, dri-devel; +Cc: intel-gfx

Quoting Jani Nikula (2025-01-24 08:50:14-03:00)
>On Thu, 23 Jan 2025, Gustavo Sousa <gustavo.sousa@intel.com> wrote:
>> Quoting Jani Nikula (2025-01-23 12:14:31-03:00)
>>>On Thu, 23 Jan 2025, Jani Nikula <jani.nikula@intel.com> wrote:
>>>> From: Gustavo Sousa <gustavo.sousa@intel.com>
>>>>
>>>> The header drm_print.h uses members of struct drm_device pointers, as
>>>> such, it should include drm_device.h to let the compiler know the full
>>>> type definition.
>>>>
>>>> Without such include, users of drm_print.h that don't explicitly need
>>>> drm_device.h would bump into build errors and be forced to include the
>>>> latter.
>>>>
>>>> Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
>>>> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
>>>
>>>This posting should have had
>>>
>>>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>>
>>>but obviously not needed if the original [1] is merged instead.
>>>
>>>
>>>[1] https://lore.kernel.org/r/20250121210935.84357-1-gustavo.sousa@intel.com
>>
>> Hm. Since that's in the upper drm layer, I thought I was not supposed to
>> merge it myself.
>>
>> Am I? In that case, is it okay to merge it via drm-intel-next?
>
>It's generally not okay to merge non-i915 stuff via drm-intel-next,
>because only i915 is under our maintenance. We'd need rationale and acks
>for that, which we occasionally do, but there's no reason here.
>
>But you can apply for drm-misc commit rights, similar to drm-intel, and
>apply the patches to drm-misc-next yourself. See the maintainer tools
>documentation.

The first bullet point in the list of criteria for drm-misc[2] says:

  "Submitted a few (5-10 as a rule of thumb) non-trivial (not just
  simple spelling fixes and whitespace adjustment) patches that have
  been merged already."

I believe those patches should be targeted at drm-misc, right? (meaning
not stuff that have their own tree (e.g. drm-xe drm-intel)).

If that's the case, since this is my first patch targeting core drm, I
believe I would not fit into the criteria right now.

Decided to ask here just to make sure I don't raise a request in vain.

[2] https://drm.pages.freedesktop.org/maintainer-tools/committer/commit-access.html#drm-misc

--
Gustavo Sousa

>
>
>BR,
>Jani.
>
>
>>
>> --
>> Gustavo Sousa
>>
>>>
>>>>
>>>> ---
>>>>
>>>> Including here as a dependency. May be merged independently.
>>>> ---
>>>>  include/drm/drm_print.h | 1 +
>>>>  1 file changed, 1 insertion(+)
>>>>
>>>> diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h
>>>> index f77fe1531cf8..9732f514566d 100644
>>>> --- a/include/drm/drm_print.h
>>>> +++ b/include/drm/drm_print.h
>>>> @@ -32,6 +32,7 @@
>>>>  #include <linux/dynamic_debug.h>
>>>>  
>>>>  #include <drm/drm.h>
>>>> +#include <drm/drm_device.h>
>>>>  
>>>>  struct debugfs_regset32;
>>>>  struct drm_device;
>>>
>>>-- 
>>>Jani Nikula, Intel
>
>-- 
>Jani Nikula, Intel

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

* Re: [PATCH 4/5] drm/print: Include drm_device.h
  2025-01-24 12:21         ` Gustavo Sousa
@ 2025-01-24 12:55           ` Simona Vetter
  0 siblings, 0 replies; 35+ messages in thread
From: Simona Vetter @ 2025-01-24 12:55 UTC (permalink / raw)
  To: Gustavo Sousa; +Cc: Jani Nikula, dri-devel, intel-gfx

On Fri, Jan 24, 2025 at 09:21:25AM -0300, Gustavo Sousa wrote:
> Quoting Jani Nikula (2025-01-24 08:50:14-03:00)
> >On Thu, 23 Jan 2025, Gustavo Sousa <gustavo.sousa@intel.com> wrote:
> >> Quoting Jani Nikula (2025-01-23 12:14:31-03:00)
> >>>On Thu, 23 Jan 2025, Jani Nikula <jani.nikula@intel.com> wrote:
> >>>> From: Gustavo Sousa <gustavo.sousa@intel.com>
> >>>>
> >>>> The header drm_print.h uses members of struct drm_device pointers, as
> >>>> such, it should include drm_device.h to let the compiler know the full
> >>>> type definition.
> >>>>
> >>>> Without such include, users of drm_print.h that don't explicitly need
> >>>> drm_device.h would bump into build errors and be forced to include the
> >>>> latter.
> >>>>
> >>>> Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
> >>>> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
> >>>
> >>>This posting should have had
> >>>
> >>>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> >>>
> >>>but obviously not needed if the original [1] is merged instead.
> >>>
> >>>
> >>>[1] https://lore.kernel.org/r/20250121210935.84357-1-gustavo.sousa@intel.com
> >>
> >> Hm. Since that's in the upper drm layer, I thought I was not supposed to
> >> merge it myself.
> >>
> >> Am I? In that case, is it okay to merge it via drm-intel-next?
> >
> >It's generally not okay to merge non-i915 stuff via drm-intel-next,
> >because only i915 is under our maintenance. We'd need rationale and acks
> >for that, which we occasionally do, but there's no reason here.
> >
> >But you can apply for drm-misc commit rights, similar to drm-intel, and
> >apply the patches to drm-misc-next yourself. See the maintainer tools
> >documentation.
> 
> The first bullet point in the list of criteria for drm-misc[2] says:
> 
>   "Submitted a few (5-10 as a rule of thumb) non-trivial (not just
>   simple spelling fixes and whitespace adjustment) patches that have
>   been merged already."
> 
> I believe those patches should be targeted at drm-misc, right? (meaning
> not stuff that have their own tree (e.g. drm-xe drm-intel)).
> 
> If that's the case, since this is my first patch targeting core drm, I
> believe I would not fit into the criteria right now.

So we're generally flexible about where the patches landed, but there's
also the requirement that you plan to regularly push more patches to
drm-misc. And that's probably not so much the case here.

There should be enough drm-misc committers in the intel team to do the
occasional push to drm-misc for you.
-Sima

> Decided to ask here just to make sure I don't raise a request in vain.
> 
> [2] https://drm.pages.freedesktop.org/maintainer-tools/committer/commit-access.html#drm-misc
> 
> --
> Gustavo Sousa
> 
> >
> >
> >BR,
> >Jani.
> >
> >
> >>
> >> --
> >> Gustavo Sousa
> >>
> >>>
> >>>>
> >>>> ---
> >>>>
> >>>> Including here as a dependency. May be merged independently.
> >>>> ---
> >>>>  include/drm/drm_print.h | 1 +
> >>>>  1 file changed, 1 insertion(+)
> >>>>
> >>>> diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h
> >>>> index f77fe1531cf8..9732f514566d 100644
> >>>> --- a/include/drm/drm_print.h
> >>>> +++ b/include/drm/drm_print.h
> >>>> @@ -32,6 +32,7 @@
> >>>>  #include <linux/dynamic_debug.h>
> >>>>  
> >>>>  #include <drm/drm.h>
> >>>> +#include <drm/drm_device.h>
> >>>>  
> >>>>  struct debugfs_regset32;
> >>>>  struct drm_device;
> >>>
> >>>-- 
> >>>Jani Nikula, Intel
> >
> >-- 
> >Jani Nikula, Intel

-- 
Simona Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

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

* Re:Re:[PATCH 2/5] drm/rockchip: stop passing non struct drm_device to drm_err() and friends
  2025-01-24 11:43     ` Jani Nikula
@ 2025-01-25  3:53       ` Andy Yan
  2025-02-25 19:34         ` Jani Nikula
  2025-02-26  8:33         ` [PATCH " Thomas Zimmermann
  0 siblings, 2 replies; 35+ messages in thread
From: Andy Yan @ 2025-01-25  3:53 UTC (permalink / raw)
  To: Jani Nikula
  Cc: dri-devel, intel-gfx, Sandy Huang, Heiko Stübner, Andy Yan,
	linux-arm-kernel, linux-rockchip, sam, Cristian Ciocaltea



在 2025-01-24 19:43:07,"Jani Nikula" <jani.nikula@intel.com> 写道:
>On Fri, 24 Jan 2025, "Andy Yan" <andyshrk@163.com> wrote:
>> Hi,
>>
>> At 2025-01-23 23:09:09, "Jani Nikula" <jani.nikula@intel.com> wrote:
>>>The expectation is that the struct drm_device based logging helpers get
>>>passed an actual struct drm_device pointer rather than some random
>>>struct pointer where you can dereference the ->dev member.
>>>
>>>Convert drm_err(hdmi, ...) to dev_err(hdmi->dev, ...). This matches
>>>current usage, but drops "[drm] *ERROR*" prefix from logging.
>>
>> Frankly, I prefer the original version of the log.
>> It is a platform driver, so it should use its own device.
>> It is a driver that works in drm subsystem, so it's better to use "[drm] *ERROR*" prefix when logging
>
>If you need to do struct device based logging that is not the same
>device as the struct drm_device dev member, you need to use dev_err()
>and friends. You can't and must not use drm_err() and friends.
>
>It's as simple as that.
>
>The current drm_err(hdmi, ...) usage is simply abuse of the macros, and
>must stop.

Perhaps when you initially designed this macros, you intended it to accept only drm_device, 
but your code implementation didn't enforce this restriction at the beginning.
If that's truly what you intended, I suggest just reverting this commit that converting to use these macros[0], 
as neither drm_err nor dev_err can maintain consistency with the original log of this driver.
Alternatively, as suggested by Sam  in the initial submission of your patch 5 years ago, 
there should also be a macro similar to drm_dev_info(device *, ..).[1]


[0]https://lore.kernel.org/linux-rockchip/20240813-dw-hdmi-rockchip-cleanup-v1-1-b3e73b5f4fd6@collabora.com/
[1]https://lore.kernel.org/dri-devel/20191212215303.GA11520@ravnborg.org/

>
>
>BR,
>Jani.
>
>
>>
>>>
>>>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>>
>>>---
>>>
>>>Looks like it's possible to hunt down the struct drm_device in most of
>>>these cases, if that's desired. This was the simplest change.
>>>
>>>Cc: Sandy Huang <hjc@rock-chips.com>
>>>Cc: "Heiko Stübner" <heiko@sntech.de>
>>>Cc: Andy Yan <andy.yan@rock-chips.com>
>>>Cc: dri-devel@lists.freedesktop.org
>>>Cc: linux-arm-kernel@lists.infradead.org
>>>Cc: linux-rockchip@lists.infradead.org
>>>---
>>> drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c    | 16 ++++++++--------
>>> drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 16 ++++++++--------
>>> 2 files changed, 16 insertions(+), 16 deletions(-)
>>>
>>>diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>>>index e7a6669c46b0..f737e7d46e66 100644
>>>--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>>>+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>>>@@ -203,7 +203,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>>> 
>>> 	hdmi->regmap = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
>>> 	if (IS_ERR(hdmi->regmap)) {
>>>-		drm_err(hdmi, "Unable to get rockchip,grf\n");
>>>+		dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
>>> 		return PTR_ERR(hdmi->regmap);
>>> 	}
>>> 
>>>@@ -214,7 +214,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>>> 	if (IS_ERR(hdmi->ref_clk)) {
>>> 		ret = PTR_ERR(hdmi->ref_clk);
>>> 		if (ret != -EPROBE_DEFER)
>>>-			drm_err(hdmi, "failed to get reference clock\n");
>>>+			dev_err(hdmi->dev, "failed to get reference clock\n");
>>> 		return ret;
>>> 	}
>>> 
>>>@@ -222,7 +222,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>>> 	if (IS_ERR(hdmi->grf_clk)) {
>>> 		ret = PTR_ERR(hdmi->grf_clk);
>>> 		if (ret != -EPROBE_DEFER)
>>>-			drm_err(hdmi, "failed to get grf clock\n");
>>>+			dev_err(hdmi->dev, "failed to get grf clock\n");
>>> 		return ret;
>>> 	}
>>> 
>>>@@ -302,16 +302,16 @@ static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder)
>>> 
>>> 	ret = clk_prepare_enable(hdmi->grf_clk);
>>> 	if (ret < 0) {
>>>-		drm_err(hdmi, "failed to enable grfclk %d\n", ret);
>>>+		dev_err(hdmi->dev, "failed to enable grfclk %d\n", ret);
>>> 		return;
>>> 	}
>>> 
>>> 	ret = regmap_write(hdmi->regmap, hdmi->chip_data->lcdsel_grf_reg, val);
>>> 	if (ret != 0)
>>>-		drm_err(hdmi, "Could not write to GRF: %d\n", ret);
>>>+		dev_err(hdmi->dev, "Could not write to GRF: %d\n", ret);
>>> 
>>> 	clk_disable_unprepare(hdmi->grf_clk);
>>>-	drm_dbg(hdmi, "vop %s output to hdmi\n", ret ? "LIT" : "BIG");
>>>+	dev_dbg(hdmi->dev, "vop %s output to hdmi\n", ret ? "LIT" : "BIG");
>>> }
>>> 
>>> static int
>>>@@ -574,7 +574,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
>>> 	ret = rockchip_hdmi_parse_dt(hdmi);
>>> 	if (ret) {
>>> 		if (ret != -EPROBE_DEFER)
>>>-			drm_err(hdmi, "Unable to parse OF data\n");
>>>+			dev_err(hdmi->dev, "Unable to parse OF data\n");
>>> 		return ret;
>>> 	}
>>> 
>>>@@ -582,7 +582,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
>>> 	if (IS_ERR(hdmi->phy)) {
>>> 		ret = PTR_ERR(hdmi->phy);
>>> 		if (ret != -EPROBE_DEFER)
>>>-			drm_err(hdmi, "failed to get phy\n");
>>>+			dev_err(hdmi->dev, "failed to get phy\n");
>>> 		return ret;
>>> 	}
>>> 
>>>diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>>index f41151d49fca..3d1dddb34603 100644
>>>--- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>>+++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>>@@ -242,7 +242,7 @@ static void dw_hdmi_qp_rk3588_hpd_work(struct work_struct *work)
>>> 	if (drm) {
>>> 		changed = drm_helper_hpd_irq_event(drm);
>>> 		if (changed)
>>>-			drm_dbg(hdmi, "connector status changed\n");
>>>+			dev_dbg(hdmi->dev, "connector status changed\n");
>>> 	}
>>> }
>>> 
>>>@@ -472,7 +472,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>> 		}
>>> 	}
>>> 	if (hdmi->port_id < 0) {
>>>-		drm_err(hdmi, "Failed to match HDMI port ID\n");
>>>+		dev_err(hdmi->dev, "Failed to match HDMI port ID\n");
>>> 		return hdmi->port_id;
>>> 	}
>>> 
>>>@@ -496,20 +496,20 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>> 	hdmi->regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
>>> 						       "rockchip,grf");
>>> 	if (IS_ERR(hdmi->regmap)) {
>>>-		drm_err(hdmi, "Unable to get rockchip,grf\n");
>>>+		dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
>>> 		return PTR_ERR(hdmi->regmap);
>>> 	}
>>> 
>>> 	hdmi->vo_regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
>>> 							  "rockchip,vo-grf");
>>> 	if (IS_ERR(hdmi->vo_regmap)) {
>>>-		drm_err(hdmi, "Unable to get rockchip,vo-grf\n");
>>>+		dev_err(hdmi->dev, "Unable to get rockchip,vo-grf\n");
>>> 		return PTR_ERR(hdmi->vo_regmap);
>>> 	}
>>> 
>>> 	ret = devm_clk_bulk_get_all_enabled(hdmi->dev, &clks);
>>> 	if (ret < 0) {
>>>-		drm_err(hdmi, "Failed to get clocks: %d\n", ret);
>>>+		dev_err(hdmi->dev, "Failed to get clocks: %d\n", ret);
>>> 		return ret;
>>> 	}
>>> 
>>>@@ -517,7 +517,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>> 						    GPIOD_OUT_HIGH);
>>> 	if (IS_ERR(hdmi->enable_gpio)) {
>>> 		ret = PTR_ERR(hdmi->enable_gpio);
>>>-		drm_err(hdmi, "Failed to request enable GPIO: %d\n", ret);
>>>+		dev_err(hdmi->dev, "Failed to request enable GPIO: %d\n", ret);
>>> 		return ret;
>>> 	}
>>> 
>>>@@ -525,7 +525,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>> 	if (IS_ERR(hdmi->phy)) {
>>> 		ret = PTR_ERR(hdmi->phy);
>>> 		if (ret != -EPROBE_DEFER)
>>>-			drm_err(hdmi, "failed to get phy: %d\n", ret);
>>>+			dev_err(hdmi->dev, "failed to get phy: %d\n", ret);
>>> 		return ret;
>>> 	}
>>> 
>>>@@ -564,7 +564,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>> 	connector = drm_bridge_connector_init(drm, encoder);
>>> 	if (IS_ERR(connector)) {
>>> 		ret = PTR_ERR(connector);
>>>-		drm_err(hdmi, "failed to init bridge connector: %d\n", ret);
>>>+		dev_err(hdmi->dev, "failed to init bridge connector: %d\n", ret);
>>> 		return ret;
>>> 	}
>>> 
>>>-- 
>>>2.39.5
>>>
>>>
>>>_______________________________________________
>>>Linux-rockchip mailing list
>>>Linux-rockchip@lists.infradead.org
>>>http://lists.infradead.org/mailman/listinfo/linux-rockchip
>
>-- 
>Jani Nikula, Intel

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

* Re: [PATCH 3/5] drm/sched: stop passing non struct drm_device to drm_err() and friends
  2025-01-24 11:46     ` Jani Nikula
@ 2025-01-27 10:11       ` Philipp Stanner
  2025-02-24 15:29       ` Tvrtko Ursulin
  1 sibling, 0 replies; 35+ messages in thread
From: Philipp Stanner @ 2025-01-27 10:11 UTC (permalink / raw)
  To: Jani Nikula, Simona Vetter
  Cc: dri-devel, intel-gfx, Matthew Brost, Danilo Krummrich,
	Philipp Stanner, Christian König

nit: In drm/sched, we start with an upper case -> "drm/sched: Stop […]"

On Fri, 2025-01-24 at 13:46 +0200, Jani Nikula wrote:
> On Thu, 23 Jan 2025, Simona Vetter <simona.vetter@ffwll.ch> wrote:
> > On Thu, Jan 23, 2025 at 05:09:10PM +0200, Jani Nikula wrote:
> > > The expectation is that the struct drm_device based logging
> > > helpers get
> > > passed an actual struct drm_device pointer rather than some
> > > random
> > > struct pointer where you can dereference the ->dev member.
> > > 
> > > Convert drm_err(sched, ...) to dev_err(sched->dev, ...) and
> > > similar. This matches current usage, as struct drm_device is not
> > > available, but drops "[drm]" or "[drm] *ERROR*" prefix from
> > > logging.
> > > 
> > > Unfortunately, there's no dev_WARN_ON(), so the conversion is not
> > > exactly the same.
> > > 
> > > Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> > 
> > For the two previous patches just dev_ makes sense since they're
> > just
> > platform drivers, but for drm/sched I wonder whether it wouldn't be
> > better
> > to switch from struct device * to struct drm_device * instead. I
> > guess
> > might be best to leave that decision to scheduler folks.
> 
> I had a very brief look, and it seemed like struct drm_device isn't
> passed around in sched. If use of struct drm_device is preferred, I'm
> not the best person to figure out how to do that.

The @dev field in drm_sched_init() is only ever used for debug prints.
If we want to improve those prints further and we need a drm_dev for
that, I'd say we can implement that ourselves once the need arises.


>  But the abuse of the
> drm_err() and friends macros needs to stop.
> 
> > Anyway on the series and with that caveat:
> > 
> > Reviewed-by: Simona Vetter <simona.vetter@ffwll.ch>

Acked-by: Philipp Stanner <phasta@kernel.org>

One more nice-to-have / nit below

> 
> Thanks,
> Jani.
> 
> > 
> > 
> > > 
> > > ---
> > > 
> > > Cc: Matthew Brost <matthew.brost@intel.com>
> > > Cc: Danilo Krummrich <dakr@kernel.org>
> > > Cc: Philipp Stanner <phasta@kernel.org>
> > > Cc: "Christian König" <ckoenig.leichtzumerken@gmail.com>
> > > Cc: dri-devel@lists.freedesktop.org
> > > ---
> > >  drivers/gpu/drm/scheduler/sched_entity.c |  2 +-
> > >  drivers/gpu/drm/scheduler/sched_main.c   | 20 +++++++++++-------
> > > --
> > >  2 files changed, 12 insertions(+), 10 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/scheduler/sched_entity.c
> > > b/drivers/gpu/drm/scheduler/sched_entity.c
> > > index 69bcf0e99d57..e29af71d4b5c 100644
> > > --- a/drivers/gpu/drm/scheduler/sched_entity.c
> > > +++ b/drivers/gpu/drm/scheduler/sched_entity.c
> > > @@ -92,7 +92,7 @@ int drm_sched_entity_init(struct
> > > drm_sched_entity *entity,
> > >  		 * the lowest priority available.
> > >  		 */
> > >  		if (entity->priority >= sched_list[0]->num_rqs)
> > > {
> > > -			drm_err(sched_list[0], "entity with out-
> > > of-bounds priority:%u num_rqs:%u\n",
> > > +			dev_err(sched_list[0]->dev, "entity with
> > > out-of-bounds priority:%u num_rqs:%u\n",

Since you're touching that line already, could you improve that
string's formatting a bit?

"entity has out-of-bounds priority: %u. num_rqs: %u\n"


Thx,
P.

> > >  				entity->priority, sched_list[0]-
> > > >num_rqs);
> > >  			entity->priority = max_t(s32, (s32)
> > > sched_list[0]->num_rqs - 1,
> > >  						 (s32)
> > > DRM_SCHED_PRIORITY_KERNEL);
> > > diff --git a/drivers/gpu/drm/scheduler/sched_main.c
> > > b/drivers/gpu/drm/scheduler/sched_main.c
> > > index a48be16ab84f..d1c1f22fd1db 100644
> > > --- a/drivers/gpu/drm/scheduler/sched_main.c
> > > +++ b/drivers/gpu/drm/scheduler/sched_main.c
> > > @@ -103,9 +103,9 @@ static u32 drm_sched_available_credits(struct
> > > drm_gpu_scheduler *sched)
> > >  {
> > >  	u32 credits;
> > >  
> > > -	drm_WARN_ON(sched, check_sub_overflow(sched-
> > > >credit_limit,
> > > -					     
> > > atomic_read(&sched->credit_count),
> > > -					      &credits));
> > > +	WARN_ON(check_sub_overflow(sched->credit_limit,
> > > +				   atomic_read(&sched-
> > > >credit_count),
> > > +				   &credits));
> > >  
> > >  	return credits;
> > >  }
> > > @@ -130,9 +130,11 @@ static bool drm_sched_can_queue(struct
> > > drm_gpu_scheduler *sched,
> > >  	/* If a job exceeds the credit limit, truncate it to the
> > > credit limit
> > >  	 * itself to guarantee forward progress.
> > >  	 */
> > > -	if (drm_WARN(sched, s_job->credits > sched-
> > > >credit_limit,
> > > -		     "Jobs may not exceed the credit limit,
> > > truncate.\n"))
> > > +	if (s_job->credits > sched->credit_limit) {
> > > +		dev_WARN(sched->dev,
> > > +			 "Jobs may not exceed the credit limit,
> > > truncate.\n");
> > >  		s_job->credits = sched->credit_limit;
> > > +	}
> > >  
> > >  	return drm_sched_available_credits(sched) >= s_job-
> > > >credits;
> > >  }
> > > @@ -790,7 +792,7 @@ int drm_sched_job_init(struct drm_sched_job
> > > *job,
> > >  		 * or worse--a blank screen--leave a trail in
> > > the
> > >  		 * logs, so this can be debugged easier.
> > >  		 */
> > > -		drm_err(job->sched, "%s: entity has no rq!\n",
> > > __func__);
> > > +		dev_err(job->sched->dev, "%s: entity has no
> > > rq!\n", __func__);
> > >  		return -ENOENT;
> > >  	}
> > >  
> > > @@ -1280,7 +1282,7 @@ int drm_sched_init(struct drm_gpu_scheduler
> > > *sched,
> > >  	if (num_rqs > DRM_SCHED_PRIORITY_COUNT) {
> > >  		/* This is a gross violation--tell drivers what
> > > the  problem is.
> > >  		 */
> > > -		drm_err(sched, "%s: num_rqs cannot be greater
> > > than DRM_SCHED_PRIORITY_COUNT\n",
> > > +		dev_err(sched->dev, "%s: num_rqs cannot be
> > > greater than DRM_SCHED_PRIORITY_COUNT\n",
> > >  			__func__);
> > >  		return -EINVAL;
> > >  	} else if (sched->sched_rq) {
> > > @@ -1288,7 +1290,7 @@ int drm_sched_init(struct drm_gpu_scheduler
> > > *sched,
> > >  		 * fine-tune their DRM calling order, and return
> > > all
> > >  		 * is good.
> > >  		 */
> > > -		drm_warn(sched, "%s: scheduler already
> > > initialized!\n", __func__);
> > > +		dev_warn(sched->dev, "%s: scheduler already
> > > initialized!\n", __func__);
> > >  		return 0;
> > >  	}
> > >  
> > > @@ -1343,7 +1345,7 @@ int drm_sched_init(struct drm_gpu_scheduler
> > > *sched,
> > >  Out_check_own:
> > >  	if (sched->own_submit_wq)
> > >  		destroy_workqueue(sched->submit_wq);
> > > -	drm_err(sched, "%s: Failed to setup GPU scheduler--out
> > > of memory\n", __func__);
> > > +	dev_err(sched->dev, "%s: Failed to setup GPU scheduler--
> > > out of memory\n", __func__);
> > >  	return -ENOMEM;
> > >  }
> > >  EXPORT_SYMBOL(drm_sched_init);
> > > -- 
> > > 2.39.5
> > > 
> 


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

* Re: [PATCH 2/5] drm/rockchip: stop passing non struct drm_device to drm_err() and friends
  2025-01-23 15:09 ` [PATCH 2/5] drm/rockchip: " Jani Nikula
  2025-01-24  9:53   ` Andy Yan
@ 2025-02-24 14:47   ` Louis Chauvet
  1 sibling, 0 replies; 35+ messages in thread
From: Louis Chauvet @ 2025-02-24 14:47 UTC (permalink / raw)
  To: Jani Nikula, dri-devel
  Cc: intel-gfx, Sandy Huang, Heiko Stübner, Andy Yan,
	linux-arm-kernel, linux-rockchip



Le 23/01/2025 à 16:09, Jani Nikula a écrit :
> The expectation is that the struct drm_device based logging helpers get
> passed an actual struct drm_device pointer rather than some random
> struct pointer where you can dereference the ->dev member.
> 
> Convert drm_err(hdmi, ...) to dev_err(hdmi->dev, ...). This matches
> current usage, but drops "[drm] *ERROR*" prefix from logging.
> 
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>

> ---
> 
> Looks like it's possible to hunt down the struct drm_device in most of
> these cases, if that's desired. This was the simplest change.
> 
> Cc: Sandy Huang <hjc@rock-chips.com>
> Cc: "Heiko Stübner" <heiko@sntech.de>
> Cc: Andy Yan <andy.yan@rock-chips.com>
> Cc: dri-devel@lists.freedesktop.org
> Cc: linux-arm-kernel@lists.infradead.org
> Cc: linux-rockchip@lists.infradead.org
> ---
>   drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c    | 16 ++++++++--------
>   drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 16 ++++++++--------
>   2 files changed, 16 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
> index e7a6669c46b0..f737e7d46e66 100644
> --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
> +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
> @@ -203,7 +203,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>   
>   	hdmi->regmap = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
>   	if (IS_ERR(hdmi->regmap)) {
> -		drm_err(hdmi, "Unable to get rockchip,grf\n");
> +		dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
>   		return PTR_ERR(hdmi->regmap);
>   	}
>   
> @@ -214,7 +214,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>   	if (IS_ERR(hdmi->ref_clk)) {
>   		ret = PTR_ERR(hdmi->ref_clk);
>   		if (ret != -EPROBE_DEFER)
> -			drm_err(hdmi, "failed to get reference clock\n");
> +			dev_err(hdmi->dev, "failed to get reference clock\n");
>   		return ret;
>   	}
>   
> @@ -222,7 +222,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>   	if (IS_ERR(hdmi->grf_clk)) {
>   		ret = PTR_ERR(hdmi->grf_clk);
>   		if (ret != -EPROBE_DEFER)
> -			drm_err(hdmi, "failed to get grf clock\n");
> +			dev_err(hdmi->dev, "failed to get grf clock\n");
>   		return ret;
>   	}
>   
> @@ -302,16 +302,16 @@ static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder)
>   
>   	ret = clk_prepare_enable(hdmi->grf_clk);
>   	if (ret < 0) {
> -		drm_err(hdmi, "failed to enable grfclk %d\n", ret);
> +		dev_err(hdmi->dev, "failed to enable grfclk %d\n", ret);
>   		return;
>   	}
>   
>   	ret = regmap_write(hdmi->regmap, hdmi->chip_data->lcdsel_grf_reg, val);
>   	if (ret != 0)
> -		drm_err(hdmi, "Could not write to GRF: %d\n", ret);
> +		dev_err(hdmi->dev, "Could not write to GRF: %d\n", ret);
>   
>   	clk_disable_unprepare(hdmi->grf_clk);
> -	drm_dbg(hdmi, "vop %s output to hdmi\n", ret ? "LIT" : "BIG");
> +	dev_dbg(hdmi->dev, "vop %s output to hdmi\n", ret ? "LIT" : "BIG");
>   }
>   
>   static int
> @@ -574,7 +574,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
>   	ret = rockchip_hdmi_parse_dt(hdmi);
>   	if (ret) {
>   		if (ret != -EPROBE_DEFER)
> -			drm_err(hdmi, "Unable to parse OF data\n");
> +			dev_err(hdmi->dev, "Unable to parse OF data\n");
>   		return ret;
>   	}
>   
> @@ -582,7 +582,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
>   	if (IS_ERR(hdmi->phy)) {
>   		ret = PTR_ERR(hdmi->phy);
>   		if (ret != -EPROBE_DEFER)
> -			drm_err(hdmi, "failed to get phy\n");
> +			dev_err(hdmi->dev, "failed to get phy\n");
>   		return ret;
>   	}
>   
> diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
> index f41151d49fca..3d1dddb34603 100644
> --- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
> +++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
> @@ -242,7 +242,7 @@ static void dw_hdmi_qp_rk3588_hpd_work(struct work_struct *work)
>   	if (drm) {
>   		changed = drm_helper_hpd_irq_event(drm);
>   		if (changed)
> -			drm_dbg(hdmi, "connector status changed\n");
> +			dev_dbg(hdmi->dev, "connector status changed\n");
>   	}
>   }
>   
> @@ -472,7 +472,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>   		}
>   	}
>   	if (hdmi->port_id < 0) {
> -		drm_err(hdmi, "Failed to match HDMI port ID\n");
> +		dev_err(hdmi->dev, "Failed to match HDMI port ID\n");
>   		return hdmi->port_id;
>   	}
>   
> @@ -496,20 +496,20 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>   	hdmi->regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
>   						       "rockchip,grf");
>   	if (IS_ERR(hdmi->regmap)) {
> -		drm_err(hdmi, "Unable to get rockchip,grf\n");
> +		dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
>   		return PTR_ERR(hdmi->regmap);
>   	}
>   
>   	hdmi->vo_regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
>   							  "rockchip,vo-grf");
>   	if (IS_ERR(hdmi->vo_regmap)) {
> -		drm_err(hdmi, "Unable to get rockchip,vo-grf\n");
> +		dev_err(hdmi->dev, "Unable to get rockchip,vo-grf\n");
>   		return PTR_ERR(hdmi->vo_regmap);
>   	}
>   
>   	ret = devm_clk_bulk_get_all_enabled(hdmi->dev, &clks);
>   	if (ret < 0) {
> -		drm_err(hdmi, "Failed to get clocks: %d\n", ret);
> +		dev_err(hdmi->dev, "Failed to get clocks: %d\n", ret);
>   		return ret;
>   	}
>   
> @@ -517,7 +517,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>   						    GPIOD_OUT_HIGH);
>   	if (IS_ERR(hdmi->enable_gpio)) {
>   		ret = PTR_ERR(hdmi->enable_gpio);
> -		drm_err(hdmi, "Failed to request enable GPIO: %d\n", ret);
> +		dev_err(hdmi->dev, "Failed to request enable GPIO: %d\n", ret);
>   		return ret;
>   	}
>   
> @@ -525,7 +525,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>   	if (IS_ERR(hdmi->phy)) {
>   		ret = PTR_ERR(hdmi->phy);
>   		if (ret != -EPROBE_DEFER)
> -			drm_err(hdmi, "failed to get phy: %d\n", ret);
> +			dev_err(hdmi->dev, "failed to get phy: %d\n", ret);
>   		return ret;
>   	}
>   
> @@ -564,7 +564,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>   	connector = drm_bridge_connector_init(drm, encoder);
>   	if (IS_ERR(connector)) {
>   		ret = PTR_ERR(connector);
> -		drm_err(hdmi, "failed to init bridge connector: %d\n", ret);
> +		dev_err(hdmi->dev, "failed to init bridge connector: %d\n", ret);
>   		return ret;
>   	}
>   

-- 
Louis Chauvet, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com



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

* Re: [PATCH 3/5] drm/sched: stop passing non struct drm_device to drm_err() and friends
  2025-01-23 15:09 ` [PATCH 3/5] drm/sched: " Jani Nikula
  2025-01-23 19:54   ` Simona Vetter
@ 2025-02-24 14:48   ` Louis Chauvet
  1 sibling, 0 replies; 35+ messages in thread
From: Louis Chauvet @ 2025-02-24 14:48 UTC (permalink / raw)
  To: Jani Nikula, dri-devel
  Cc: intel-gfx, Matthew Brost, Danilo Krummrich, Philipp Stanner,
	Christian König



Le 23/01/2025 à 16:09, Jani Nikula a écrit :
> The expectation is that the struct drm_device based logging helpers get
> passed an actual struct drm_device pointer rather than some random
> struct pointer where you can dereference the ->dev member.
> 
> Convert drm_err(sched, ...) to dev_err(sched->dev, ...) and
> similar. This matches current usage, as struct drm_device is not
> available, but drops "[drm]" or "[drm] *ERROR*" prefix from logging.
> 
> Unfortunately, there's no dev_WARN_ON(), so the conversion is not
> exactly the same.
> 
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>

> ---
> 
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Danilo Krummrich <dakr@kernel.org>
> Cc: Philipp Stanner <phasta@kernel.org>
> Cc: "Christian König" <ckoenig.leichtzumerken@gmail.com>
> Cc: dri-devel@lists.freedesktop.org
> ---
>   drivers/gpu/drm/scheduler/sched_entity.c |  2 +-
>   drivers/gpu/drm/scheduler/sched_main.c   | 20 +++++++++++---------
>   2 files changed, 12 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c
> index 69bcf0e99d57..e29af71d4b5c 100644
> --- a/drivers/gpu/drm/scheduler/sched_entity.c
> +++ b/drivers/gpu/drm/scheduler/sched_entity.c
> @@ -92,7 +92,7 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
>   		 * the lowest priority available.
>   		 */
>   		if (entity->priority >= sched_list[0]->num_rqs) {
> -			drm_err(sched_list[0], "entity with out-of-bounds priority:%u num_rqs:%u\n",
> +			dev_err(sched_list[0]->dev, "entity with out-of-bounds priority:%u num_rqs:%u\n",
>   				entity->priority, sched_list[0]->num_rqs);
>   			entity->priority = max_t(s32, (s32) sched_list[0]->num_rqs - 1,
>   						 (s32) DRM_SCHED_PRIORITY_KERNEL);
> diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
> index a48be16ab84f..d1c1f22fd1db 100644
> --- a/drivers/gpu/drm/scheduler/sched_main.c
> +++ b/drivers/gpu/drm/scheduler/sched_main.c
> @@ -103,9 +103,9 @@ static u32 drm_sched_available_credits(struct drm_gpu_scheduler *sched)
>   {
>   	u32 credits;
>   
> -	drm_WARN_ON(sched, check_sub_overflow(sched->credit_limit,
> -					      atomic_read(&sched->credit_count),
> -					      &credits));
> +	WARN_ON(check_sub_overflow(sched->credit_limit,
> +				   atomic_read(&sched->credit_count),
> +				   &credits));
>   
>   	return credits;
>   }
> @@ -130,9 +130,11 @@ static bool drm_sched_can_queue(struct drm_gpu_scheduler *sched,
>   	/* If a job exceeds the credit limit, truncate it to the credit limit
>   	 * itself to guarantee forward progress.
>   	 */
> -	if (drm_WARN(sched, s_job->credits > sched->credit_limit,
> -		     "Jobs may not exceed the credit limit, truncate.\n"))
> +	if (s_job->credits > sched->credit_limit) {
> +		dev_WARN(sched->dev,
> +			 "Jobs may not exceed the credit limit, truncate.\n");
>   		s_job->credits = sched->credit_limit;
> +	}
>   
>   	return drm_sched_available_credits(sched) >= s_job->credits;
>   }
> @@ -790,7 +792,7 @@ int drm_sched_job_init(struct drm_sched_job *job,
>   		 * or worse--a blank screen--leave a trail in the
>   		 * logs, so this can be debugged easier.
>   		 */
> -		drm_err(job->sched, "%s: entity has no rq!\n", __func__);
> +		dev_err(job->sched->dev, "%s: entity has no rq!\n", __func__);
>   		return -ENOENT;
>   	}
>   
> @@ -1280,7 +1282,7 @@ int drm_sched_init(struct drm_gpu_scheduler *sched,
>   	if (num_rqs > DRM_SCHED_PRIORITY_COUNT) {
>   		/* This is a gross violation--tell drivers what the  problem is.
>   		 */
> -		drm_err(sched, "%s: num_rqs cannot be greater than DRM_SCHED_PRIORITY_COUNT\n",
> +		dev_err(sched->dev, "%s: num_rqs cannot be greater than DRM_SCHED_PRIORITY_COUNT\n",
>   			__func__);
>   		return -EINVAL;
>   	} else if (sched->sched_rq) {
> @@ -1288,7 +1290,7 @@ int drm_sched_init(struct drm_gpu_scheduler *sched,
>   		 * fine-tune their DRM calling order, and return all
>   		 * is good.
>   		 */
> -		drm_warn(sched, "%s: scheduler already initialized!\n", __func__);
> +		dev_warn(sched->dev, "%s: scheduler already initialized!\n", __func__);
>   		return 0;
>   	}
>   
> @@ -1343,7 +1345,7 @@ int drm_sched_init(struct drm_gpu_scheduler *sched,
>   Out_check_own:
>   	if (sched->own_submit_wq)
>   		destroy_workqueue(sched->submit_wq);
> -	drm_err(sched, "%s: Failed to setup GPU scheduler--out of memory\n", __func__);
> +	dev_err(sched->dev, "%s: Failed to setup GPU scheduler--out of memory\n", __func__);
>   	return -ENOMEM;
>   }
>   EXPORT_SYMBOL(drm_sched_init);

-- 
Louis Chauvet, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com



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

* Re: [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends
  2025-01-23 15:09 ` [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends Jani Nikula
@ 2025-02-24 14:48   ` Louis Chauvet
  2025-02-25 16:52   ` Luca Ceresoli
  2025-05-15 20:18   ` Bill Wendling
  2 siblings, 0 replies; 35+ messages in thread
From: Louis Chauvet @ 2025-02-24 14:48 UTC (permalink / raw)
  To: Jani Nikula, dri-devel; +Cc: intel-gfx



Le 23/01/2025 à 16:09, Jani Nikula a écrit :
> The expectation is that the struct drm_device based logging helpers get
> passed an actual struct drm_device pointer rather than some random
> struct pointer where you can dereference the ->dev member.
> 
> Add a static inline helper to convert struct drm_device to struct
> device, with the main benefit being the type checking of the macro
> argument.
> 
> As a side effect, this also reduces macro argument double references.
> 
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com>

> ---
>   include/drm/drm_print.h | 41 +++++++++++++++++++++++------------------
>   1 file changed, 23 insertions(+), 18 deletions(-)
> 
> diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h
> index 9732f514566d..f31eba1c7cab 100644
> --- a/include/drm/drm_print.h
> +++ b/include/drm/drm_print.h
> @@ -584,9 +584,15 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
>    * Prefer drm_device based logging over device or prink based logging.
>    */
>   
> +/* Helper to enforce struct drm_device type */
> +static inline struct device *__drm_to_dev(const struct drm_device *drm)
> +{
> +	return drm ? drm->dev : NULL;
> +}
> +
>   /* Helper for struct drm_device based logging. */
>   #define __drm_printk(drm, level, type, fmt, ...)			\
> -	dev_##level##type((drm) ? (drm)->dev : NULL, "[drm] " fmt, ##__VA_ARGS__)
> +	dev_##level##type(__drm_to_dev(drm), "[drm] " fmt, ##__VA_ARGS__)
>   
>   
>   #define drm_info(drm, fmt, ...)					\
> @@ -620,25 +626,25 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
>   
>   
>   #define drm_dbg_core(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_CORE, fmt, ##__VA_ARGS__)
> -#define drm_dbg_driver(drm, fmt, ...)						\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_CORE, fmt, ##__VA_ARGS__)
> +#define drm_dbg_driver(drm, fmt, ...)					\
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
>   #define drm_dbg_kms(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_KMS, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_KMS, fmt, ##__VA_ARGS__)
>   #define drm_dbg_prime(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_PRIME, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_PRIME, fmt, ##__VA_ARGS__)
>   #define drm_dbg_atomic(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
>   #define drm_dbg_vbl(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_VBL, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_VBL, fmt, ##__VA_ARGS__)
>   #define drm_dbg_state(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_STATE, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_STATE, fmt, ##__VA_ARGS__)
>   #define drm_dbg_lease(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_LEASE, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_LEASE, fmt, ##__VA_ARGS__)
>   #define drm_dbg_dp(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DP, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DP, fmt, ##__VA_ARGS__)
>   #define drm_dbg_drmres(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DRMRES, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DRMRES, fmt, ##__VA_ARGS__)
>   
>   #define drm_dbg(drm, fmt, ...)	drm_dbg_driver(drm, fmt, ##__VA_ARGS__)
>   
> @@ -727,10 +733,9 @@ void __drm_err(const char *format, ...);
>   #define __DRM_DEFINE_DBG_RATELIMITED(category, drm, fmt, ...)					\
>   ({												\
>   	static DEFINE_RATELIMIT_STATE(rs_, DEFAULT_RATELIMIT_INTERVAL, DEFAULT_RATELIMIT_BURST);\
> -	const struct drm_device *drm_ = (drm);							\
>   												\
>   	if (drm_debug_enabled(DRM_UT_ ## category) && __ratelimit(&rs_))			\
> -		drm_dev_printk(drm_ ? drm_->dev : NULL, KERN_DEBUG, fmt, ## __VA_ARGS__);	\
> +		drm_dev_printk(__drm_to_dev(drm), KERN_DEBUG, fmt, ## __VA_ARGS__);		\
>   })
>   
>   #define drm_dbg_ratelimited(drm, fmt, ...) \
> @@ -752,13 +757,13 @@ void __drm_err(const char *format, ...);
>   /* Helper for struct drm_device based WARNs */
>   #define drm_WARN(drm, condition, format, arg...)			\
>   	WARN(condition, "%s %s: [drm] " format,				\
> -			dev_driver_string((drm)->dev),			\
> -			dev_name((drm)->dev), ## arg)
> +			dev_driver_string(__drm_to_dev(drm)),		\
> +			dev_name(__drm_to_dev(drm)), ## arg)
>   
>   #define drm_WARN_ONCE(drm, condition, format, arg...)			\
>   	WARN_ONCE(condition, "%s %s: [drm] " format,			\
> -			dev_driver_string((drm)->dev),			\
> -			dev_name((drm)->dev), ## arg)
> +			dev_driver_string(__drm_to_dev(drm)),		\
> +			dev_name(__drm_to_dev(drm)), ## arg)
>   
>   #define drm_WARN_ON(drm, x)						\
>   	drm_WARN((drm), (x), "%s",					\

-- 
Louis Chauvet, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com



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

* Re: [PATCH 3/5] drm/sched: stop passing non struct drm_device to drm_err() and friends
  2025-01-24 11:46     ` Jani Nikula
  2025-01-27 10:11       ` Philipp Stanner
@ 2025-02-24 15:29       ` Tvrtko Ursulin
  1 sibling, 0 replies; 35+ messages in thread
From: Tvrtko Ursulin @ 2025-02-24 15:29 UTC (permalink / raw)
  To: Jani Nikula, Simona Vetter
  Cc: dri-devel, intel-gfx, Matthew Brost, Danilo Krummrich,
	Philipp Stanner, Christian König


On 24/01/2025 11:46, Jani Nikula wrote:
> On Thu, 23 Jan 2025, Simona Vetter <simona.vetter@ffwll.ch> wrote:
>> On Thu, Jan 23, 2025 at 05:09:10PM +0200, Jani Nikula wrote:
>>> The expectation is that the struct drm_device based logging helpers get
>>> passed an actual struct drm_device pointer rather than some random
>>> struct pointer where you can dereference the ->dev member.
>>>
>>> Convert drm_err(sched, ...) to dev_err(sched->dev, ...) and
>>> similar. This matches current usage, as struct drm_device is not
>>> available, but drops "[drm]" or "[drm] *ERROR*" prefix from logging.
>>>
>>> Unfortunately, there's no dev_WARN_ON(), so the conversion is not
>>> exactly the same.
>>>
>>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>
>> For the two previous patches just dev_ makes sense since they're just
>> platform drivers, but for drm/sched I wonder whether it wouldn't be better
>> to switch from struct device * to struct drm_device * instead. I guess
>> might be best to leave that decision to scheduler folks.
> 
> I had a very brief look, and it seemed like struct drm_device isn't
> passed around in sched. If use of struct drm_device is preferred, I'm
> not the best person to figure out how to do that. But the abuse of the
> drm_err() and friends macros needs to stop.

FWIW I agree it should be the DRM device and I even wanted to tidy this 
some time ago but something distracted me. Worst thing here is that 
sched->dev was apparently added exactly to enable abuse of the logging 
macros. See 8ab62eda177b ("drm/sched: Add device pointer to 
drm_gpu_scheduler"). Logging is the only use for sched->dev at the moment.

But I think it is fine to merge your patch until a more comprehensive 
cleanup happens. Only drm_sched_available_credits loses the device 
information and that one should be unreachable anyway.

Regards,

Tvrtko

>> Anyway on the series and with that caveat:
>>
>> Reviewed-by: Simona Vetter <simona.vetter@ffwll.ch>
> 
> Thanks,
> Jani.
> 
>>
>>
>>>
>>> ---
>>>
>>> Cc: Matthew Brost <matthew.brost@intel.com>
>>> Cc: Danilo Krummrich <dakr@kernel.org>
>>> Cc: Philipp Stanner <phasta@kernel.org>
>>> Cc: "Christian König" <ckoenig.leichtzumerken@gmail.com>
>>> Cc: dri-devel@lists.freedesktop.org
>>> ---
>>>   drivers/gpu/drm/scheduler/sched_entity.c |  2 +-
>>>   drivers/gpu/drm/scheduler/sched_main.c   | 20 +++++++++++---------
>>>   2 files changed, 12 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c
>>> index 69bcf0e99d57..e29af71d4b5c 100644
>>> --- a/drivers/gpu/drm/scheduler/sched_entity.c
>>> +++ b/drivers/gpu/drm/scheduler/sched_entity.c
>>> @@ -92,7 +92,7 @@ int drm_sched_entity_init(struct drm_sched_entity *entity,
>>>   		 * the lowest priority available.
>>>   		 */
>>>   		if (entity->priority >= sched_list[0]->num_rqs) {
>>> -			drm_err(sched_list[0], "entity with out-of-bounds priority:%u num_rqs:%u\n",
>>> +			dev_err(sched_list[0]->dev, "entity with out-of-bounds priority:%u num_rqs:%u\n",
>>>   				entity->priority, sched_list[0]->num_rqs);
>>>   			entity->priority = max_t(s32, (s32) sched_list[0]->num_rqs - 1,
>>>   						 (s32) DRM_SCHED_PRIORITY_KERNEL);
>>> diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
>>> index a48be16ab84f..d1c1f22fd1db 100644
>>> --- a/drivers/gpu/drm/scheduler/sched_main.c
>>> +++ b/drivers/gpu/drm/scheduler/sched_main.c
>>> @@ -103,9 +103,9 @@ static u32 drm_sched_available_credits(struct drm_gpu_scheduler *sched)
>>>   {
>>>   	u32 credits;
>>>   
>>> -	drm_WARN_ON(sched, check_sub_overflow(sched->credit_limit,
>>> -					      atomic_read(&sched->credit_count),
>>> -					      &credits));
>>> +	WARN_ON(check_sub_overflow(sched->credit_limit,
>>> +				   atomic_read(&sched->credit_count),
>>> +				   &credits));
>>>   
>>>   	return credits;
>>>   }
>>> @@ -130,9 +130,11 @@ static bool drm_sched_can_queue(struct drm_gpu_scheduler *sched,
>>>   	/* If a job exceeds the credit limit, truncate it to the credit limit
>>>   	 * itself to guarantee forward progress.
>>>   	 */
>>> -	if (drm_WARN(sched, s_job->credits > sched->credit_limit,
>>> -		     "Jobs may not exceed the credit limit, truncate.\n"))
>>> +	if (s_job->credits > sched->credit_limit) {
>>> +		dev_WARN(sched->dev,
>>> +			 "Jobs may not exceed the credit limit, truncate.\n");
>>>   		s_job->credits = sched->credit_limit;
>>> +	}
>>>   
>>>   	return drm_sched_available_credits(sched) >= s_job->credits;
>>>   }
>>> @@ -790,7 +792,7 @@ int drm_sched_job_init(struct drm_sched_job *job,
>>>   		 * or worse--a blank screen--leave a trail in the
>>>   		 * logs, so this can be debugged easier.
>>>   		 */
>>> -		drm_err(job->sched, "%s: entity has no rq!\n", __func__);
>>> +		dev_err(job->sched->dev, "%s: entity has no rq!\n", __func__);
>>>   		return -ENOENT;
>>>   	}
>>>   
>>> @@ -1280,7 +1282,7 @@ int drm_sched_init(struct drm_gpu_scheduler *sched,
>>>   	if (num_rqs > DRM_SCHED_PRIORITY_COUNT) {
>>>   		/* This is a gross violation--tell drivers what the  problem is.
>>>   		 */
>>> -		drm_err(sched, "%s: num_rqs cannot be greater than DRM_SCHED_PRIORITY_COUNT\n",
>>> +		dev_err(sched->dev, "%s: num_rqs cannot be greater than DRM_SCHED_PRIORITY_COUNT\n",
>>>   			__func__);
>>>   		return -EINVAL;
>>>   	} else if (sched->sched_rq) {
>>> @@ -1288,7 +1290,7 @@ int drm_sched_init(struct drm_gpu_scheduler *sched,
>>>   		 * fine-tune their DRM calling order, and return all
>>>   		 * is good.
>>>   		 */
>>> -		drm_warn(sched, "%s: scheduler already initialized!\n", __func__);
>>> +		dev_warn(sched->dev, "%s: scheduler already initialized!\n", __func__);
>>>   		return 0;
>>>   	}
>>>   
>>> @@ -1343,7 +1345,7 @@ int drm_sched_init(struct drm_gpu_scheduler *sched,
>>>   Out_check_own:
>>>   	if (sched->own_submit_wq)
>>>   		destroy_workqueue(sched->submit_wq);
>>> -	drm_err(sched, "%s: Failed to setup GPU scheduler--out of memory\n", __func__);
>>> +	dev_err(sched->dev, "%s: Failed to setup GPU scheduler--out of memory\n", __func__);
>>>   	return -ENOMEM;
>>>   }
>>>   EXPORT_SYMBOL(drm_sched_init);
>>> -- 
>>> 2.39.5
>>>
> 


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

* Re: [PATCH 1/5] drm/mipi-dsi: stop passing non struct drm_device to drm_err() and friends
  2025-01-23 15:09 ` [PATCH 1/5] drm/mipi-dsi: stop passing non struct drm_device to drm_err() and friends Jani Nikula
@ 2025-02-25 16:52   ` Luca Ceresoli
  0 siblings, 0 replies; 35+ messages in thread
From: Luca Ceresoli @ 2025-02-25 16:52 UTC (permalink / raw)
  To: Jani Nikula
  Cc: dri-devel, intel-gfx, Maarten Lankhorst, Maxime Ripard,
	Thomas Zimmermann

On Thu, 23 Jan 2025 17:09:08 +0200
Jani Nikula <jani.nikula@intel.com> wrote:

> The expectation is that the struct drm_device based logging helpers get
> passed an actual struct drm_device pointer rather than some random
> struct pointer where you can dereference the ->dev member.
> 
> Convert drm_err(host, ...) to dev_err(host->dev, ...). This matches
> current usage, as struct drm_device is not available, but drops "[drm]
> *ERROR*" from logs.
> 
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>

-- 
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

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

* Re: [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends
  2025-01-23 15:09 ` [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends Jani Nikula
  2025-02-24 14:48   ` Louis Chauvet
@ 2025-02-25 16:52   ` Luca Ceresoli
  2025-05-15 20:18   ` Bill Wendling
  2 siblings, 0 replies; 35+ messages in thread
From: Luca Ceresoli @ 2025-02-25 16:52 UTC (permalink / raw)
  To: Jani Nikula; +Cc: dri-devel, intel-gfx

On Thu, 23 Jan 2025 17:09:12 +0200
Jani Nikula <jani.nikula@intel.com> wrote:

> The expectation is that the struct drm_device based logging helpers get
> passed an actual struct drm_device pointer rather than some random
> struct pointer where you can dereference the ->dev member.
> 
> Add a static inline helper to convert struct drm_device to struct
> device, with the main benefit being the type checking of the macro
> argument.
> 
> As a side effect, this also reduces macro argument double references.
> 
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>

Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>

-- 
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

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

* Re:Re:[PATCH 2/5] drm/rockchip: stop passing non struct drm_device to drm_err() and friends
  2025-01-25  3:53       ` Andy Yan
@ 2025-02-25 19:34         ` Jani Nikula
  2025-02-26  8:33         ` [PATCH " Thomas Zimmermann
  1 sibling, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-02-25 19:34 UTC (permalink / raw)
  To: Andy Yan
  Cc: dri-devel, intel-gfx, Sandy Huang, Heiko Stübner, Andy Yan,
	linux-arm-kernel, linux-rockchip, sam, Cristian Ciocaltea

On Sat, 25 Jan 2025, "Andy Yan" <andyshrk@163.com> wrote:
> 在 2025-01-24 19:43:07,"Jani Nikula" <jani.nikula@intel.com> 写道:
>>On Fri, 24 Jan 2025, "Andy Yan" <andyshrk@163.com> wrote:
>>> Hi,
>>>
>>> At 2025-01-23 23:09:09, "Jani Nikula" <jani.nikula@intel.com> wrote:
>>>>The expectation is that the struct drm_device based logging helpers get
>>>>passed an actual struct drm_device pointer rather than some random
>>>>struct pointer where you can dereference the ->dev member.
>>>>
>>>>Convert drm_err(hdmi, ...) to dev_err(hdmi->dev, ...). This matches
>>>>current usage, but drops "[drm] *ERROR*" prefix from logging.
>>>
>>> Frankly, I prefer the original version of the log.
>>> It is a platform driver, so it should use its own device.
>>> It is a driver that works in drm subsystem, so it's better to use "[drm] *ERROR*" prefix when logging
>>
>>If you need to do struct device based logging that is not the same
>>device as the struct drm_device dev member, you need to use dev_err()
>>and friends. You can't and must not use drm_err() and friends.
>>
>>It's as simple as that.
>>
>>The current drm_err(hdmi, ...) usage is simply abuse of the macros, and
>>must stop.
>
> Perhaps when you initially designed this macros, you intended it to accept only drm_device, 
> but your code implementation didn't enforce this restriction at the beginning.
> If that's truly what you intended, I suggest just reverting this commit that converting to use these macros[0], 
> as neither drm_err nor dev_err can maintain consistency with the original log of this driver.
> Alternatively, as suggested by Sam  in the initial submission of your patch 5 years ago, 
> there should also be a macro similar to drm_dev_info(device *, ..).[1]

Commit 1b8f576c6958 ("drm/rockchip: dw_hdmi: Use modern drm_device based
logging") does not revert cleanly, and even if it did, DRM_DEV_ERROR()
is deprecated in favour of drm_err() or dev_err(). I'm using the latter.

Ack for applying the patch at hand as-is?

BR,
Jani.




>
>
> [0]https://lore.kernel.org/linux-rockchip/20240813-dw-hdmi-rockchip-cleanup-v1-1-b3e73b5f4fd6@collabora.com/
> [1]https://lore.kernel.org/dri-devel/20191212215303.GA11520@ravnborg.org/
>
>>
>>
>>BR,
>>Jani.
>>
>>
>>>
>>>>
>>>>Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>>>
>>>>---
>>>>
>>>>Looks like it's possible to hunt down the struct drm_device in most of
>>>>these cases, if that's desired. This was the simplest change.
>>>>
>>>>Cc: Sandy Huang <hjc@rock-chips.com>
>>>>Cc: "Heiko Stübner" <heiko@sntech.de>
>>>>Cc: Andy Yan <andy.yan@rock-chips.com>
>>>>Cc: dri-devel@lists.freedesktop.org
>>>>Cc: linux-arm-kernel@lists.infradead.org
>>>>Cc: linux-rockchip@lists.infradead.org
>>>>---
>>>> drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c    | 16 ++++++++--------
>>>> drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 16 ++++++++--------
>>>> 2 files changed, 16 insertions(+), 16 deletions(-)
>>>>
>>>>diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>>>>index e7a6669c46b0..f737e7d46e66 100644
>>>>--- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>>>>+++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>>>>@@ -203,7 +203,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>>>> 
>>>> 	hdmi->regmap = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
>>>> 	if (IS_ERR(hdmi->regmap)) {
>>>>-		drm_err(hdmi, "Unable to get rockchip,grf\n");
>>>>+		dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
>>>> 		return PTR_ERR(hdmi->regmap);
>>>> 	}
>>>> 
>>>>@@ -214,7 +214,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>>>> 	if (IS_ERR(hdmi->ref_clk)) {
>>>> 		ret = PTR_ERR(hdmi->ref_clk);
>>>> 		if (ret != -EPROBE_DEFER)
>>>>-			drm_err(hdmi, "failed to get reference clock\n");
>>>>+			dev_err(hdmi->dev, "failed to get reference clock\n");
>>>> 		return ret;
>>>> 	}
>>>> 
>>>>@@ -222,7 +222,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>>>> 	if (IS_ERR(hdmi->grf_clk)) {
>>>> 		ret = PTR_ERR(hdmi->grf_clk);
>>>> 		if (ret != -EPROBE_DEFER)
>>>>-			drm_err(hdmi, "failed to get grf clock\n");
>>>>+			dev_err(hdmi->dev, "failed to get grf clock\n");
>>>> 		return ret;
>>>> 	}
>>>> 
>>>>@@ -302,16 +302,16 @@ static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder)
>>>> 
>>>> 	ret = clk_prepare_enable(hdmi->grf_clk);
>>>> 	if (ret < 0) {
>>>>-		drm_err(hdmi, "failed to enable grfclk %d\n", ret);
>>>>+		dev_err(hdmi->dev, "failed to enable grfclk %d\n", ret);
>>>> 		return;
>>>> 	}
>>>> 
>>>> 	ret = regmap_write(hdmi->regmap, hdmi->chip_data->lcdsel_grf_reg, val);
>>>> 	if (ret != 0)
>>>>-		drm_err(hdmi, "Could not write to GRF: %d\n", ret);
>>>>+		dev_err(hdmi->dev, "Could not write to GRF: %d\n", ret);
>>>> 
>>>> 	clk_disable_unprepare(hdmi->grf_clk);
>>>>-	drm_dbg(hdmi, "vop %s output to hdmi\n", ret ? "LIT" : "BIG");
>>>>+	dev_dbg(hdmi->dev, "vop %s output to hdmi\n", ret ? "LIT" : "BIG");
>>>> }
>>>> 
>>>> static int
>>>>@@ -574,7 +574,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
>>>> 	ret = rockchip_hdmi_parse_dt(hdmi);
>>>> 	if (ret) {
>>>> 		if (ret != -EPROBE_DEFER)
>>>>-			drm_err(hdmi, "Unable to parse OF data\n");
>>>>+			dev_err(hdmi->dev, "Unable to parse OF data\n");
>>>> 		return ret;
>>>> 	}
>>>> 
>>>>@@ -582,7 +582,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
>>>> 	if (IS_ERR(hdmi->phy)) {
>>>> 		ret = PTR_ERR(hdmi->phy);
>>>> 		if (ret != -EPROBE_DEFER)
>>>>-			drm_err(hdmi, "failed to get phy\n");
>>>>+			dev_err(hdmi->dev, "failed to get phy\n");
>>>> 		return ret;
>>>> 	}
>>>> 
>>>>diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>>>index f41151d49fca..3d1dddb34603 100644
>>>>--- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>>>+++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>>>@@ -242,7 +242,7 @@ static void dw_hdmi_qp_rk3588_hpd_work(struct work_struct *work)
>>>> 	if (drm) {
>>>> 		changed = drm_helper_hpd_irq_event(drm);
>>>> 		if (changed)
>>>>-			drm_dbg(hdmi, "connector status changed\n");
>>>>+			dev_dbg(hdmi->dev, "connector status changed\n");
>>>> 	}
>>>> }
>>>> 
>>>>@@ -472,7 +472,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>>> 		}
>>>> 	}
>>>> 	if (hdmi->port_id < 0) {
>>>>-		drm_err(hdmi, "Failed to match HDMI port ID\n");
>>>>+		dev_err(hdmi->dev, "Failed to match HDMI port ID\n");
>>>> 		return hdmi->port_id;
>>>> 	}
>>>> 
>>>>@@ -496,20 +496,20 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>>> 	hdmi->regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
>>>> 						       "rockchip,grf");
>>>> 	if (IS_ERR(hdmi->regmap)) {
>>>>-		drm_err(hdmi, "Unable to get rockchip,grf\n");
>>>>+		dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
>>>> 		return PTR_ERR(hdmi->regmap);
>>>> 	}
>>>> 
>>>> 	hdmi->vo_regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
>>>> 							  "rockchip,vo-grf");
>>>> 	if (IS_ERR(hdmi->vo_regmap)) {
>>>>-		drm_err(hdmi, "Unable to get rockchip,vo-grf\n");
>>>>+		dev_err(hdmi->dev, "Unable to get rockchip,vo-grf\n");
>>>> 		return PTR_ERR(hdmi->vo_regmap);
>>>> 	}
>>>> 
>>>> 	ret = devm_clk_bulk_get_all_enabled(hdmi->dev, &clks);
>>>> 	if (ret < 0) {
>>>>-		drm_err(hdmi, "Failed to get clocks: %d\n", ret);
>>>>+		dev_err(hdmi->dev, "Failed to get clocks: %d\n", ret);
>>>> 		return ret;
>>>> 	}
>>>> 
>>>>@@ -517,7 +517,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>>> 						    GPIOD_OUT_HIGH);
>>>> 	if (IS_ERR(hdmi->enable_gpio)) {
>>>> 		ret = PTR_ERR(hdmi->enable_gpio);
>>>>-		drm_err(hdmi, "Failed to request enable GPIO: %d\n", ret);
>>>>+		dev_err(hdmi->dev, "Failed to request enable GPIO: %d\n", ret);
>>>> 		return ret;
>>>> 	}
>>>> 
>>>>@@ -525,7 +525,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>>> 	if (IS_ERR(hdmi->phy)) {
>>>> 		ret = PTR_ERR(hdmi->phy);
>>>> 		if (ret != -EPROBE_DEFER)
>>>>-			drm_err(hdmi, "failed to get phy: %d\n", ret);
>>>>+			dev_err(hdmi->dev, "failed to get phy: %d\n", ret);
>>>> 		return ret;
>>>> 	}
>>>> 
>>>>@@ -564,7 +564,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>>> 	connector = drm_bridge_connector_init(drm, encoder);
>>>> 	if (IS_ERR(connector)) {
>>>> 		ret = PTR_ERR(connector);
>>>>-		drm_err(hdmi, "failed to init bridge connector: %d\n", ret);
>>>>+		dev_err(hdmi->dev, "failed to init bridge connector: %d\n", ret);
>>>> 		return ret;
>>>> 	}
>>>> 
>>>>-- 
>>>>2.39.5
>>>>
>>>>
>>>>_______________________________________________
>>>>Linux-rockchip mailing list
>>>>Linux-rockchip@lists.infradead.org
>>>>http://lists.infradead.org/mailman/listinfo/linux-rockchip
>>
>>-- 
>>Jani Nikula, Intel

-- 
Jani Nikula, Intel

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

* Re: [PATCH 2/5] drm/rockchip: stop passing non struct drm_device to drm_err() and friends
  2025-01-25  3:53       ` Andy Yan
  2025-02-25 19:34         ` Jani Nikula
@ 2025-02-26  8:33         ` Thomas Zimmermann
  2025-02-26 10:36           ` Andy Yan
  1 sibling, 1 reply; 35+ messages in thread
From: Thomas Zimmermann @ 2025-02-26  8:33 UTC (permalink / raw)
  To: Andy Yan, Jani Nikula
  Cc: dri-devel, intel-gfx, Sandy Huang, Heiko Stübner, Andy Yan,
	linux-arm-kernel, linux-rockchip, sam, Cristian Ciocaltea

Hi

Am 25.01.25 um 04:53 schrieb Andy Yan:
>
> 在 2025-01-24 19:43:07,"Jani Nikula" <jani.nikula@intel.com> 写道:
>> On Fri, 24 Jan 2025, "Andy Yan" <andyshrk@163.com> wrote:
>>> Hi,
>>>
>>> At 2025-01-23 23:09:09, "Jani Nikula" <jani.nikula@intel.com> wrote:
>>>> The expectation is that the struct drm_device based logging helpers get
>>>> passed an actual struct drm_device pointer rather than some random
>>>> struct pointer where you can dereference the ->dev member.
>>>>
>>>> Convert drm_err(hdmi, ...) to dev_err(hdmi->dev, ...). This matches
>>>> current usage, but drops "[drm] *ERROR*" prefix from logging.
>>> Frankly, I prefer the original version of the log.
>>> It is a platform driver, so it should use its own device.
>>> It is a driver that works in drm subsystem, so it's better to use "[drm] *ERROR*" prefix when logging
>> If you need to do struct device based logging that is not the same
>> device as the struct drm_device dev member, you need to use dev_err()
>> and friends. You can't and must not use drm_err() and friends.
>>
>> It's as simple as that.
>>
>> The current drm_err(hdmi, ...) usage is simply abuse of the macros, and
>> must stop.
> Perhaps when you initially designed this macros, you intended it to accept only drm_device,
> but your code implementation didn't enforce this restriction at the beginning.

C'mon. Are we really arguing about type safety now?

Patch 5 adds a little getter function that does the type check on the 
function call's argument.


> If that's truly what you intended, I suggest just reverting this commit that converting to use these macros[0],
> as neither drm_err nor dev_err can maintain consistency with the original log of this driver.
> Alternatively, as suggested by Sam  in the initial submission of your patch 5 years ago,
> there should also be a macro similar to drm_dev_info(device *, ..).[1]

DRM code tends to keep a reference to the drm_device somewhere and 
fetches it if necessary. For this patch, it should be possible to fetch 
the DRM device from struct rockchip_hdmi easily. Just do

   drm_err(rockchip_hdmi_drm_dev(hdmi), "...");

This would resolve the problem without new logging functions and keep 
the "[drm]" prefix to the messages.

Best regards
Thomas


>
>
> [0]https://lore.kernel.org/linux-rockchip/20240813-dw-hdmi-rockchip-cleanup-v1-1-b3e73b5f4fd6@collabora.com/
> [1]https://lore.kernel.org/dri-devel/20191212215303.GA11520@ravnborg.org/
>
>>
>> BR,
>> Jani.
>>
>>
>>>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>>>
>>>> ---
>>>>
>>>> Looks like it's possible to hunt down the struct drm_device in most of
>>>> these cases, if that's desired. This was the simplest change.
>>>>
>>>> Cc: Sandy Huang <hjc@rock-chips.com>
>>>> Cc: "Heiko Stübner" <heiko@sntech.de>
>>>> Cc: Andy Yan <andy.yan@rock-chips.com>
>>>> Cc: dri-devel@lists.freedesktop.org
>>>> Cc: linux-arm-kernel@lists.infradead.org
>>>> Cc: linux-rockchip@lists.infradead.org
>>>> ---
>>>> drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c    | 16 ++++++++--------
>>>> drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 16 ++++++++--------
>>>> 2 files changed, 16 insertions(+), 16 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>>>> index e7a6669c46b0..f737e7d46e66 100644
>>>> --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>>>> +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>>>> @@ -203,7 +203,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>>>>
>>>> 	hdmi->regmap = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
>>>> 	if (IS_ERR(hdmi->regmap)) {
>>>> -		drm_err(hdmi, "Unable to get rockchip,grf\n");
>>>> +		dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
>>>> 		return PTR_ERR(hdmi->regmap);
>>>> 	}
>>>>
>>>> @@ -214,7 +214,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>>>> 	if (IS_ERR(hdmi->ref_clk)) {
>>>> 		ret = PTR_ERR(hdmi->ref_clk);
>>>> 		if (ret != -EPROBE_DEFER)
>>>> -			drm_err(hdmi, "failed to get reference clock\n");
>>>> +			dev_err(hdmi->dev, "failed to get reference clock\n");
>>>> 		return ret;
>>>> 	}
>>>>
>>>> @@ -222,7 +222,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>>>> 	if (IS_ERR(hdmi->grf_clk)) {
>>>> 		ret = PTR_ERR(hdmi->grf_clk);
>>>> 		if (ret != -EPROBE_DEFER)
>>>> -			drm_err(hdmi, "failed to get grf clock\n");
>>>> +			dev_err(hdmi->dev, "failed to get grf clock\n");
>>>> 		return ret;
>>>> 	}
>>>>
>>>> @@ -302,16 +302,16 @@ static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder)
>>>>
>>>> 	ret = clk_prepare_enable(hdmi->grf_clk);
>>>> 	if (ret < 0) {
>>>> -		drm_err(hdmi, "failed to enable grfclk %d\n", ret);
>>>> +		dev_err(hdmi->dev, "failed to enable grfclk %d\n", ret);
>>>> 		return;
>>>> 	}
>>>>
>>>> 	ret = regmap_write(hdmi->regmap, hdmi->chip_data->lcdsel_grf_reg, val);
>>>> 	if (ret != 0)
>>>> -		drm_err(hdmi, "Could not write to GRF: %d\n", ret);
>>>> +		dev_err(hdmi->dev, "Could not write to GRF: %d\n", ret);
>>>>
>>>> 	clk_disable_unprepare(hdmi->grf_clk);
>>>> -	drm_dbg(hdmi, "vop %s output to hdmi\n", ret ? "LIT" : "BIG");
>>>> +	dev_dbg(hdmi->dev, "vop %s output to hdmi\n", ret ? "LIT" : "BIG");
>>>> }
>>>>
>>>> static int
>>>> @@ -574,7 +574,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
>>>> 	ret = rockchip_hdmi_parse_dt(hdmi);
>>>> 	if (ret) {
>>>> 		if (ret != -EPROBE_DEFER)
>>>> -			drm_err(hdmi, "Unable to parse OF data\n");
>>>> +			dev_err(hdmi->dev, "Unable to parse OF data\n");
>>>> 		return ret;
>>>> 	}
>>>>
>>>> @@ -582,7 +582,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
>>>> 	if (IS_ERR(hdmi->phy)) {
>>>> 		ret = PTR_ERR(hdmi->phy);
>>>> 		if (ret != -EPROBE_DEFER)
>>>> -			drm_err(hdmi, "failed to get phy\n");
>>>> +			dev_err(hdmi->dev, "failed to get phy\n");
>>>> 		return ret;
>>>> 	}
>>>>
>>>> diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>>> index f41151d49fca..3d1dddb34603 100644
>>>> --- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>>> +++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>>> @@ -242,7 +242,7 @@ static void dw_hdmi_qp_rk3588_hpd_work(struct work_struct *work)
>>>> 	if (drm) {
>>>> 		changed = drm_helper_hpd_irq_event(drm);
>>>> 		if (changed)
>>>> -			drm_dbg(hdmi, "connector status changed\n");
>>>> +			dev_dbg(hdmi->dev, "connector status changed\n");
>>>> 	}
>>>> }
>>>>
>>>> @@ -472,7 +472,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>>> 		}
>>>> 	}
>>>> 	if (hdmi->port_id < 0) {
>>>> -		drm_err(hdmi, "Failed to match HDMI port ID\n");
>>>> +		dev_err(hdmi->dev, "Failed to match HDMI port ID\n");
>>>> 		return hdmi->port_id;
>>>> 	}
>>>>
>>>> @@ -496,20 +496,20 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>>> 	hdmi->regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
>>>> 						       "rockchip,grf");
>>>> 	if (IS_ERR(hdmi->regmap)) {
>>>> -		drm_err(hdmi, "Unable to get rockchip,grf\n");
>>>> +		dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
>>>> 		return PTR_ERR(hdmi->regmap);
>>>> 	}
>>>>
>>>> 	hdmi->vo_regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
>>>> 							  "rockchip,vo-grf");
>>>> 	if (IS_ERR(hdmi->vo_regmap)) {
>>>> -		drm_err(hdmi, "Unable to get rockchip,vo-grf\n");
>>>> +		dev_err(hdmi->dev, "Unable to get rockchip,vo-grf\n");
>>>> 		return PTR_ERR(hdmi->vo_regmap);
>>>> 	}
>>>>
>>>> 	ret = devm_clk_bulk_get_all_enabled(hdmi->dev, &clks);
>>>> 	if (ret < 0) {
>>>> -		drm_err(hdmi, "Failed to get clocks: %d\n", ret);
>>>> +		dev_err(hdmi->dev, "Failed to get clocks: %d\n", ret);
>>>> 		return ret;
>>>> 	}
>>>>
>>>> @@ -517,7 +517,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>>> 						    GPIOD_OUT_HIGH);
>>>> 	if (IS_ERR(hdmi->enable_gpio)) {
>>>> 		ret = PTR_ERR(hdmi->enable_gpio);
>>>> -		drm_err(hdmi, "Failed to request enable GPIO: %d\n", ret);
>>>> +		dev_err(hdmi->dev, "Failed to request enable GPIO: %d\n", ret);
>>>> 		return ret;
>>>> 	}
>>>>
>>>> @@ -525,7 +525,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>>> 	if (IS_ERR(hdmi->phy)) {
>>>> 		ret = PTR_ERR(hdmi->phy);
>>>> 		if (ret != -EPROBE_DEFER)
>>>> -			drm_err(hdmi, "failed to get phy: %d\n", ret);
>>>> +			dev_err(hdmi->dev, "failed to get phy: %d\n", ret);
>>>> 		return ret;
>>>> 	}
>>>>
>>>> @@ -564,7 +564,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>>> 	connector = drm_bridge_connector_init(drm, encoder);
>>>> 	if (IS_ERR(connector)) {
>>>> 		ret = PTR_ERR(connector);
>>>> -		drm_err(hdmi, "failed to init bridge connector: %d\n", ret);
>>>> +		dev_err(hdmi->dev, "failed to init bridge connector: %d\n", ret);
>>>> 		return ret;
>>>> 	}
>>>>
>>>> -- 
>>>> 2.39.5
>>>>
>>>>
>>>> _______________________________________________
>>>> Linux-rockchip mailing list
>>>> Linux-rockchip@lists.infradead.org
>>>> http://lists.infradead.org/mailman/listinfo/linux-rockchip
>> -- 
>> Jani Nikula, Intel

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


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

* Re:Re: [PATCH 2/5] drm/rockchip: stop passing non struct drm_device to drm_err() and friends
  2025-02-26  8:33         ` [PATCH " Thomas Zimmermann
@ 2025-02-26 10:36           ` Andy Yan
  2025-02-26 11:33             ` Jani Nikula
  0 siblings, 1 reply; 35+ messages in thread
From: Andy Yan @ 2025-02-26 10:36 UTC (permalink / raw)
  To: Thomas Zimmermann
  Cc: Jani Nikula, dri-devel, intel-gfx, Sandy Huang,
	Heiko Stübner, Andy Yan, linux-arm-kernel, linux-rockchip,
	sam, Cristian Ciocaltea


Hi,

在 2025-02-26 16:33:21,"Thomas Zimmermann" <tzimmermann@suse.de> 写道:
>Hi
>
>Am 25.01.25 um 04:53 schrieb Andy Yan:
>>
>> 在 2025-01-24 19:43:07,"Jani Nikula" <jani.nikula@intel.com> 写道:
>>> On Fri, 24 Jan 2025, "Andy Yan" <andyshrk@163.com> wrote:
>>>> Hi,
>>>>
>>>> At 2025-01-23 23:09:09, "Jani Nikula" <jani.nikula@intel.com> wrote:
>>>>> The expectation is that the struct drm_device based logging helpers get
>>>>> passed an actual struct drm_device pointer rather than some random
>>>>> struct pointer where you can dereference the ->dev member.
>>>>>
>>>>> Convert drm_err(hdmi, ...) to dev_err(hdmi->dev, ...). This matches
>>>>> current usage, but drops "[drm] *ERROR*" prefix from logging.
>>>> Frankly, I prefer the original version of the log.
>>>> It is a platform driver, so it should use its own device.
>>>> It is a driver that works in drm subsystem, so it's better to use "[drm] *ERROR*" prefix when logging
>>> If you need to do struct device based logging that is not the same
>>> device as the struct drm_device dev member, you need to use dev_err()
>>> and friends. You can't and must not use drm_err() and friends.
>>>
>>> It's as simple as that.
>>>
>>> The current drm_err(hdmi, ...) usage is simply abuse of the macros, and
>>> must stop.
>> Perhaps when you initially designed this macros, you intended it to accept only drm_device,
>> but your code implementation didn't enforce this restriction at the beginning.
>
>C'mon. Are we really arguing about type safety now?
>
>Patch 5 adds a little getter function that does the type check on the 
>function call's argument.
>
>
>> If that's truly what you intended, I suggest just reverting this commit that converting to use these macros[0],
>> as neither drm_err nor dev_err can maintain consistency with the original log of this driver.
>> Alternatively, as suggested by Sam  in the initial submission of your patch 5 years ago,
>> there should also be a macro similar to drm_dev_info(device *, ..).[1]
>
>DRM code tends to keep a reference to the drm_device somewhere and 
>fetches it if necessary. For this patch, it should be possible to fetch 
>the DRM device from struct rockchip_hdmi easily. Just do
>
>   drm_err(rockchip_hdmi_drm_dev(hdmi), "...");
>
>This would resolve the problem without new logging functions and keep 
>the "[drm]" prefix to the messages.

Yes, this keeps the "[drm]" prefix to the log messages, but it also changed hdmi
device from drm device in the log messages.
For more efficient debugging, it is preferable for log entries to explicitly specify which device generated them,
especially in DRM systems where multiple devices(bridge/encoder) may be present."

And I'm ok with this PATCH. However, I would also like to know your and Jani's opinions on whether we can consider
adding an API similar to drm_dev_info,as Sam suggested before. Of course, this could be left for future implementation
by others.



>
>Best regards
>Thomas
>
>
>>
>>
>> [0]https://lore.kernel.org/linux-rockchip/20240813-dw-hdmi-rockchip-cleanup-v1-1-b3e73b5f4fd6@collabora.com/
>> [1]https://lore.kernel.org/dri-devel/20191212215303.GA11520@ravnborg.org/
>>
>>>
>>> BR,
>>> Jani.
>>>
>>>
>>>>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>>>>
>>>>> ---
>>>>>
>>>>> Looks like it's possible to hunt down the struct drm_device in most of
>>>>> these cases, if that's desired. This was the simplest change.
>>>>>
>>>>> Cc: Sandy Huang <hjc@rock-chips.com>
>>>>> Cc: "Heiko Stübner" <heiko@sntech.de>
>>>>> Cc: Andy Yan <andy.yan@rock-chips.com>
>>>>> Cc: dri-devel@lists.freedesktop.org
>>>>> Cc: linux-arm-kernel@lists.infradead.org
>>>>> Cc: linux-rockchip@lists.infradead.org
>>>>> ---
>>>>> drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c    | 16 ++++++++--------
>>>>> drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 16 ++++++++--------
>>>>> 2 files changed, 16 insertions(+), 16 deletions(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>>>>> index e7a6669c46b0..f737e7d46e66 100644
>>>>> --- a/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>>>>> +++ b/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c
>>>>> @@ -203,7 +203,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>>>>>
>>>>> 	hdmi->regmap = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
>>>>> 	if (IS_ERR(hdmi->regmap)) {
>>>>> -		drm_err(hdmi, "Unable to get rockchip,grf\n");
>>>>> +		dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
>>>>> 		return PTR_ERR(hdmi->regmap);
>>>>> 	}
>>>>>
>>>>> @@ -214,7 +214,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>>>>> 	if (IS_ERR(hdmi->ref_clk)) {
>>>>> 		ret = PTR_ERR(hdmi->ref_clk);
>>>>> 		if (ret != -EPROBE_DEFER)
>>>>> -			drm_err(hdmi, "failed to get reference clock\n");
>>>>> +			dev_err(hdmi->dev, "failed to get reference clock\n");
>>>>> 		return ret;
>>>>> 	}
>>>>>
>>>>> @@ -222,7 +222,7 @@ static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
>>>>> 	if (IS_ERR(hdmi->grf_clk)) {
>>>>> 		ret = PTR_ERR(hdmi->grf_clk);
>>>>> 		if (ret != -EPROBE_DEFER)
>>>>> -			drm_err(hdmi, "failed to get grf clock\n");
>>>>> +			dev_err(hdmi->dev, "failed to get grf clock\n");
>>>>> 		return ret;
>>>>> 	}
>>>>>
>>>>> @@ -302,16 +302,16 @@ static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder)
>>>>>
>>>>> 	ret = clk_prepare_enable(hdmi->grf_clk);
>>>>> 	if (ret < 0) {
>>>>> -		drm_err(hdmi, "failed to enable grfclk %d\n", ret);
>>>>> +		dev_err(hdmi->dev, "failed to enable grfclk %d\n", ret);
>>>>> 		return;
>>>>> 	}
>>>>>
>>>>> 	ret = regmap_write(hdmi->regmap, hdmi->chip_data->lcdsel_grf_reg, val);
>>>>> 	if (ret != 0)
>>>>> -		drm_err(hdmi, "Could not write to GRF: %d\n", ret);
>>>>> +		dev_err(hdmi->dev, "Could not write to GRF: %d\n", ret);
>>>>>
>>>>> 	clk_disable_unprepare(hdmi->grf_clk);
>>>>> -	drm_dbg(hdmi, "vop %s output to hdmi\n", ret ? "LIT" : "BIG");
>>>>> +	dev_dbg(hdmi->dev, "vop %s output to hdmi\n", ret ? "LIT" : "BIG");
>>>>> }
>>>>>
>>>>> static int
>>>>> @@ -574,7 +574,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
>>>>> 	ret = rockchip_hdmi_parse_dt(hdmi);
>>>>> 	if (ret) {
>>>>> 		if (ret != -EPROBE_DEFER)
>>>>> -			drm_err(hdmi, "Unable to parse OF data\n");
>>>>> +			dev_err(hdmi->dev, "Unable to parse OF data\n");
>>>>> 		return ret;
>>>>> 	}
>>>>>
>>>>> @@ -582,7 +582,7 @@ static int dw_hdmi_rockchip_bind(struct device *dev, struct device *master,
>>>>> 	if (IS_ERR(hdmi->phy)) {
>>>>> 		ret = PTR_ERR(hdmi->phy);
>>>>> 		if (ret != -EPROBE_DEFER)
>>>>> -			drm_err(hdmi, "failed to get phy\n");
>>>>> +			dev_err(hdmi->dev, "failed to get phy\n");
>>>>> 		return ret;
>>>>> 	}
>>>>>
>>>>> diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>>>> index f41151d49fca..3d1dddb34603 100644
>>>>> --- a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>>>> +++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c
>>>>> @@ -242,7 +242,7 @@ static void dw_hdmi_qp_rk3588_hpd_work(struct work_struct *work)
>>>>> 	if (drm) {
>>>>> 		changed = drm_helper_hpd_irq_event(drm);
>>>>> 		if (changed)
>>>>> -			drm_dbg(hdmi, "connector status changed\n");
>>>>> +			dev_dbg(hdmi->dev, "connector status changed\n");
>>>>> 	}
>>>>> }
>>>>>
>>>>> @@ -472,7 +472,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>>>> 		}
>>>>> 	}
>>>>> 	if (hdmi->port_id < 0) {
>>>>> -		drm_err(hdmi, "Failed to match HDMI port ID\n");
>>>>> +		dev_err(hdmi->dev, "Failed to match HDMI port ID\n");
>>>>> 		return hdmi->port_id;
>>>>> 	}
>>>>>
>>>>> @@ -496,20 +496,20 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>>>> 	hdmi->regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
>>>>> 						       "rockchip,grf");
>>>>> 	if (IS_ERR(hdmi->regmap)) {
>>>>> -		drm_err(hdmi, "Unable to get rockchip,grf\n");
>>>>> +		dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
>>>>> 		return PTR_ERR(hdmi->regmap);
>>>>> 	}
>>>>>
>>>>> 	hdmi->vo_regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
>>>>> 							  "rockchip,vo-grf");
>>>>> 	if (IS_ERR(hdmi->vo_regmap)) {
>>>>> -		drm_err(hdmi, "Unable to get rockchip,vo-grf\n");
>>>>> +		dev_err(hdmi->dev, "Unable to get rockchip,vo-grf\n");
>>>>> 		return PTR_ERR(hdmi->vo_regmap);
>>>>> 	}
>>>>>
>>>>> 	ret = devm_clk_bulk_get_all_enabled(hdmi->dev, &clks);
>>>>> 	if (ret < 0) {
>>>>> -		drm_err(hdmi, "Failed to get clocks: %d\n", ret);
>>>>> +		dev_err(hdmi->dev, "Failed to get clocks: %d\n", ret);
>>>>> 		return ret;
>>>>> 	}
>>>>>
>>>>> @@ -517,7 +517,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>>>> 						    GPIOD_OUT_HIGH);
>>>>> 	if (IS_ERR(hdmi->enable_gpio)) {
>>>>> 		ret = PTR_ERR(hdmi->enable_gpio);
>>>>> -		drm_err(hdmi, "Failed to request enable GPIO: %d\n", ret);
>>>>> +		dev_err(hdmi->dev, "Failed to request enable GPIO: %d\n", ret);
>>>>> 		return ret;
>>>>> 	}
>>>>>
>>>>> @@ -525,7 +525,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>>>> 	if (IS_ERR(hdmi->phy)) {
>>>>> 		ret = PTR_ERR(hdmi->phy);
>>>>> 		if (ret != -EPROBE_DEFER)
>>>>> -			drm_err(hdmi, "failed to get phy: %d\n", ret);
>>>>> +			dev_err(hdmi->dev, "failed to get phy: %d\n", ret);
>>>>> 		return ret;
>>>>> 	}
>>>>>
>>>>> @@ -564,7 +564,7 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
>>>>> 	connector = drm_bridge_connector_init(drm, encoder);
>>>>> 	if (IS_ERR(connector)) {
>>>>> 		ret = PTR_ERR(connector);
>>>>> -		drm_err(hdmi, "failed to init bridge connector: %d\n", ret);
>>>>> +		dev_err(hdmi->dev, "failed to init bridge connector: %d\n", ret);
>>>>> 		return ret;
>>>>> 	}
>>>>>
>>>>> -- 
>>>>> 2.39.5
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Linux-rockchip mailing list
>>>>> Linux-rockchip@lists.infradead.org
>>>>> http://lists.infradead.org/mailman/listinfo/linux-rockchip
>>> -- 
>>> Jani Nikula, Intel
>
>-- 
>--
>Thomas Zimmermann
>Graphics Driver Developer
>SUSE Software Solutions Germany GmbH
>Frankenstrasse 146, 90461 Nuernberg, Germany
>GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
>HRB 36809 (AG Nuernberg)
>

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

* Re:Re: [PATCH 2/5] drm/rockchip: stop passing non struct drm_device to drm_err() and friends
  2025-02-26 10:36           ` Andy Yan
@ 2025-02-26 11:33             ` Jani Nikula
  0 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-02-26 11:33 UTC (permalink / raw)
  To: Andy Yan, Thomas Zimmermann
  Cc: dri-devel, intel-gfx, Sandy Huang, Heiko Stübner, Andy Yan,
	linux-arm-kernel, linux-rockchip, sam, Cristian Ciocaltea

On Wed, 26 Feb 2025, "Andy Yan" <andyshrk@163.com> wrote:
> Hi,
>
> 在 2025-02-26 16:33:21,"Thomas Zimmermann" <tzimmermann@suse.de> 写道:
>>Hi
>>
>>Am 25.01.25 um 04:53 schrieb Andy Yan:
>>>
>>> 在 2025-01-24 19:43:07,"Jani Nikula" <jani.nikula@intel.com> 写道:
>>>> On Fri, 24 Jan 2025, "Andy Yan" <andyshrk@163.com> wrote:
>>>>> Hi,
>>>>>
>>>>> At 2025-01-23 23:09:09, "Jani Nikula" <jani.nikula@intel.com> wrote:
>>>>>> The expectation is that the struct drm_device based logging helpers get
>>>>>> passed an actual struct drm_device pointer rather than some random
>>>>>> struct pointer where you can dereference the ->dev member.
>>>>>>
>>>>>> Convert drm_err(hdmi, ...) to dev_err(hdmi->dev, ...). This matches
>>>>>> current usage, but drops "[drm] *ERROR*" prefix from logging.
>>>>> Frankly, I prefer the original version of the log.
>>>>> It is a platform driver, so it should use its own device.
>>>>> It is a driver that works in drm subsystem, so it's better to use "[drm] *ERROR*" prefix when logging
>>>> If you need to do struct device based logging that is not the same
>>>> device as the struct drm_device dev member, you need to use dev_err()
>>>> and friends. You can't and must not use drm_err() and friends.
>>>>
>>>> It's as simple as that.
>>>>
>>>> The current drm_err(hdmi, ...) usage is simply abuse of the macros, and
>>>> must stop.
>>> Perhaps when you initially designed this macros, you intended it to accept only drm_device,
>>> but your code implementation didn't enforce this restriction at the beginning.
>>
>>C'mon. Are we really arguing about type safety now?
>>
>>Patch 5 adds a little getter function that does the type check on the 
>>function call's argument.
>>
>>
>>> If that's truly what you intended, I suggest just reverting this commit that converting to use these macros[0],
>>> as neither drm_err nor dev_err can maintain consistency with the original log of this driver.
>>> Alternatively, as suggested by Sam  in the initial submission of your patch 5 years ago,
>>> there should also be a macro similar to drm_dev_info(device *, ..).[1]
>>
>>DRM code tends to keep a reference to the drm_device somewhere and 
>>fetches it if necessary. For this patch, it should be possible to fetch 
>>the DRM device from struct rockchip_hdmi easily. Just do
>>
>>   drm_err(rockchip_hdmi_drm_dev(hdmi), "...");
>>
>>This would resolve the problem without new logging functions and keep 
>>the "[drm]" prefix to the messages.
>
> Yes, this keeps the "[drm]" prefix to the log messages, but it also changed hdmi
> device from drm device in the log messages.
> For more efficient debugging, it is preferable for log entries to explicitly specify which device generated them,
> especially in DRM systems where multiple devices(bridge/encoder) may be present."
>
> And I'm ok with this PATCH. However, I would also like to know your and Jani's opinions on whether we can consider
> adding an API similar to drm_dev_info,as Sam suggested before. Of course, this could be left for future implementation
> by others.

I'm not at all thrilled about adding loads of variations of drm specific
debug macros. They just multiply.

The way around that would be to use _Generic() to allow passing either
struct drm_device (which would use drm->dev) or a more specific struct
device to be used for dev based logging. I'd be supportive of that.

However, this patch series is a dependency for implementing generics at
a later time. I'd like to start here instead of piling on more work.

Furthermore, there's been talk about drm display object based
logging. The generics could later be expanded to allow for example:

	drm_err(connector, "Fail\n");

to translate to:

	dev_err(connector->dev->dev, "[CONNECTOR:%d:%s] Fail\n",
		connector->base.id, connector->name);

This would simplify a lot of connector based logging. Similarly for
other objects.

BR,
Jani.


-- 
Jani Nikula, Intel

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

* Re: [PATCH 0/5] drm: strict type checking for drm_device based logging helpers
  2025-01-23 15:09 [PATCH 0/5] drm: strict type checking for drm_device based logging helpers Jani Nikula
                   ` (7 preceding siblings ...)
  2025-01-24  8:26 ` ✗ i915.CI.Full: failure " Patchwork
@ 2025-03-04 15:07 ` Jani Nikula
  8 siblings, 0 replies; 35+ messages in thread
From: Jani Nikula @ 2025-03-04 15:07 UTC (permalink / raw)
  To: dri-devel; +Cc: intel-gfx

On Thu, 23 Jan 2025, Jani Nikula <jani.nikula@intel.com> wrote:
> Fix all cases that pass something other than struct drm_device to the
> drm_device based logging helpers, and add strict type checking.
>
> Gustavo Sousa (1):
>   drm/print: Include drm_device.h

This was pushed earlier, independently.

>
> Jani Nikula (4):
>   drm/mipi-dsi: stop passing non struct drm_device to drm_err() and
>     friends
>   drm/rockchip: stop passing non struct drm_device to drm_err() and
>     friends
>   drm/sched: stop passing non struct drm_device to drm_err() and friends
>   drm/print: require struct drm_device for drm_err() and friends

Series pushed to drm-misc-next, thanks for the reviews.

BR,
Jani.

>
>  drivers/gpu/drm/drm_mipi_dsi.c                | 12 +++---
>  drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c   | 16 +++----
>  .../gpu/drm/rockchip/dw_hdmi_qp-rockchip.c    | 16 +++----
>  drivers/gpu/drm/scheduler/sched_entity.c      |  2 +-
>  drivers/gpu/drm/scheduler/sched_main.c        | 20 +++++----
>  include/drm/drm_print.h                       | 42 +++++++++++--------
>  6 files changed, 58 insertions(+), 50 deletions(-)

-- 
Jani Nikula, Intel

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

* Re: [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends
  2025-01-23 15:09 ` [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends Jani Nikula
  2025-02-24 14:48   ` Louis Chauvet
  2025-02-25 16:52   ` Luca Ceresoli
@ 2025-05-15 20:18   ` Bill Wendling
  2025-05-15 23:52     ` Bill Wendling
  2025-05-16  9:48     ` Jani Nikula
  2 siblings, 2 replies; 35+ messages in thread
From: Bill Wendling @ 2025-05-15 20:18 UTC (permalink / raw)
  To: Jani Nikula, dri-devel
  Cc: intel-gfx, gustavo.sousa, maarten.lankhorst, mripard, tzimmermann,
	airlied, simona, linux-kernel, kees

On 1/23/25 7:09 AM, Jani Nikula wrote:
> The expectation is that the struct drm_device based logging helpers get
> passed an actual struct drm_device pointer rather than some random
> struct pointer where you can dereference the ->dev member.
> 
> Add a static inline helper to convert struct drm_device to struct
> device, with the main benefit being the type checking of the macro
> argument.
> 
> As a side effect, this also reduces macro argument double references.
> 
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
>   include/drm/drm_print.h | 41 +++++++++++++++++++++++------------------
>   1 file changed, 23 insertions(+), 18 deletions(-)
> 
> diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h
> index 9732f514566d..f31eba1c7cab 100644
> --- a/include/drm/drm_print.h
> +++ b/include/drm/drm_print.h
> @@ -584,9 +584,15 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
>    * Prefer drm_device based logging over device or prink based logging.
>    */
>   
> +/* Helper to enforce struct drm_device type */
> +static inline struct device *__drm_to_dev(const struct drm_device *drm)
> +{
> +	return drm ? drm->dev : NULL;
> +}
> +
>   /* Helper for struct drm_device based logging. */
>   #define __drm_printk(drm, level, type, fmt, ...)			\
> -	dev_##level##type((drm) ? (drm)->dev : NULL, "[drm] " fmt, ##__VA_ARGS__)
> +	dev_##level##type(__drm_to_dev(drm), "[drm] " fmt, ##__VA_ARGS__)
>   
>   
>   #define drm_info(drm, fmt, ...)					\
> @@ -620,25 +626,25 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
>   
>   
>   #define drm_dbg_core(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_CORE, fmt, ##__VA_ARGS__)
> -#define drm_dbg_driver(drm, fmt, ...)						\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_CORE, fmt, ##__VA_ARGS__)
> +#define drm_dbg_driver(drm, fmt, ...)					\
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
>   #define drm_dbg_kms(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_KMS, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_KMS, fmt, ##__VA_ARGS__)
>   #define drm_dbg_prime(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_PRIME, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_PRIME, fmt, ##__VA_ARGS__)
>   #define drm_dbg_atomic(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
>   #define drm_dbg_vbl(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_VBL, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_VBL, fmt, ##__VA_ARGS__)
>   #define drm_dbg_state(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_STATE, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_STATE, fmt, ##__VA_ARGS__)
>   #define drm_dbg_lease(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_LEASE, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_LEASE, fmt, ##__VA_ARGS__)
>   #define drm_dbg_dp(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DP, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DP, fmt, ##__VA_ARGS__)
>   #define drm_dbg_drmres(drm, fmt, ...)					\
> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DRMRES, fmt, ##__VA_ARGS__)
> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DRMRES, fmt, ##__VA_ARGS__)
>   
>   #define drm_dbg(drm, fmt, ...)	drm_dbg_driver(drm, fmt, ##__VA_ARGS__)
>   
> @@ -727,10 +733,9 @@ void __drm_err(const char *format, ...);
>   #define __DRM_DEFINE_DBG_RATELIMITED(category, drm, fmt, ...)					\
>   ({												\
>   	static DEFINE_RATELIMIT_STATE(rs_, DEFAULT_RATELIMIT_INTERVAL, DEFAULT_RATELIMIT_BURST);\
> -	const struct drm_device *drm_ = (drm);							\
>   												\
>   	if (drm_debug_enabled(DRM_UT_ ## category) && __ratelimit(&rs_))			\
> -		drm_dev_printk(drm_ ? drm_->dev : NULL, KERN_DEBUG, fmt, ## __VA_ARGS__);	\
> +		drm_dev_printk(__drm_to_dev(drm), KERN_DEBUG, fmt, ## __VA_ARGS__);		\
>   })
>   
>   #define drm_dbg_ratelimited(drm, fmt, ...) \
> @@ -752,13 +757,13 @@ void __drm_err(const char *format, ...);
>   /* Helper for struct drm_device based WARNs */
>   #define drm_WARN(drm, condition, format, arg...)			\
>   	WARN(condition, "%s %s: [drm] " format,				\
> -			dev_driver_string((drm)->dev),			\
> -			dev_name((drm)->dev), ## arg)
> +			dev_driver_string(__drm_to_dev(drm)),		\
> +			dev_name(__drm_to_dev(drm)), ## arg)
>   
>   #define drm_WARN_ONCE(drm, condition, format, arg...)			\
>   	WARN_ONCE(condition, "%s %s: [drm] " format,			\
> -			dev_driver_string((drm)->dev),			\
> -			dev_name((drm)->dev), ## arg)
> +			dev_driver_string(__drm_to_dev(drm)),		\
> +			dev_name(__drm_to_dev(drm)), ## arg)
>
Hi Jani,

These two changes introduce undefined behavior into these macros. The final
code generation becomes this (from 'bxt_port_to_phy_channel'):

	__warn_printk("%s %s: [drm] " "PHY not found for PORT %c",
		      dev_driver_string(__drm_to_dev(display->drm)),
		      dev_name(__drm_to_dev(display->drm)),
		      (port + 'A'));

The issue lies in 'dev_name(__drm_to_dev(display->drm))'. After inlining, it
becomes this (pseudo code):

	struct device *device = display->drm ? display->drm->dev : NULL;
	const char *name = device->init_name ? device->init_name
					     : kobject_name(&device->kobj);

	__warn_printk("%s %s: [drm] " "PHY not found for PORT %c",
		      dev_driver_string(device), name, (port + 'A'));

The issue, of course, is that the 'device' may be NULL when attempting 
to get
'device->init_name'. The compiler sees this as undefined behavior, which may
lead to unexpected outcomes, especially with Clang where paths 
determined to be
undefined are removed entirely under certain conditions.

(Note, I'm working on making this behavior less draconian by adopting a GCC
pass, but this will take time to filter out to Linux devs.)

Regards,
-bw


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

* Re: [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends
  2025-05-15 20:18   ` Bill Wendling
@ 2025-05-15 23:52     ` Bill Wendling
  2025-05-16  9:48     ` Jani Nikula
  1 sibling, 0 replies; 35+ messages in thread
From: Bill Wendling @ 2025-05-15 23:52 UTC (permalink / raw)
  To: Jani Nikula, dri-devel
  Cc: intel-gfx, gustavo.sousa, maarten.lankhorst, mripard, tzimmermann,
	airlied, simona, linux-kernel, kees

On Thu, May 15, 2025 at 1:18 PM Bill Wendling <isanbard@gmail.com> wrote:
> On 1/23/25 7:09 AM, Jani Nikula wrote:
> > The expectation is that the struct drm_device based logging helpers get
> > passed an actual struct drm_device pointer rather than some random
> > struct pointer where you can dereference the ->dev member.
> >
> > Add a static inline helper to convert struct drm_device to struct
> > device, with the main benefit being the type checking of the macro
> > argument.
> >
> > As a side effect, this also reduces macro argument double references.
> >
> > Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> > ---
> >   include/drm/drm_print.h | 41 +++++++++++++++++++++++------------------
> >   1 file changed, 23 insertions(+), 18 deletions(-)
> >
> > diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h
> > index 9732f514566d..f31eba1c7cab 100644
> > --- a/include/drm/drm_print.h
> > +++ b/include/drm/drm_print.h
> > @@ -584,9 +584,15 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
> >    * Prefer drm_device based logging over device or prink based logging.
> >    */
> >
> > +/* Helper to enforce struct drm_device type */
> > +static inline struct device *__drm_to_dev(const struct drm_device *drm)
> > +{
> > +     return drm ? drm->dev : NULL;
> > +}
> > +
> >   /* Helper for struct drm_device based logging. */
> >   #define __drm_printk(drm, level, type, fmt, ...)                    \
> > -     dev_##level##type((drm) ? (drm)->dev : NULL, "[drm] " fmt, ##__VA_ARGS__)
> > +     dev_##level##type(__drm_to_dev(drm), "[drm] " fmt, ##__VA_ARGS__)
> >
> >
> >   #define drm_info(drm, fmt, ...)                                     \
> > @@ -620,25 +626,25 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
> >
> >
> >   #define drm_dbg_core(drm, fmt, ...)                                 \
> > -     drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_CORE, fmt, ##__VA_ARGS__)
> > -#define drm_dbg_driver(drm, fmt, ...)                                                \
> > -     drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
> > +     drm_dev_dbg(__drm_to_dev(drm), DRM_UT_CORE, fmt, ##__VA_ARGS__)
> > +#define drm_dbg_driver(drm, fmt, ...)                                        \
> > +     drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
> >   #define drm_dbg_kms(drm, fmt, ...)                                  \
> > -     drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_KMS, fmt, ##__VA_ARGS__)
> > +     drm_dev_dbg(__drm_to_dev(drm), DRM_UT_KMS, fmt, ##__VA_ARGS__)
> >   #define drm_dbg_prime(drm, fmt, ...)                                        \
> > -     drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_PRIME, fmt, ##__VA_ARGS__)
> > +     drm_dev_dbg(__drm_to_dev(drm), DRM_UT_PRIME, fmt, ##__VA_ARGS__)
> >   #define drm_dbg_atomic(drm, fmt, ...)                                       \
> > -     drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
> > +     drm_dev_dbg(__drm_to_dev(drm), DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
> >   #define drm_dbg_vbl(drm, fmt, ...)                                  \
> > -     drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_VBL, fmt, ##__VA_ARGS__)
> > +     drm_dev_dbg(__drm_to_dev(drm), DRM_UT_VBL, fmt, ##__VA_ARGS__)
> >   #define drm_dbg_state(drm, fmt, ...)                                        \
> > -     drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_STATE, fmt, ##__VA_ARGS__)
> > +     drm_dev_dbg(__drm_to_dev(drm), DRM_UT_STATE, fmt, ##__VA_ARGS__)
> >   #define drm_dbg_lease(drm, fmt, ...)                                        \
> > -     drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_LEASE, fmt, ##__VA_ARGS__)
> > +     drm_dev_dbg(__drm_to_dev(drm), DRM_UT_LEASE, fmt, ##__VA_ARGS__)
> >   #define drm_dbg_dp(drm, fmt, ...)                                   \
> > -     drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DP, fmt, ##__VA_ARGS__)
> > +     drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DP, fmt, ##__VA_ARGS__)
> >   #define drm_dbg_drmres(drm, fmt, ...)                                       \
> > -     drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DRMRES, fmt, ##__VA_ARGS__)
> > +     drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DRMRES, fmt, ##__VA_ARGS__)
> >
> >   #define drm_dbg(drm, fmt, ...)      drm_dbg_driver(drm, fmt, ##__VA_ARGS__)
> >
> > @@ -727,10 +733,9 @@ void __drm_err(const char *format, ...);
> >   #define __DRM_DEFINE_DBG_RATELIMITED(category, drm, fmt, ...)                                       \
> >   ({                                                                                          \
> >       static DEFINE_RATELIMIT_STATE(rs_, DEFAULT_RATELIMIT_INTERVAL, DEFAULT_RATELIMIT_BURST);\
> > -     const struct drm_device *drm_ = (drm);                                                  \
> >                                                                                               \
> >       if (drm_debug_enabled(DRM_UT_ ## category) && __ratelimit(&rs_))                        \
> > -             drm_dev_printk(drm_ ? drm_->dev : NULL, KERN_DEBUG, fmt, ## __VA_ARGS__);       \
> > +             drm_dev_printk(__drm_to_dev(drm), KERN_DEBUG, fmt, ## __VA_ARGS__);             \
> >   })
> >
> >   #define drm_dbg_ratelimited(drm, fmt, ...) \
> > @@ -752,13 +757,13 @@ void __drm_err(const char *format, ...);
> >   /* Helper for struct drm_device based WARNs */
> >   #define drm_WARN(drm, condition, format, arg...)                    \
> >       WARN(condition, "%s %s: [drm] " format,                         \
> > -                     dev_driver_string((drm)->dev),                  \
> > -                     dev_name((drm)->dev), ## arg)
> > +                     dev_driver_string(__drm_to_dev(drm)),           \
> > +                     dev_name(__drm_to_dev(drm)), ## arg)
> >
> >   #define drm_WARN_ONCE(drm, condition, format, arg...)                       \
> >       WARN_ONCE(condition, "%s %s: [drm] " format,                    \
> > -                     dev_driver_string((drm)->dev),                  \
> > -                     dev_name((drm)->dev), ## arg)
> > +                     dev_driver_string(__drm_to_dev(drm)),           \
> > +                     dev_name(__drm_to_dev(drm)), ## arg)
> >
> Hi Jani,
>
> These two changes introduce undefined behavior into these macros. The final
> code generation becomes this (from 'bxt_port_to_phy_channel'):
>
>         __warn_printk("%s %s: [drm] " "PHY not found for PORT %c",
>                       dev_driver_string(__drm_to_dev(display->drm)),
>                       dev_name(__drm_to_dev(display->drm)),
>                       (port + 'A'));
>
> The issue lies in 'dev_name(__drm_to_dev(display->drm))'. After inlining, it
> becomes this (pseudo code):
>
>         struct device *device = display->drm ? display->drm->dev : NULL;
>         const char *name = device->init_name ? device->init_name
>                                              : kobject_name(&device->kobj);
>
>         __warn_printk("%s %s: [drm] " "PHY not found for PORT %c",
>                       dev_driver_string(device), name, (port + 'A'));
>
> The issue, of course, is that the 'device' may be NULL when attempting
> to get
> 'device->init_name'. The compiler sees this as undefined behavior, which may
> lead to unexpected outcomes, especially with Clang where paths
> determined to be
> undefined are removed entirely under certain conditions.
>
> (Note, I'm working on making this behavior less draconian by adopting a GCC
> pass, but this will take time to filter out to Linux devs.)
>
I potential fix for this would be something like this (untested). I'm
not familiar with how 'dev_name' is used to know whether or not this
could cause issues:

diff --git a/include/linux/device.h b/include/linux/device.h
index 79e49fe494b7..ea20d439fe8e 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -778,6 +778,9 @@ static inline bool device_iommu_mapped(struct device *dev)
  */
 static inline const char *dev_name(const struct device *dev)
 {
+       if (!dev)
+               return "default";
+
        /* Use the init name until the kobject becomes available */
        if (dev->init_name)
                return dev->init_name;

-bw

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

* Re: [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends
  2025-05-15 20:18   ` Bill Wendling
  2025-05-15 23:52     ` Bill Wendling
@ 2025-05-16  9:48     ` Jani Nikula
  2025-05-16 20:41       ` Bill Wendling
  1 sibling, 1 reply; 35+ messages in thread
From: Jani Nikula @ 2025-05-16  9:48 UTC (permalink / raw)
  To: Bill Wendling, dri-devel
  Cc: intel-gfx, gustavo.sousa, maarten.lankhorst, mripard, tzimmermann,
	airlied, simona, linux-kernel, kees

On Thu, 15 May 2025, Bill Wendling <isanbard@gmail.com> wrote:
> On 1/23/25 7:09 AM, Jani Nikula wrote:
>> The expectation is that the struct drm_device based logging helpers get
>> passed an actual struct drm_device pointer rather than some random
>> struct pointer where you can dereference the ->dev member.
>> 
>> Add a static inline helper to convert struct drm_device to struct
>> device, with the main benefit being the type checking of the macro
>> argument.
>> 
>> As a side effect, this also reduces macro argument double references.
>> 
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> ---
>>   include/drm/drm_print.h | 41 +++++++++++++++++++++++------------------
>>   1 file changed, 23 insertions(+), 18 deletions(-)
>> 
>> diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h
>> index 9732f514566d..f31eba1c7cab 100644
>> --- a/include/drm/drm_print.h
>> +++ b/include/drm/drm_print.h
>> @@ -584,9 +584,15 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
>>    * Prefer drm_device based logging over device or prink based logging.
>>    */
>>   
>> +/* Helper to enforce struct drm_device type */
>> +static inline struct device *__drm_to_dev(const struct drm_device *drm)
>> +{
>> +	return drm ? drm->dev : NULL;
>> +}
>> +
>>   /* Helper for struct drm_device based logging. */
>>   #define __drm_printk(drm, level, type, fmt, ...)			\
>> -	dev_##level##type((drm) ? (drm)->dev : NULL, "[drm] " fmt, ##__VA_ARGS__)
>> +	dev_##level##type(__drm_to_dev(drm), "[drm] " fmt, ##__VA_ARGS__)
>>   
>>   
>>   #define drm_info(drm, fmt, ...)					\
>> @@ -620,25 +626,25 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
>>   
>>   
>>   #define drm_dbg_core(drm, fmt, ...)					\
>> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_CORE, fmt, ##__VA_ARGS__)
>> -#define drm_dbg_driver(drm, fmt, ...)						\
>> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
>> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_CORE, fmt, ##__VA_ARGS__)
>> +#define drm_dbg_driver(drm, fmt, ...)					\
>> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
>>   #define drm_dbg_kms(drm, fmt, ...)					\
>> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_KMS, fmt, ##__VA_ARGS__)
>> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_KMS, fmt, ##__VA_ARGS__)
>>   #define drm_dbg_prime(drm, fmt, ...)					\
>> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_PRIME, fmt, ##__VA_ARGS__)
>> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_PRIME, fmt, ##__VA_ARGS__)
>>   #define drm_dbg_atomic(drm, fmt, ...)					\
>> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
>> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
>>   #define drm_dbg_vbl(drm, fmt, ...)					\
>> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_VBL, fmt, ##__VA_ARGS__)
>> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_VBL, fmt, ##__VA_ARGS__)
>>   #define drm_dbg_state(drm, fmt, ...)					\
>> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_STATE, fmt, ##__VA_ARGS__)
>> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_STATE, fmt, ##__VA_ARGS__)
>>   #define drm_dbg_lease(drm, fmt, ...)					\
>> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_LEASE, fmt, ##__VA_ARGS__)
>> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_LEASE, fmt, ##__VA_ARGS__)
>>   #define drm_dbg_dp(drm, fmt, ...)					\
>> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DP, fmt, ##__VA_ARGS__)
>> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DP, fmt, ##__VA_ARGS__)
>>   #define drm_dbg_drmres(drm, fmt, ...)					\
>> -	drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DRMRES, fmt, ##__VA_ARGS__)
>> +	drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DRMRES, fmt, ##__VA_ARGS__)
>>   
>>   #define drm_dbg(drm, fmt, ...)	drm_dbg_driver(drm, fmt, ##__VA_ARGS__)
>>   
>> @@ -727,10 +733,9 @@ void __drm_err(const char *format, ...);
>>   #define __DRM_DEFINE_DBG_RATELIMITED(category, drm, fmt, ...)					\
>>   ({												\
>>   	static DEFINE_RATELIMIT_STATE(rs_, DEFAULT_RATELIMIT_INTERVAL, DEFAULT_RATELIMIT_BURST);\
>> -	const struct drm_device *drm_ = (drm);							\
>>   												\
>>   	if (drm_debug_enabled(DRM_UT_ ## category) && __ratelimit(&rs_))			\
>> -		drm_dev_printk(drm_ ? drm_->dev : NULL, KERN_DEBUG, fmt, ## __VA_ARGS__);	\
>> +		drm_dev_printk(__drm_to_dev(drm), KERN_DEBUG, fmt, ## __VA_ARGS__);		\
>>   })
>>   
>>   #define drm_dbg_ratelimited(drm, fmt, ...) \
>> @@ -752,13 +757,13 @@ void __drm_err(const char *format, ...);
>>   /* Helper for struct drm_device based WARNs */
>>   #define drm_WARN(drm, condition, format, arg...)			\
>>   	WARN(condition, "%s %s: [drm] " format,				\
>> -			dev_driver_string((drm)->dev),			\
>> -			dev_name((drm)->dev), ## arg)
>> +			dev_driver_string(__drm_to_dev(drm)),		\
>> +			dev_name(__drm_to_dev(drm)), ## arg)
>>   
>>   #define drm_WARN_ONCE(drm, condition, format, arg...)			\
>>   	WARN_ONCE(condition, "%s %s: [drm] " format,			\
>> -			dev_driver_string((drm)->dev),			\
>> -			dev_name((drm)->dev), ## arg)
>> +			dev_driver_string(__drm_to_dev(drm)),		\
>> +			dev_name(__drm_to_dev(drm)), ## arg)
>>
> Hi Jani,
>
> These two changes introduce undefined behavior into these macros. The final
> code generation becomes this (from 'bxt_port_to_phy_channel'):
>
> 	__warn_printk("%s %s: [drm] " "PHY not found for PORT %c",
> 		      dev_driver_string(__drm_to_dev(display->drm)),
> 		      dev_name(__drm_to_dev(display->drm)),
> 		      (port + 'A'));
>
> The issue lies in 'dev_name(__drm_to_dev(display->drm))'. After inlining, it
> becomes this (pseudo code):
>
> 	struct device *device = display->drm ? display->drm->dev : NULL;
> 	const char *name = device->init_name ? device->init_name
> 					     : kobject_name(&device->kobj);
>
> 	__warn_printk("%s %s: [drm] " "PHY not found for PORT %c",
> 		      dev_driver_string(device), name, (port + 'A'));
>
> The issue, of course, is that the 'device' may be NULL when attempting 
> to get
> 'device->init_name'. The compiler sees this as undefined behavior, which may
> lead to unexpected outcomes, especially with Clang where paths 
> determined to be
> undefined are removed entirely under certain conditions.

Would it be better to just revert the drm_WARN() and drm_WARN_ONCE()
macros to use (drm)->dev directly?

It's not ideal, but as the quick fix.

I don't think adding the check in dev_name() would go down well, as
there are roughly 5k users of it, and feels like unnecessary code size
bloat.


BR,
Jani.



>
> (Note, I'm working on making this behavior less draconian by adopting a GCC
> pass, but this will take time to filter out to Linux devs.)
>
> Regards,
> -bw
>

-- 
Jani Nikula, Intel

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

* Re: [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends
  2025-05-16  9:48     ` Jani Nikula
@ 2025-05-16 20:41       ` Bill Wendling
  0 siblings, 0 replies; 35+ messages in thread
From: Bill Wendling @ 2025-05-16 20:41 UTC (permalink / raw)
  To: Jani Nikula
  Cc: dri-devel, intel-gfx, gustavo.sousa, maarten.lankhorst, mripard,
	tzimmermann, airlied, simona, linux-kernel, kees

On Fri, May 16, 2025 at 2:48 AM Jani Nikula <jani.nikula@intel.com> wrote:
> On Thu, 15 May 2025, Bill Wendling <isanbard@gmail.com> wrote:
> > On 1/23/25 7:09 AM, Jani Nikula wrote:
> >> The expectation is that the struct drm_device based logging helpers get
> >> passed an actual struct drm_device pointer rather than some random
> >> struct pointer where you can dereference the ->dev member.
> >>
> >> Add a static inline helper to convert struct drm_device to struct
> >> device, with the main benefit being the type checking of the macro
> >> argument.
> >>
> >> As a side effect, this also reduces macro argument double references.
> >>
> >> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> >> ---
> >>   include/drm/drm_print.h | 41 +++++++++++++++++++++++------------------
> >>   1 file changed, 23 insertions(+), 18 deletions(-)
> >>
> >> diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h
> >> index 9732f514566d..f31eba1c7cab 100644
> >> --- a/include/drm/drm_print.h
> >> +++ b/include/drm/drm_print.h
> >> @@ -584,9 +584,15 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
> >>    * Prefer drm_device based logging over device or prink based logging.
> >>    */
> >>
> >> +/* Helper to enforce struct drm_device type */
> >> +static inline struct device *__drm_to_dev(const struct drm_device *drm)
> >> +{
> >> +    return drm ? drm->dev : NULL;
> >> +}
> >> +
> >>   /* Helper for struct drm_device based logging. */
> >>   #define __drm_printk(drm, level, type, fmt, ...)                   \
> >> -    dev_##level##type((drm) ? (drm)->dev : NULL, "[drm] " fmt, ##__VA_ARGS__)
> >> +    dev_##level##type(__drm_to_dev(drm), "[drm] " fmt, ##__VA_ARGS__)
> >>
> >>
> >>   #define drm_info(drm, fmt, ...)                                    \
> >> @@ -620,25 +626,25 @@ void __drm_dev_dbg(struct _ddebug *desc, const struct device *dev,
> >>
> >>
> >>   #define drm_dbg_core(drm, fmt, ...)                                        \
> >> -    drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_CORE, fmt, ##__VA_ARGS__)
> >> -#define drm_dbg_driver(drm, fmt, ...)                                               \
> >> -    drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
> >> +    drm_dev_dbg(__drm_to_dev(drm), DRM_UT_CORE, fmt, ##__VA_ARGS__)
> >> +#define drm_dbg_driver(drm, fmt, ...)                                       \
> >> +    drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DRIVER, fmt, ##__VA_ARGS__)
> >>   #define drm_dbg_kms(drm, fmt, ...)                                 \
> >> -    drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_KMS, fmt, ##__VA_ARGS__)
> >> +    drm_dev_dbg(__drm_to_dev(drm), DRM_UT_KMS, fmt, ##__VA_ARGS__)
> >>   #define drm_dbg_prime(drm, fmt, ...)                                       \
> >> -    drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_PRIME, fmt, ##__VA_ARGS__)
> >> +    drm_dev_dbg(__drm_to_dev(drm), DRM_UT_PRIME, fmt, ##__VA_ARGS__)
> >>   #define drm_dbg_atomic(drm, fmt, ...)                                      \
> >> -    drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
> >> +    drm_dev_dbg(__drm_to_dev(drm), DRM_UT_ATOMIC, fmt, ##__VA_ARGS__)
> >>   #define drm_dbg_vbl(drm, fmt, ...)                                 \
> >> -    drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_VBL, fmt, ##__VA_ARGS__)
> >> +    drm_dev_dbg(__drm_to_dev(drm), DRM_UT_VBL, fmt, ##__VA_ARGS__)
> >>   #define drm_dbg_state(drm, fmt, ...)                                       \
> >> -    drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_STATE, fmt, ##__VA_ARGS__)
> >> +    drm_dev_dbg(__drm_to_dev(drm), DRM_UT_STATE, fmt, ##__VA_ARGS__)
> >>   #define drm_dbg_lease(drm, fmt, ...)                                       \
> >> -    drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_LEASE, fmt, ##__VA_ARGS__)
> >> +    drm_dev_dbg(__drm_to_dev(drm), DRM_UT_LEASE, fmt, ##__VA_ARGS__)
> >>   #define drm_dbg_dp(drm, fmt, ...)                                  \
> >> -    drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DP, fmt, ##__VA_ARGS__)
> >> +    drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DP, fmt, ##__VA_ARGS__)
> >>   #define drm_dbg_drmres(drm, fmt, ...)                                      \
> >> -    drm_dev_dbg((drm) ? (drm)->dev : NULL, DRM_UT_DRMRES, fmt, ##__VA_ARGS__)
> >> +    drm_dev_dbg(__drm_to_dev(drm), DRM_UT_DRMRES, fmt, ##__VA_ARGS__)
> >>
> >>   #define drm_dbg(drm, fmt, ...)     drm_dbg_driver(drm, fmt, ##__VA_ARGS__)
> >>
> >> @@ -727,10 +733,9 @@ void __drm_err(const char *format, ...);
> >>   #define __DRM_DEFINE_DBG_RATELIMITED(category, drm, fmt, ...)                                      \
> >>   ({                                                                                         \
> >>      static DEFINE_RATELIMIT_STATE(rs_, DEFAULT_RATELIMIT_INTERVAL, DEFAULT_RATELIMIT_BURST);\
> >> -    const struct drm_device *drm_ = (drm);                                                  \
> >>                                                                                              \
> >>      if (drm_debug_enabled(DRM_UT_ ## category) && __ratelimit(&rs_))                        \
> >> -            drm_dev_printk(drm_ ? drm_->dev : NULL, KERN_DEBUG, fmt, ## __VA_ARGS__);       \
> >> +            drm_dev_printk(__drm_to_dev(drm), KERN_DEBUG, fmt, ## __VA_ARGS__);             \
> >>   })
> >>
> >>   #define drm_dbg_ratelimited(drm, fmt, ...) \
> >> @@ -752,13 +757,13 @@ void __drm_err(const char *format, ...);
> >>   /* Helper for struct drm_device based WARNs */
> >>   #define drm_WARN(drm, condition, format, arg...)                   \
> >>      WARN(condition, "%s %s: [drm] " format,                         \
> >> -                    dev_driver_string((drm)->dev),                  \
> >> -                    dev_name((drm)->dev), ## arg)
> >> +                    dev_driver_string(__drm_to_dev(drm)),           \
> >> +                    dev_name(__drm_to_dev(drm)), ## arg)
> >>
> >>   #define drm_WARN_ONCE(drm, condition, format, arg...)                      \
> >>      WARN_ONCE(condition, "%s %s: [drm] " format,                    \
> >> -                    dev_driver_string((drm)->dev),                  \
> >> -                    dev_name((drm)->dev), ## arg)
> >> +                    dev_driver_string(__drm_to_dev(drm)),           \
> >> +                    dev_name(__drm_to_dev(drm)), ## arg)
> >>
> > Hi Jani,
> >
> > These two changes introduce undefined behavior into these macros. The final
> > code generation becomes this (from 'bxt_port_to_phy_channel'):
> >
> >       __warn_printk("%s %s: [drm] " "PHY not found for PORT %c",
> >                     dev_driver_string(__drm_to_dev(display->drm)),
> >                     dev_name(__drm_to_dev(display->drm)),
> >                     (port + 'A'));
> >
> > The issue lies in 'dev_name(__drm_to_dev(display->drm))'. After inlining, it
> > becomes this (pseudo code):
> >
> >       struct device *device = display->drm ? display->drm->dev : NULL;
> >       const char *name = device->init_name ? device->init_name
> >                                            : kobject_name(&device->kobj);
> >
> >       __warn_printk("%s %s: [drm] " "PHY not found for PORT %c",
> >                     dev_driver_string(device), name, (port + 'A'));
> >
> > The issue, of course, is that the 'device' may be NULL when attempting
> > to get
> > 'device->init_name'. The compiler sees this as undefined behavior, which may
> > lead to unexpected outcomes, especially with Clang where paths
> > determined to be
> > undefined are removed entirely under certain conditions.
>
> Would it be better to just revert the drm_WARN() and drm_WARN_ONCE()
> macros to use (drm)->dev directly?
>
> It's not ideal, but as the quick fix.
>
> I don't think adding the check in dev_name() would go down well, as
> there are roughly 5k users of it, and feels like unnecessary code size
> bloat.
>
I did a quick check and vmlinux size changed by only about 0.0078%.
Most modules didn't change size, some did increase, but typically less
than 1%, and a few actually shrank in size (??). The largest change
was 6.5840% : counter.ko.

Reverting the patches would probably work, but that relies upon 'drm'
never being NULL. Indeed, it looks like 'dev_driver_string' is wary of
a NULL 'drm', though it still accesses the argument as if it couldn't
be NULL... This all seems like a disaster waiting to happen, to be
honest. There should either be no way for 'drm' to be NULL or handling
for when it is. What happened with this series of patches is adding
only partial handling for when it is NULL.

-bw

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

end of thread, other threads:[~2025-05-19 13:00 UTC | newest]

Thread overview: 35+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-23 15:09 [PATCH 0/5] drm: strict type checking for drm_device based logging helpers Jani Nikula
2025-01-23 15:09 ` [PATCH 1/5] drm/mipi-dsi: stop passing non struct drm_device to drm_err() and friends Jani Nikula
2025-02-25 16:52   ` Luca Ceresoli
2025-01-23 15:09 ` [PATCH 2/5] drm/rockchip: " Jani Nikula
2025-01-24  9:53   ` Andy Yan
2025-01-24 11:43     ` Jani Nikula
2025-01-25  3:53       ` Andy Yan
2025-02-25 19:34         ` Jani Nikula
2025-02-26  8:33         ` [PATCH " Thomas Zimmermann
2025-02-26 10:36           ` Andy Yan
2025-02-26 11:33             ` Jani Nikula
2025-02-24 14:47   ` Louis Chauvet
2025-01-23 15:09 ` [PATCH 3/5] drm/sched: " Jani Nikula
2025-01-23 19:54   ` Simona Vetter
2025-01-24 11:46     ` Jani Nikula
2025-01-27 10:11       ` Philipp Stanner
2025-02-24 15:29       ` Tvrtko Ursulin
2025-02-24 14:48   ` Louis Chauvet
2025-01-23 15:09 ` [PATCH 4/5] drm/print: Include drm_device.h Jani Nikula
2025-01-23 15:14   ` Jani Nikula
2025-01-23 16:14     ` Gustavo Sousa
2025-01-24 11:50       ` Jani Nikula
2025-01-24 12:21         ` Gustavo Sousa
2025-01-24 12:55           ` Simona Vetter
2025-01-23 15:09 ` [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends Jani Nikula
2025-02-24 14:48   ` Louis Chauvet
2025-02-25 16:52   ` Luca Ceresoli
2025-05-15 20:18   ` Bill Wendling
2025-05-15 23:52     ` Bill Wendling
2025-05-16  9:48     ` Jani Nikula
2025-05-16 20:41       ` Bill Wendling
2025-01-23 16:05 ` ✗ Fi.CI.SPARSE: warning for drm: strict type checking for drm_device based logging helpers Patchwork
2025-01-23 16:13 ` ✓ i915.CI.BAT: success " Patchwork
2025-01-24  8:26 ` ✗ i915.CI.Full: failure " Patchwork
2025-03-04 15:07 ` [PATCH 0/5] " Jani Nikula

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