Skip to contentSkip to conversation

drm: strict type checking for drm_device based logging helpers

PATCH In review Jani Nikula 11 participants 35 messages Jan 23, 2025 – May 16, 2025

Subsystems (6)
lore
Share & tools
lore
#0 lore raw

cover drm: strict type checking for drm_device based logging helpers

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(-)
Signature · 1 line
2.39.5
#1 lore raw

PATCH 1/5 drm/mipi-dsi: stop passing non struct drm_device to drm_err() and friends

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.

---

Cc Maarten Lankhorst <[email protected]>
Cc Maxime Ripard <[email protected]>
Cc Thomas Zimmermann <[email protected]>
---
 drivers/gpu/drm/drm_mipi_dsi.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/gpu/drm/drm_mipi_dsi.c +6 -6
index 5e5c5f84daac..7a1ebf71d798 100644
@@ -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);
 	}
Signature · 1 line
2.39.5
#3 lore raw

PATCH 2/5 drm/rockchip: stop passing non struct drm_device to drm_err() and friends

In reply to 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.

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

---

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.

---
 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(-)
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +8 -8
index e7a6669c46b0..f737e7d46e66 100644
@@ -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;
 	}
 
drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +8 -8
index f41151d49fca..3d1dddb34603 100644
@@ -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;
 	}
 
Signature · 1 line
2.39.5
#12 lore raw

PATCH 3/5 drm/sched: stop passing non struct drm_device to drm_err() and friends

In reply to 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.

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.

---

Cc Matthew Brost <[email protected]>
Cc Danilo Krummrich <[email protected]>
Cc Philipp Stanner <[email protected]>
Cc "Christian König" <[email protected]>
---
 drivers/gpu/drm/scheduler/sched_entity.c |  2 +-
 drivers/gpu/drm/scheduler/sched_main.c   | 20 +++++++++++---------
 2 files changed, 12 insertions(+), 10 deletions(-)
drivers/gpu/drm/scheduler/sched_entity.c +1 -1
index 69bcf0e99d57..e29af71d4b5c 100644
@@ -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);
drivers/gpu/drm/scheduler/sched_main.c +11 -9
index a48be16ab84f..d1c1f22fd1db 100644
@@ -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);
Signature · 1 line
2.39.5
#18 lore raw

PATCH 4/5 drm/print: Include drm_device.h

In reply to Jani Nikula

From: Gustavo Sousa <[email protected]>

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.

---

Including here as a dependency. May be merged independently.

---
 include/drm/drm_print.h | 1 +
 1 file changed, 1 insertion(+)
include/drm/drm_print.h +1 -0
index f77fe1531cf8..9732f514566d 100644
@@ -32,6 +32,7 @@
 #include <linux/dynamic_debug.h>
 
 #include <drm/drm.h>
+#include <drm/drm_device.h>
 
 struct debugfs_regset32;
 struct drm_device;
Signature · 1 line
2.39.5
#24 lore raw

PATCH 5/5 drm/print: require struct drm_device for drm_err() and friends

In reply to 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.

---
 include/drm/drm_print.h | 41 +++++++++++++++++++++++------------------
 1 file changed, 23 insertions(+), 18 deletions(-)
include/drm/drm_print.h +23 -18
index 9732f514566d..f31eba1c7cab 100644
@@ -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",					\
Signature · 1 line
2.39.5
#19 lore raw

Re: [PATCH 4/5] drm/print: Include drm_device.h

In reply to Jani Nikula
Quoted 6 lines · Jani Nikula

From: Gustavo Sousa <[email protected]>

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.

Quoted 6 lines

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.

This posting should have had

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

[1] https://lore.kernel.org/r/[email protected]

Quoted 20 lines

---

Including here as a dependency. May be merged independently.

---
 include/drm/drm_print.h | 1 +
 1 file changed, 1 insertion(+)
include/drm/drm_print.h +1 -0
index f77fe1531cf8..9732f514566d 100644
@@ -32,6 +32,7 @@
 #include <linux/dynamic_debug.h>
 
 #include <drm/drm.h>
+#include <drm/drm_device.h>
 
 struct debugfs_regset32;
 struct drm_device;
Signature · 1 line
Jani Nikula, Intel
#31 lore raw

✗ Fi.CI.SPARSE: warning for drm: strict type checking for drm_device based logging helpers

In reply to Jani Nikula
== Series Details ==

== 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.

#32 lore raw

✓ i915.CI.BAT: success for drm: strict type checking for drm_device based logging helpers

In reply to Jani Nikula
== Series Details ==

== 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@[email protected]
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/bat-dg1-7/igt@[email protected]

* 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@[email protected]
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/bat-arlh-3/igt@[email protected]

* 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@[email protected]
[6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/bat-arlh-3/igt@i915_selftest@[email protected]
- 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@[email protected]
[8]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/bat-arls-5/igt@i915_selftest@[email protected]
- 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@[email protected]
[10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/bat-mtlp-6/igt@i915_selftest@[email protected]

* 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@[email protected]
[12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/bat-dg2-11/igt@[email protected]

#### 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@[email protected]
[14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/bat-rplp-1/igt@[email protected]

* 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@[email protected]
[16]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/bat-arls-6/igt@i915_selftest@[email protected]

{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

#20 lore raw

Re: [PATCH 4/5] drm/print: Include drm_device.h

In reply to Jani Nikula

Quoting Jani Nikula (2025-01-23 12:14:31-03:00)

Quoted 14 lines · Jani Nikula
Quoted 6 lines

From: Gustavo Sousa <[email protected]>

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.

Quoted 6 lines

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.

Quoted 8 lines

This posting should have had

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

[1] https://lore.kernel.org/r/[email protected]

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

Quoted 24 lines
Quoted 21 lines

---

Including here as a dependency. May be merged independently.

---
 include/drm/drm_print.h | 1 +
 1 file changed, 1 insertion(+)
include/drm/drm_print.h +1 -0
index f77fe1531cf8..9732f514566d 100644
@@ -32,6 +32,7 @@
 #include <linux/dynamic_debug.h>
 
 #include <drm/drm.h>
+#include <drm/drm_device.h>
 
 struct debugfs_regset32;
 struct drm_device;
Signature · 1 line
Jani Nikula, Intel
Reviewed-by on v1 3/5
#13 lore raw

Re: [PATCH 3/5] drm/sched: stop passing non struct drm_device to drm_err() and friends

In reply to Jani Nikula
Quoted 4 lines · 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.

Quoted 8 lines

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.

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:

Quoted 96 lines

---

Cc Matthew Brost <[email protected]>
Cc Danilo Krummrich <[email protected]>
Cc Philipp Stanner <[email protected]>
Cc "Christian König" <[email protected]>
---
 drivers/gpu/drm/scheduler/sched_entity.c |  2 +-
 drivers/gpu/drm/scheduler/sched_main.c   | 20 +++++++++++---------
 2 files changed, 12 insertions(+), 10 deletions(-)
drivers/gpu/drm/scheduler/sched_entity.c +1 -1
index 69bcf0e99d57..e29af71d4b5c 100644
@@ -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);
drivers/gpu/drm/scheduler/sched_main.c +11 -9
index a48be16ab84f..d1c1f22fd1db 100644
@@ -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);
Signature · 1 line
2.39.5
Signature · 3 lines
Simona Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
#33 lore raw

✗ i915.CI.Full: failure for drm: strict type checking for drm_device based logging helpers

In reply to Jani Nikula
== Series Details ==

== 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 ([email protected]) 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@[email protected]
[2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-7/igt@[email protected]

#### 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@[email protected]
[4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-glk3/igt@[email protected]

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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
[11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-2/igt@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- shard-tglu: NOTRUN -> [SKIP][21] ([i915#8562])
[21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
[30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-14/igt@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
[49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-3/igt@gem_exec_suspend@[email protected]

* 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@[email protected]
- shard-mtlp: NOTRUN -> [SKIP][51] ([i915#4860])
[51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
[60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-17/igt@gem_lmem_swapping@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
[86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-7/igt@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- 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@[email protected]
[98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-9/igt@[email protected]

* 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@[email protected]
- shard-tglu: NOTRUN -> [SKIP][100] ([i915#8399])
[100]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- shard-tglu: NOTRUN -> [SKIP][110] ([i915#9531])
[110]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@[email protected]

* 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@[email protected]
[112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-17/igt@kms_atomic_transition@[email protected]

* 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@[email protected]
[116]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-1/igt@kms_atomic_transition@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
[123]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- shard-tglu: NOTRUN -> [SKIP][137] ([i915#12313])
[137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
[157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- 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@[email protected]

* 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@[email protected]
- shard-snb: NOTRUN -> [INCOMPLETE][164] ([i915#8816])
[164]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-snb7/igt@[email protected]
- shard-dg1: NOTRUN -> [SKIP][165] ([i915#9424])
[165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- shard-tglu-1: NOTRUN -> [SKIP][174] ([i915#13049])
[174]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- shard-dg1: NOTRUN -> [SKIP][187] ([i915#8588])
[187]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@[email protected]

* 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@[email protected]

* 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@[email protected]
- shard-tglu: NOTRUN -> [SKIP][192] ([i915#3840])
[192]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@[email protected]

* 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@[email protected]

* 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@[email protected]
- 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- shard-dg1: NOTRUN -> [SKIP][201] ([i915#9337])
[201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
[212]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-14/igt@kms_flip@[email protected]

* 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@[email protected]
[214]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-17/igt@kms_flip@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
[241]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-1/igt@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- shard-dg1: NOTRUN -> [SKIP][250] ([i915#12339])
[250]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-12/igt@[email protected]

* 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@[email protected]

* 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@[email protected]
- shard-dg2: NOTRUN -> [SKIP][253] ([i915#6301])
[253]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-3/igt@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- shard-tglu: NOTRUN -> [SKIP][272] ([i915#9685])
[272]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-3/igt@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- shard-mtlp: NOTRUN -> [SKIP][307] ([i915#5289])
[307]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
[316]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-7/igt@[email protected]

* 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@[email protected]

* 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@[email protected]
- shard-tglu-1: NOTRUN -> [SKIP][319] ([i915#3555])
[319]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-1/igt@[email protected]

* 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@[email protected]

* 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@[email protected]
- shard-tglu: NOTRUN -> [SKIP][322] ([i915#9906])
[322]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-7/igt@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
- 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]
[333]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-6/igt@[email protected]

* 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@[email protected]
- shard-rkl: NOTRUN -> [SKIP][335] ([i915#8516])
[335]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-5/igt@[email protected]

* 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@[email protected]
- 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

* 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@[email protected]

#### 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@[email protected]
[347]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-7/igt@[email protected]

* 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@[email protected]
[349]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-2/igt@[email protected]

* 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@[email protected]
[351]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-6/igt@[email protected]

* 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@[email protected]
[353]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-7/igt@[email protected]

* 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@[email protected]
[355]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-10/igt@i915_pm_freq_api@[email protected]

* 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@[email protected]
[357]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-glk1/igt@[email protected]

* 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@[email protected]
[359]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-glk1/igt@kms_async_flips@[email protected]

* 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@[email protected]
[361]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-glk1/igt@kms_async_flips@[email protected]

* 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@[email protected]
[363]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-tglu-4/igt@[email protected]
- 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@[email protected]
[365]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-7/igt@[email protected]

* 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@[email protected]
[369]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-2/igt@[email protected]

* 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@[email protected]
[371]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-2/igt@kms_flip@[email protected]

* 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@[email protected]
[373]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-10/igt@[email protected]

* 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@[email protected]
[375]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-8/igt@[email protected]

* 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@[email protected]
[377]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-7/igt@[email protected]

* 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@[email protected]
[379]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-18/igt@perf_pmu@[email protected]

#### 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@[email protected]
[381]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-5/igt@[email protected]

* 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@[email protected]
[383]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-4/igt@[email protected]

* 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@[email protected]
[385]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg1-13/igt@[email protected]

* 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@[email protected]
[387]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-dg2-10/igt@[email protected]

* 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@[email protected]
[389]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-mtlp-8/igt@[email protected]
- 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@[email protected]
[391]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_143893v1/shard-rkl-1/igt@[email protected]

{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

maintainer
#4 lore raw

Re:[PATCH 2/5] drm/rockchip: stop passing non struct drm_device to drm_err() and friends

In reply to Jani Nikula

Hi,

Quoted 6 lines · 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.

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

Quoted 169 lines

---

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.

---
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(-)
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +6 -6
index e7a6669c46b0..f737e7d46e66 100644
@@ -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

drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +2 -2
@@ -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;
 	}
 
drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +8 -8
index f41151d49fca..3d1dddb34603 100644
@@ -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;
 	}
 
Signature · 7 lines
2.39.5


_______________________________________________
Linux-rockchip mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-rockchip
#5 lore raw

Re:[PATCH 2/5] drm/rockchip: stop passing non struct drm_device to drm_err() and friends

Quoted 7 lines · Andy Yan

Hi,

Quoted 4 lines · 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.

Quoted 6 lines
Quoted 2 lines

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.

Quoted 170 lines
Quoted 170 lines

---

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.

---
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(-)
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +6 -6
index e7a6669c46b0..f737e7d46e66 100644
@@ -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

drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +2 -2
@@ -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;
 	}
 
drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +8 -8
index f41151d49fca..3d1dddb34603 100644
@@ -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;
 	}
 
Signature · 7 lines
2.39.5


_______________________________________________
Linux-rockchip mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-rockchip
Signature · 1 line
Jani Nikula, Intel
#14 lore raw

Re: [PATCH 3/5] drm/sched: stop passing non struct drm_device to drm_err() and friends

In reply to Simona Vetter
Quoted 12 lines · Simona Vetter
Quoted 11 lines · 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.

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.

Quoted 6 lines
Quoted 1 line

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.

Quoted 3 lines

Anyway on the series and with that caveat:

Thanks,
Jani.

Quoted 98 lines
Quoted 98 lines

---

Cc Matthew Brost <[email protected]>
Cc Danilo Krummrich <[email protected]>
Cc Philipp Stanner <[email protected]>
Cc "Christian König" <[email protected]>
---
 drivers/gpu/drm/scheduler/sched_entity.c |  2 +-
 drivers/gpu/drm/scheduler/sched_main.c   | 20 +++++++++++---------
 2 files changed, 12 insertions(+), 10 deletions(-)
drivers/gpu/drm/scheduler/sched_entity.c +1 -1
index 69bcf0e99d57..e29af71d4b5c 100644
@@ -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);
drivers/gpu/drm/scheduler/sched_main.c +11 -9
index a48be16ab84f..d1c1f22fd1db 100644
@@ -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);
Signature · 1 line
2.39.5
Signature · 1 line
Jani Nikula, Intel
#21 lore raw

Re: [PATCH 4/5] drm/print: Include drm_device.h

In reply to Gustavo Sousa
Quoted 22 lines · Gustavo Sousa

Quoting Jani Nikula (2025-01-23 12:14:31-03:00)

Quoted 21 lines · Jani Nikula
Quoted 6 lines

From: Gustavo Sousa <[email protected]>

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.

Quoted 6 lines

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.

This posting should have had

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

Quoted 6 lines
Quoted 1 line

[1] https://lore.kernel.org/r/[email protected]

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.

Quoted 28 lines

--
Gustavo Sousa

Quoted 24 lines
Quoted 21 lines

---

Including here as a dependency. May be merged independently.

---
 include/drm/drm_print.h | 1 +
 1 file changed, 1 insertion(+)
include/drm/drm_print.h +1 -0
index f77fe1531cf8..9732f514566d 100644
@@ -32,6 +32,7 @@
 #include <linux/dynamic_debug.h>
 
 #include <drm/drm.h>
+#include <drm/drm_device.h>
 
 struct debugfs_regset32;
 struct drm_device;
Signature · 1 line
Jani Nikula, Intel
Signature · 1 line
Jani Nikula, Intel
#22 lore raw

Re: [PATCH 4/5] drm/print: Include drm_device.h

Quoting Jani Nikula (2025-01-24 08:50:14-03:00)

Quoted 30 lines · Gustavo Sousa
Quoted 22 lines

Quoting Jani Nikula (2025-01-23 12:14:31-03:00)

Quoted 21 lines · Jani Nikula
Quoted 6 lines

From: Gustavo Sousa <[email protected]>

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.

Quoted 6 lines

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.

This posting should have had

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

Quoted 6 lines
Quoted 1 line

[1] https://lore.kernel.org/r/[email protected]

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?

Quoted 7 lines

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

Quoted 37 lines

BR,
Jani.

Quoted 28 lines

--
Gustavo Sousa

Quoted 24 lines
Quoted 21 lines

---

Including here as a dependency. May be merged independently.

---
 include/drm/drm_print.h | 1 +
 1 file changed, 1 insertion(+)
include/drm/drm_print.h +1 -0
index f77fe1531cf8..9732f514566d 100644
@@ -32,6 +32,7 @@
 #include <linux/dynamic_debug.h>
 
 #include <drm/drm.h>
+#include <drm/drm_device.h>
 
 struct debugfs_regset32;
 struct drm_device;
Signature · 1 line
Jani Nikula, Intel
Signature · 1 line
Jani Nikula, Intel
#23 lore raw

Re: [PATCH 4/5] drm/print: Include drm_device.h

Quoted 45 lines · Gustavo Sousa

Quoting Jani Nikula (2025-01-24 08:50:14-03:00)

Quoted 30 lines · Gustavo Sousa
Quoted 22 lines

Quoting Jani Nikula (2025-01-23 12:14:31-03:00)

Quoted 21 lines · Jani Nikula
Quoted 6 lines

From: Gustavo Sousa <[email protected]>

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.

Quoted 6 lines

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.

This posting should have had

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

Quoted 6 lines
Quoted 1 line

[1] https://lore.kernel.org/r/[email protected]

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?

Quoted 7 lines

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."

Quoted 5 lines

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

Quoted 44 lines

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

Quoted 37 lines

BR,
Jani.

Quoted 28 lines

--
Gustavo Sousa

Quoted 24 lines
Quoted 21 lines

---

Including here as a dependency. May be merged independently.

---
 include/drm/drm_print.h | 1 +
 1 file changed, 1 insertion(+)
include/drm/drm_print.h +1 -0
index f77fe1531cf8..9732f514566d 100644
@@ -32,6 +32,7 @@
 #include <linux/dynamic_debug.h>
 
 #include <drm/drm.h>
+#include <drm/drm_device.h>
 
 struct debugfs_regset32;
 struct drm_device;
Signature · 1 line
Jani Nikula, Intel
Signature · 1 line
Jani Nikula, Intel
Signature · 3 lines
Simona Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
maintainer
#6 lore raw

Re:Re:[PATCH 2/5] drm/rockchip: stop passing non struct drm_device to drm_err() and friends

In reply to Jani Nikula
Quoted 15 lines · 在 2025-01-24 19:43:07,"Jani Nikula" <[email protected]> 写道:
Quoted 7 lines · Andy Yan

Hi,

Quoted 4 lines · 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.

Quoted 6 lines
Quoted 2 lines

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

Quoted 8 lines

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/[email protected]/

Quoted 179 lines

BR,
Jani.

Quoted 170 lines
Quoted 170 lines

---

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.

---
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(-)
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +6 -6
index e7a6669c46b0..f737e7d46e66 100644
@@ -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

drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +2 -2
@@ -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;
 	}
 
drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +8 -8
index f41151d49fca..3d1dddb34603 100644
@@ -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;
 	}
 
Signature · 7 lines
2.39.5


_______________________________________________
Linux-rockchip mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-rockchip
Signature · 1 line
Jani Nikula, Intel
#15 lore raw

Re: [PATCH 3/5] drm/sched: stop passing non struct drm_device to drm_err() and friends

In reply to Jani Nikula

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

Quoted 26 lines · Jani Nikula
Quoted 17 lines · Simona Vetter
Quoted 11 lines · 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.

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.

Quoted 4 lines

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

Quoted 7 lines

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.

Quoted 3 lines

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.

Quoted 6 lines

But the abuse of the
drm_err() and friends macros needs to stop.

Quoted 3 lines

Anyway on the series and with that caveat:

One more nice-to-have / nit below

Quoted 20 lines

Thanks,
Jani.

Quoted 16 lines
Quoted 16 lines

---

Cc Matthew Brost <[email protected]>
Cc Danilo Krummrich <[email protected]>
Cc Philipp Stanner <[email protected]>
Cc "Christian König" <[email protected]>

---
 drivers/gpu/drm/scheduler/sched_entity.c |  2 +- drivers/gpu/drm/scheduler/sched_main.c   | 20 +++++++++++------- --

 2 files changed, 12 insertions(+), 10 deletions(-)
Quoted 15 lines
Quoted 7 lines
Quoted 7 lines
drivers/gpu/drm/scheduler/sched_entity.c +0 -0
index 69bcf0e99d57..e29af71d4b5c 100644
@@ -92,7 +92,7 @@ int drm_sched_entity_init(struct
 drm_sched_entity *entity,
Quoted 8 lines
Quoted 8 lines
drivers/gpu/drm/scheduler/sched_entity.c +1 -1
  		 * 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.

Quoted 103 lines
Quoted 102 lines
Quoted 102 lines

  entity->priority, sched_list[0]-

Quoted 1 line

num_rqs);

  entity->priority = max_t(s32, (s32) sched_list[0]->num_rqs - 1,
  (s32) DRM_SCHED_PRIORITY_KERNEL);

drivers/gpu/drm/scheduler/sched_main.c +0 -0
index a48be16ab84f..d1c1f22fd1db 100644
@@ -103,9 +103,9 @@ static u32 drm_sched_available_credits(struct
 drm_gpu_scheduler *sched)
  {
  	u32 credits;

drivers/gpu/drm/scheduler/sched_main.c +0 -1
-	drm_WARN_ON(sched, check_sub_overflow(sched-
Quoted 1 line

credit_limit,

drivers/gpu/drm/scheduler/sched_main.c +0 -1
-					     

atomic_read(&sched->credit_count),

drivers/gpu/drm/scheduler/sched_main.c +2 -1
-					      &credits));
+	WARN_ON(check_sub_overflow(sched->credit_limit,
+				   atomic_read(&sched-
Quoted 1 line

credit_count),

drivers/gpu/drm/scheduler/sched_main.c +1 -0
+				   &credits));


  return credits;
 }

drivers/gpu/drm/scheduler/sched_main.c +0 -0
@@ -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.
  */

drivers/gpu/drm/scheduler/sched_main.c +0 -1
-	if (drm_WARN(sched, s_job->credits > sched-
Quoted 1 line

credit_limit,

drivers/gpu/drm/scheduler/sched_main.c +0 -1
-		     "Jobs may not exceed the credit limit,

truncate.\n"))

drivers/gpu/drm/scheduler/sched_main.c +3 -0
+	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;

drivers/gpu/drm/scheduler/sched_main.c +1 -0
+	}


  return drm_sched_available_credits(sched) >= s_job-

Quoted 1 line

credits;

 }

drivers/gpu/drm/scheduler/sched_main.c +0 -0
@@ -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. */

drivers/gpu/drm/scheduler/sched_main.c +0 -1
-		drm_err(job->sched, "%s: entity has no rq!\n",

__func__);

drivers/gpu/drm/scheduler/sched_main.c +1 -0
+		dev_err(job->sched->dev, "%s: entity has no

rq!\n", __func__);
  return -ENOENT;
  }

drivers/gpu/drm/scheduler/sched_main.c +0 -0
@@ -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.
  */

drivers/gpu/drm/scheduler/sched_main.c +0 -1
-		drm_err(sched, "%s: num_rqs cannot be greater

than DRM_SCHED_PRIORITY_COUNT\n",

drivers/gpu/drm/scheduler/sched_main.c +1 -0
+		dev_err(sched->dev, "%s: num_rqs cannot be

greater than DRM_SCHED_PRIORITY_COUNT\n",
  __func__);
  return -EINVAL;
  } else if (sched->sched_rq) {

drivers/gpu/drm/scheduler/sched_main.c +0 -0
@@ -1288,7 +1290,7 @@ int drm_sched_init(struct drm_gpu_scheduler
 *sched,
  		 * fine-tune their DRM calling order, and return

all
  * is good.
  */

drivers/gpu/drm/scheduler/sched_main.c +0 -1
-		drm_warn(sched, "%s: scheduler already

initialized!\n", __func__);

drivers/gpu/drm/scheduler/sched_main.c +1 -0
+		dev_warn(sched->dev, "%s: scheduler already

initialized!\n", __func__);
  return 0;
  }

drivers/gpu/drm/scheduler/sched_main.c +0 -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);

drivers/gpu/drm/scheduler/sched_main.c +0 -1
-	drm_err(sched, "%s: Failed to setup GPU scheduler--out

of memory\n", __func__);

drivers/gpu/drm/scheduler/sched_main.c +1 -0
+	dev_err(sched->dev, "%s: Failed to setup GPU scheduler--

out of memory\n", __func__);
  return -ENOMEM;
 }
 EXPORT_SYMBOL(drm_sched_init);

Signature · 1 line
2.39.5
Reviewed-by on v1 2/5
#11 lore raw

Re: [PATCH 2/5] drm/rockchip: stop passing non struct drm_device to drm_err() and friends

In reply to Jani Nikula

Le 23/01/2025 à 16:09, Jani Nikula a écrit :

Quoted 8 lines

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.

Quoted 158 lines

---

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.

---
  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(-)
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +8 -8
index e7a6669c46b0..f737e7d46e66 100644
@@ -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;
  	}
 
drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +8 -8
index f41151d49fca..3d1dddb34603 100644
@@ -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;
  	}
 
Signature · 3 lines
Louis Chauvet, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
Reviewed-by on v1 3/5
#17 lore raw

Re: [PATCH 3/5] drm/sched: stop passing non struct drm_device to drm_err() and friends

In reply to Jani Nikula

Le 23/01/2025 à 16:09, Jani Nikula a écrit :

Quoted 4 lines

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.

Quoted 8 lines

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.

Quoted 92 lines

---

Cc Matthew Brost <[email protected]>
Cc Danilo Krummrich <[email protected]>
Cc Philipp Stanner <[email protected]>
Cc "Christian König" <[email protected]>
---
  drivers/gpu/drm/scheduler/sched_entity.c |  2 +-
  drivers/gpu/drm/scheduler/sched_main.c   | 20 +++++++++++---------
  2 files changed, 12 insertions(+), 10 deletions(-)
drivers/gpu/drm/scheduler/sched_entity.c +1 -1
index 69bcf0e99d57..e29af71d4b5c 100644
@@ -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);
drivers/gpu/drm/scheduler/sched_main.c +11 -9
index a48be16ab84f..d1c1f22fd1db 100644
@@ -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);
Signature · 3 lines
Louis Chauvet, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
Reviewed-by on v1 5/5
#25 lore raw

Re: [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends

In reply to Jani Nikula

Le 23/01/2025 à 16:09, Jani Nikula a écrit :

Quoted 11 lines

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.

Quoted 92 lines
---
  include/drm/drm_print.h | 41 +++++++++++++++++++++++------------------
  1 file changed, 23 insertions(+), 18 deletions(-)
include/drm/drm_print.h +23 -18
index 9732f514566d..f31eba1c7cab 100644
@@ -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",					\
Signature · 3 lines
Louis Chauvet, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
#16 lore raw

Re: [PATCH 3/5] drm/sched: stop passing non struct drm_device to drm_err() and friends

In reply to Jani Nikula
Quoted 20 lines · Jani Nikula
Quoted 12 lines · Simona Vetter
Quoted 11 lines · 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.

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.

Quoted 6 lines
Quoted 1 line

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.

Quoted 4 lines

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

Quoted 106 lines
Quoted 3 lines

Anyway on the series and with that caveat:

Thanks,
Jani.

Quoted 98 lines
Quoted 98 lines

---

Cc Matthew Brost <[email protected]>
Cc Danilo Krummrich <[email protected]>
Cc Philipp Stanner <[email protected]>
Cc "Christian König" <[email protected]>
---
  drivers/gpu/drm/scheduler/sched_entity.c |  2 +-
  drivers/gpu/drm/scheduler/sched_main.c   | 20 +++++++++++---------
  2 files changed, 12 insertions(+), 10 deletions(-)
drivers/gpu/drm/scheduler/sched_entity.c +1 -1
index 69bcf0e99d57..e29af71d4b5c 100644
@@ -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);
drivers/gpu/drm/scheduler/sched_main.c +11 -9
index a48be16ab84f..d1c1f22fd1db 100644
@@ -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);
Signature · 1 line
2.39.5
Reviewed-by on v1 1/5
#2 lore raw

Re: [PATCH 1/5] drm/mipi-dsi: stop passing non struct drm_device to drm_err() and friends

In reply to Jani Nikula
Quoted 9 lines · On Thu, 23 Jan 2025 17:09:08 +0200 Jani Nikula <[email protected]> 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.

Signature · 3 lines
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
Reviewed-by on v1 5/5
#26 lore raw

Re: [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends

In reply to Jani Nikula
Quoted 11 lines · On Thu, 23 Jan 2025 17:09:12 +0200 Jani Nikula <[email protected]> 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.

Signature · 3 lines
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
#7 lore raw

Re:Re:[PATCH 2/5] drm/rockchip: stop passing non struct drm_device to drm_err() and friends

In reply to Andy Yan
Quoted 25 lines · Andy Yan
Quoted 15 lines · 在 2025-01-24 19:43:07,"Jani Nikula" <[email protected]> 写道:
Quoted 7 lines · Andy Yan

Hi,

Quoted 4 lines · 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.

Quoted 6 lines
Quoted 2 lines

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

Quoted 8 lines

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.

Quoted 6 lines

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.

Quoted 184 lines

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

Quoted 179 lines

BR,
Jani.

Quoted 170 lines
Quoted 170 lines

---

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.

---
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(-)
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +6 -6
index e7a6669c46b0..f737e7d46e66 100644
@@ -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

drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +2 -2
@@ -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;
 	}
 
drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +8 -8
index f41151d49fca..3d1dddb34603 100644
@@ -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;
 	}
 
Signature · 7 lines
2.39.5


_______________________________________________
Linux-rockchip mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-rockchip
Signature · 1 line
Jani Nikula, Intel
Signature · 1 line
Jani Nikula, Intel
#8 lore raw

Re: [PATCH 2/5] drm/rockchip: stop passing non struct drm_device to drm_err() and friends

In reply to Andy Yan

Hi

Am 25.01.25 um 04:53 schrieb Andy Yan:

Quoted 19 lines · 在 2025-01-24 19:43:07,"Jani Nikula" <[email protected]> 写道:
Quoted 17 lines · Andy Yan
Quoted 7 lines

Hi,

Quoted 4 lines · 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.

Quoted 5 lines
Quoted 2 lines

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.

Quoted 6 lines
Quoted 4 lines

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.

Quoted 4 lines

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

Quoted 180 lines

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

Quoted 175 lines

BR,
Jani.

Quoted 168 lines
Quoted 168 lines

---

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.

---
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(-)
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +6 -6
index e7a6669c46b0..f737e7d46e66 100644
@@ -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

drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +2 -2
@@ -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;
 	}
 
drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +8 -8
index f41151d49fca..3d1dddb34603 100644
@@ -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;
 	}
 
Signature · 7 lines
2.39.5


_______________________________________________
Linux-rockchip mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-rockchip
Signature · 1 line
Jani Nikula, Intel
Signature · 7 lines
--
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)
maintainer
#9 lore raw

Re:Re: [PATCH 2/5] drm/rockchip: stop passing non struct drm_device to drm_err() and friends

Hi,

Quoted 40 lines · 在 2025-02-26 16:33:21,"Thomas Zimmermann" <[email protected]> 写道:

Hi

Am 25.01.25 um 04:53 schrieb Andy Yan:

Quoted 19 lines · 在 2025-01-24 19:43:07,"Jani Nikula" <[email protected]> 写道:
Quoted 17 lines · Andy Yan
Quoted 7 lines

Hi,

Quoted 4 lines · 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.

Quoted 5 lines
Quoted 2 lines

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.

Quoted 6 lines
Quoted 4 lines

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.

Quoted 4 lines

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]

Quoted 8 lines

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.

Quoted 195 lines

Best regards
Thomas

Quoted 180 lines

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

Quoted 175 lines

BR,
Jani.

Quoted 168 lines
Quoted 168 lines

---

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.

---
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(-)
drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +6 -6
index e7a6669c46b0..f737e7d46e66 100644
@@ -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

drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c +2 -2
@@ -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;
 	}
 
drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c +8 -8
index f41151d49fca..3d1dddb34603 100644
@@ -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;
 	}
 
Signature · 7 lines
2.39.5


_______________________________________________
Linux-rockchip mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-rockchip
Signature · 1 line
Jani Nikula, Intel
Signature · 7 lines
--
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)
#10 lore raw

Re:Re: [PATCH 2/5] drm/rockchip: stop passing non struct drm_device to drm_err() and friends

Quoted 52 lines · Andy Yan

Hi,

Quoted 40 lines · 在 2025-02-26 16:33:21,"Thomas Zimmermann" <[email protected]> 写道:

Hi

Am 25.01.25 um 04:53 schrieb Andy Yan:

Quoted 19 lines · 在 2025-01-24 19:43:07,"Jani Nikula" <[email protected]> 写道:
Quoted 17 lines · Andy Yan
Quoted 7 lines

Hi,

Quoted 4 lines · 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.

Quoted 5 lines
Quoted 2 lines

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.

Quoted 6 lines
Quoted 4 lines

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.

Quoted 4 lines

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]

Quoted 8 lines

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.

Quoted 8 lines

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.

Signature · 1 line
Jani Nikula, Intel
#34 lore raw
In reply to Jani Nikula
Quoted 5 lines · 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

This was pushed earlier, independently.

Quoted 8 lines

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.

Quoted 8 lines
 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(-)
Signature · 1 line
Jani Nikula, Intel
#27 lore raw

Re: [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends

In reply to Jani Nikula
Quoted 91 lines · 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.

---
  include/drm/drm_print.h | 41 +++++++++++++++++++++++------------------
  1 file changed, 23 insertions(+), 18 deletions(-)
include/drm/drm_print.h +19 -16
index 9732f514566d..f31eba1c7cab 100644
@@ -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)

include/drm/drm_print.h void __drm_err(const char *format, ...); · line 767

Quoted 10 lines
include/drm/drm_print.h +4 -2
+			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

#28 lore raw

Re: [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends

Quoted 129 lines · Bill Wendling
Quoted 91 lines · 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.

---
  include/drm/drm_print.h | 41 +++++++++++++++++++++++------------------
  1 file changed, 23 insertions(+), 18 deletions(-)
include/drm/drm_print.h +19 -16
index 9732f514566d..f31eba1c7cab 100644
@@ -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)

include/drm/drm_print.h void __drm_err(const char *format, ...); · line 767

Quoted 10 lines
include/drm/drm_print.h +4 -2
+                     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.

Quoted 3 lines

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

include/linux/device.h +3 -0
index 79e49fe494b7..ea20d439fe8e 100644
@@ -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

#29 lore raw

Re: [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends

In reply to Bill Wendling
Quoted 122 lines · Bill Wendling
Quoted 91 lines · 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.

---
  include/drm/drm_print.h | 41 +++++++++++++++++++++++------------------
  1 file changed, 23 insertions(+), 18 deletions(-)
include/drm/drm_print.h +19 -16
index 9732f514566d..f31eba1c7cab 100644
@@ -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)

include/drm/drm_print.h void __drm_err(const char *format, ...); · line 767

Quoted 10 lines
include/drm/drm_print.h +4 -2
+			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'));
Quoted 6 lines

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.

Quoted 7 lines

(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

Signature · 1 line
Jani Nikula, Intel
#30 lore raw

Re: [PATCH 5/5] drm/print: require struct drm_device for drm_err() and friends

Quoted 130 lines · Jani Nikula
Quoted 122 lines · Bill Wendling
Quoted 91 lines · 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.

---
  include/drm/drm_print.h | 41 +++++++++++++++++++++++------------------
  1 file changed, 23 insertions(+), 18 deletions(-)
include/drm/drm_print.h +19 -16
index 9732f514566d..f31eba1c7cab 100644
@@ -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)

include/drm/drm_print.h void __drm_err(const char *format, ...); · line 767

Quoted 10 lines
include/drm/drm_print.h +4 -2
+                    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'));
Quoted 6 lines

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.

Quoted 9 lines

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