Intel-GFX Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/4] drm/dp: Expose only a properly inited connector
@ 2024-11-26 16:18 Imre Deak
  2024-11-26 16:18 ` [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps Imre Deak
                   ` (6 more replies)
  0 siblings, 7 replies; 25+ messages in thread
From: Imre Deak @ 2024-11-26 16:18 UTC (permalink / raw)
  To: intel-gfx; +Cc: dri-devel, Rodrigo Vivi, Jani Nikula

This patchset is v2 of [1], without the first patch which is already
merged, adding Rodrigo's R-bs and addressing Jani's review comments in
patch 1 of this patchset and the newly added patch 4.

Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>

[1] https://lore.kernel.org/all/20241115164159.1081675-1-imre.deak@intel.com

Imre Deak (4):
  drm/dp: Add a way to init/add a connector in separate steps
  drm/i915/dp_mst: Expose a connector to kernel users after it's
    properly initialized
  drm/i915/dp_mst: Fix error handling while adding a connector
  drm/i915/dp_mst: Use intel_connector vs. drm_connector pointer in
    intel_dp_mst.c

 drivers/gpu/drm/drm_connector.c             | 111 +++++++++--
 drivers/gpu/drm/i915/display/intel_dp_mst.c | 210 ++++++++++----------
 include/drm/drm_connector.h                 |   6 +
 3 files changed, 197 insertions(+), 130 deletions(-)

-- 
2.44.2


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

* [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-11-26 16:18 [PATCH v2 0/4] drm/dp: Expose only a properly inited connector Imre Deak
@ 2024-11-26 16:18 ` Imre Deak
  2024-11-29 14:26   ` Imre Deak
  2024-12-02 16:35   ` Simona Vetter
  2024-11-26 16:18 ` [PATCH v2 2/4] drm/i915/dp_mst: Expose a connector to kernel users after it's properly initialized Imre Deak
                   ` (5 subsequent siblings)
  6 siblings, 2 replies; 25+ messages in thread
From: Imre Deak @ 2024-11-26 16:18 UTC (permalink / raw)
  To: intel-gfx; +Cc: dri-devel, Jani Nikula, Rodrigo Vivi

Atm when the connector is added to the drm_mode_config::connector_list,
the connector may not be fully initialized yet. This is not a problem
for user space, which will see the connector only after it's registered
later, it could be a problem for in-kernel users looking up connectors
via the above list.

To resolve the above issue, add a way to separately initialize the DRM
core specific parts of the connector and add it to the above list. This
will move adding the connector to the list after the properties on the
connector have been added, this is ok since these steps don't have a
dependency.

v2: (Jani)
- Let initing DDC as well via drm_connector_init_core().
- Rename __drm_connector_init to drm_connector_init_core_and_add().

Cc: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> (v1)
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/drm_connector.c | 111 ++++++++++++++++++++++++++------
 include/drm/drm_connector.h     |   6 ++
 2 files changed, 97 insertions(+), 20 deletions(-)

diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index fc35f47e2849e..fd7acae8656b2 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -218,11 +218,11 @@ void drm_connector_free_work_fn(struct work_struct *work)
 	}
 }
 
-static int __drm_connector_init(struct drm_device *dev,
-				struct drm_connector *connector,
-				const struct drm_connector_funcs *funcs,
-				int connector_type,
-				struct i2c_adapter *ddc)
+static int __drm_connector_init_core(struct drm_device *dev,
+				     struct drm_connector *connector,
+				     const struct drm_connector_funcs *funcs,
+				     int connector_type,
+				     struct i2c_adapter *ddc)
 {
 	struct drm_mode_config *config = &dev->mode_config;
 	int ret;
@@ -273,6 +273,7 @@ static int __drm_connector_init(struct drm_device *dev,
 	/* provide ddc symlink in sysfs */
 	connector->ddc = ddc;
 
+	INIT_LIST_HEAD(&connector->head);
 	INIT_LIST_HEAD(&connector->global_connector_list_entry);
 	INIT_LIST_HEAD(&connector->probed_modes);
 	INIT_LIST_HEAD(&connector->modes);
@@ -288,14 +289,6 @@ static int __drm_connector_init(struct drm_device *dev,
 
 	drm_connector_get_cmdline_mode(connector);
 
-	/* We should add connectors at the end to avoid upsetting the connector
-	 * index too much.
-	 */
-	spin_lock_irq(&config->connector_list_lock);
-	list_add_tail(&connector->head, &config->connector_list);
-	config->num_connector++;
-	spin_unlock_irq(&config->connector_list_lock);
-
 	if (connector_type != DRM_MODE_CONNECTOR_VIRTUAL &&
 	    connector_type != DRM_MODE_CONNECTOR_WRITEBACK)
 		drm_connector_attach_edid_property(connector);
@@ -332,6 +325,86 @@ static int __drm_connector_init(struct drm_device *dev,
 	return ret;
 }
 
+/**
+ * drm_connector_init_core - Initialize the core state of a preallocated connector
+ * @dev: DRM device
+ * @connector: the connector to init
+ * @funcs: callbacks for this connector
+ * @connector_type: user visible type of the connector
+ * @ddc: pointer to the associated ddc adapter
+ *
+ * Initialises the core state of preallocated connector. This is
+ * equivalent to drm_connector_init(), without adding the connector to
+ * drm_mode_config::connector_list. This call must be followed by calling
+ * drm_connector_add() during initialization to expose the connector to
+ * in-kernel users via the above list.
+ *
+ * Returns:
+ * Zero on success, error code on failure.
+ */
+int drm_connector_init_core(struct drm_device *dev,
+			    struct drm_connector *connector,
+			    const struct drm_connector_funcs *funcs,
+			    int connector_type,
+			    struct i2c_adapter *ddc)
+{
+	if (drm_WARN_ON(dev, !(funcs && funcs->destroy)))
+		return -EINVAL;
+
+	return __drm_connector_init_core(dev, connector, funcs, connector_type, ddc);
+}
+EXPORT_SYMBOL(drm_connector_init_core);
+
+/**
+ * drm_connector_add - Add the connector
+ * @connector: the connector to add
+ *
+ * Add the connector to the drm_mode_config::connector_list, exposing the
+ * connector to in-kernel users. This call must be preceded by a call to
+ * drm_connector_init_core().
+ */
+void drm_connector_add(struct drm_connector *connector)
+{
+	struct drm_device *dev = connector->dev;
+	struct drm_mode_config *config = &dev->mode_config;
+
+	spin_lock_irq(&config->connector_list_lock);
+	list_add_tail(&connector->head, &config->connector_list);
+	config->num_connector++;
+	spin_unlock_irq(&config->connector_list_lock);
+}
+EXPORT_SYMBOL(drm_connector_add);
+
+static void drm_connector_remove(struct drm_connector *connector)
+{
+	struct drm_device *dev = connector->dev;
+
+	if (list_empty(&connector->head))
+		return;
+
+	spin_lock_irq(&dev->mode_config.connector_list_lock);
+	list_del_init(&connector->head);
+	dev->mode_config.num_connector--;
+	spin_unlock_irq(&dev->mode_config.connector_list_lock);
+}
+
+static int drm_connector_init_core_and_add(struct drm_device *dev,
+					   struct drm_connector *connector,
+					   const struct drm_connector_funcs *funcs,
+					   int connector_type,
+					   struct i2c_adapter *ddc)
+{
+	int ret;
+
+	ret = __drm_connector_init_core(dev, connector, funcs, connector_type, ddc);
+	if (ret)
+		return ret;
+
+	drm_connector_add(connector);
+
+	return 0;
+}
+
 /**
  * drm_connector_init - Init a preallocated connector
  * @dev: DRM device
@@ -361,7 +434,7 @@ int drm_connector_init(struct drm_device *dev,
 	if (drm_WARN_ON(dev, !(funcs && funcs->destroy)))
 		return -EINVAL;
 
-	return __drm_connector_init(dev, connector, funcs, connector_type, NULL);
+	return drm_connector_init_core_and_add(dev, connector, funcs, connector_type, NULL);
 }
 EXPORT_SYMBOL(drm_connector_init);
 
@@ -398,7 +471,7 @@ int drm_connector_init_with_ddc(struct drm_device *dev,
 	if (drm_WARN_ON(dev, !(funcs && funcs->destroy)))
 		return -EINVAL;
 
-	return __drm_connector_init(dev, connector, funcs, connector_type, ddc);
+	return drm_connector_init_core_and_add(dev, connector, funcs, connector_type, ddc);
 }
 EXPORT_SYMBOL(drm_connector_init_with_ddc);
 
@@ -442,7 +515,7 @@ int drmm_connector_init(struct drm_device *dev,
 	if (drm_WARN_ON(dev, funcs && funcs->destroy))
 		return -EINVAL;
 
-	ret = __drm_connector_init(dev, connector, funcs, connector_type, ddc);
+	ret = drm_connector_init_core_and_add(dev, connector, funcs, connector_type, ddc);
 	if (ret)
 		return ret;
 
@@ -659,10 +732,8 @@ void drm_connector_cleanup(struct drm_connector *connector)
 	connector->name = NULL;
 	fwnode_handle_put(connector->fwnode);
 	connector->fwnode = NULL;
-	spin_lock_irq(&dev->mode_config.connector_list_lock);
-	list_del(&connector->head);
-	dev->mode_config.num_connector--;
-	spin_unlock_irq(&dev->mode_config.connector_list_lock);
+
+	drm_connector_remove(connector);
 
 	WARN_ON(connector->state && !connector->funcs->atomic_destroy_state);
 	if (connector->state && connector->funcs->atomic_destroy_state)
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index e3fa43291f449..2476dcbd3c34d 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -2122,6 +2122,12 @@ struct drm_connector {
 
 #define obj_to_connector(x) container_of(x, struct drm_connector, base)
 
+int drm_connector_init_core(struct drm_device *dev,
+			    struct drm_connector *connector,
+			    const struct drm_connector_funcs *funcs,
+			    int connector_type,
+			    struct i2c_adapter *ddc);
+void drm_connector_add(struct drm_connector *connector);
 int drm_connector_init(struct drm_device *dev,
 		       struct drm_connector *connector,
 		       const struct drm_connector_funcs *funcs,
-- 
2.44.2


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

* [PATCH v2 2/4] drm/i915/dp_mst: Expose a connector to kernel users after it's properly initialized
  2024-11-26 16:18 [PATCH v2 0/4] drm/dp: Expose only a properly inited connector Imre Deak
  2024-11-26 16:18 ` [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps Imre Deak
@ 2024-11-26 16:18 ` Imre Deak
  2024-11-26 16:18 ` [PATCH v2 3/4] drm/i915/dp_mst: Fix error handling while adding a connector Imre Deak
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 25+ messages in thread
From: Imre Deak @ 2024-11-26 16:18 UTC (permalink / raw)
  To: intel-gfx; +Cc: dri-devel, Rodrigo Vivi

After a connector is added to the drm_mode_config::connector_list, it's
visible to any in-kernel users looking up connectors via the above list.
Make sure that the connector is properly initialized before such
look-ups.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp_mst.c | 29 ++++++++-------------
 1 file changed, 11 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index c59c2c14679c4..3c21805f5d1eb 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -1700,6 +1700,8 @@ mst_topology_add_connector(struct drm_dp_mst_topology_mgr *mgr,
 	if (!intel_connector)
 		return NULL;
 
+	connector = &intel_connector->base;
+
 	intel_connector->get_hw_state = mst_connector_get_hw_state;
 	intel_connector->sync_state = intel_dp_connector_sync_state;
 	intel_connector->mst_port = intel_dp;
@@ -1708,30 +1710,19 @@ mst_topology_add_connector(struct drm_dp_mst_topology_mgr *mgr,
 
 	intel_dp_init_modeset_retry_work(intel_connector);
 
-	/*
-	 * TODO: The following drm_connector specific initialization belongs
-	 * to DRM core, however it happens atm too late in
-	 * drm_connector_init(). That function will also expose the connector
-	 * to in-kernel users, so it can't be called until the connector is
-	 * sufficiently initialized; init the device pointer used by the
-	 * following DSC setup, until a fix moving this to DRM core.
-	 */
-	intel_connector->base.dev = mgr->dev;
-
-	intel_connector->dp.dsc_decompression_aux = drm_dp_mst_dsc_aux_for_port(port);
-	intel_dp_mst_read_decompression_port_dsc_caps(intel_dp, intel_connector);
-	intel_connector->dp.dsc_hblank_expansion_quirk =
-		detect_dsc_hblank_expansion_quirk(intel_connector);
-
-	connector = &intel_connector->base;
-	ret = drm_connector_init(display->drm, connector, &mst_connector_funcs,
-				 DRM_MODE_CONNECTOR_DisplayPort);
+	ret = drm_connector_init_core(display->drm, connector, &mst_connector_funcs,
+				      DRM_MODE_CONNECTOR_DisplayPort, NULL);
 	if (ret) {
 		drm_dp_mst_put_port_malloc(port);
 		intel_connector_free(intel_connector);
 		return NULL;
 	}
 
+	intel_connector->dp.dsc_decompression_aux = drm_dp_mst_dsc_aux_for_port(port);
+	intel_dp_mst_read_decompression_port_dsc_caps(intel_dp, intel_connector);
+	intel_connector->dp.dsc_hblank_expansion_quirk =
+		detect_dsc_hblank_expansion_quirk(intel_connector);
+
 	drm_connector_helper_add(connector, &mst_connector_helper_funcs);
 
 	for_each_pipe(display, pipe) {
@@ -1752,6 +1743,8 @@ mst_topology_add_connector(struct drm_dp_mst_topology_mgr *mgr,
 		drm_dbg_kms(display->drm, "[%s:%d] HDCP MST init failed, skipping.\n",
 			    connector->name, connector->base.id);
 
+	drm_connector_add(connector);
+
 	return connector;
 
 err:
-- 
2.44.2


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

* [PATCH v2 3/4] drm/i915/dp_mst: Fix error handling while adding a connector
  2024-11-26 16:18 [PATCH v2 0/4] drm/dp: Expose only a properly inited connector Imre Deak
  2024-11-26 16:18 ` [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps Imre Deak
  2024-11-26 16:18 ` [PATCH v2 2/4] drm/i915/dp_mst: Expose a connector to kernel users after it's properly initialized Imre Deak
@ 2024-11-26 16:18 ` Imre Deak
  2024-11-26 16:18 ` [PATCH v2 4/4] drm/i915/dp_mst: Use intel_connector vs. drm_connector pointer in intel_dp_mst.c Imre Deak
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 25+ messages in thread
From: Imre Deak @ 2024-11-26 16:18 UTC (permalink / raw)
  To: intel-gfx; +Cc: dri-devel, Rodrigo Vivi

After an error during adding an MST connector the MST port and the
intel_connector object could be leaked, fix this up.

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp_mst.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index 3c21805f5d1eb..b019c65703578 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -1712,11 +1712,8 @@ mst_topology_add_connector(struct drm_dp_mst_topology_mgr *mgr,
 
 	ret = drm_connector_init_core(display->drm, connector, &mst_connector_funcs,
 				      DRM_MODE_CONNECTOR_DisplayPort, NULL);
-	if (ret) {
-		drm_dp_mst_put_port_malloc(port);
-		intel_connector_free(intel_connector);
-		return NULL;
-	}
+	if (ret)
+		goto err_put_port;
 
 	intel_connector->dp.dsc_decompression_aux = drm_dp_mst_dsc_aux_for_port(port);
 	intel_dp_mst_read_decompression_port_dsc_caps(intel_dp, intel_connector);
@@ -1731,12 +1728,12 @@ mst_topology_add_connector(struct drm_dp_mst_topology_mgr *mgr,
 
 		ret = drm_connector_attach_encoder(&intel_connector->base, enc);
 		if (ret)
-			goto err;
+			goto err_cleanup_connector;
 	}
 
 	ret = mst_topology_add_connector_properties(intel_dp, connector, pathprop);
 	if (ret)
-		goto err;
+		goto err_cleanup_connector;
 
 	ret = intel_dp_hdcp_init(dig_port, intel_connector);
 	if (ret)
@@ -1747,8 +1744,12 @@ mst_topology_add_connector(struct drm_dp_mst_topology_mgr *mgr,
 
 	return connector;
 
-err:
+err_cleanup_connector:
 	drm_connector_cleanup(connector);
+err_put_port:
+	drm_dp_mst_put_port_malloc(port);
+	intel_connector_free(intel_connector);
+
 	return NULL;
 }
 
-- 
2.44.2


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

* [PATCH v2 4/4] drm/i915/dp_mst: Use intel_connector vs. drm_connector pointer in intel_dp_mst.c
  2024-11-26 16:18 [PATCH v2 0/4] drm/dp: Expose only a properly inited connector Imre Deak
                   ` (2 preceding siblings ...)
  2024-11-26 16:18 ` [PATCH v2 3/4] drm/i915/dp_mst: Fix error handling while adding a connector Imre Deak
@ 2024-11-26 16:18 ` Imre Deak
  2024-11-26 16:51 ` ✗ Fi.CI.SPARSE: warning for drm/dp: Expose only a properly inited connector Patchwork
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 25+ messages in thread
From: Imre Deak @ 2024-11-26 16:18 UTC (permalink / raw)
  To: intel-gfx; +Cc: dri-devel, Jani Nikula

Follow the canonical way in intel_dp_mst.c, referencing a connector only
via a struct intel_connector pointer and naming this pointer 'connector'
instead of 'intel_connector', the only exception being the casting of
a drm_connector function parameter pointer to intel_connector, calling
the drm_connector pointer _connector.

Suggested-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Imre Deak <imre.deak@intel.com>
---
 drivers/gpu/drm/i915/display/intel_dp_mst.c | 184 ++++++++++----------
 1 file changed, 90 insertions(+), 94 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_dp_mst.c b/drivers/gpu/drm/i915/display/intel_dp_mst.c
index b019c65703578..9bb997d8cd385 100644
--- a/drivers/gpu/drm/i915/display/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/display/intel_dp_mst.c
@@ -937,33 +937,32 @@ mst_connector_atomic_topology_check(struct intel_connector *connector,
 }
 
 static int
-mst_connector_atomic_check(struct drm_connector *connector,
+mst_connector_atomic_check(struct drm_connector *_connector,
 			   struct drm_atomic_state *_state)
 {
 	struct intel_atomic_state *state = to_intel_atomic_state(_state);
-	struct intel_connector *intel_connector =
-		to_intel_connector(connector);
+	struct intel_connector *connector = to_intel_connector(_connector);
 	int ret;
 
-	ret = intel_digital_connector_atomic_check(connector, &state->base);
+	ret = intel_digital_connector_atomic_check(&connector->base, &state->base);
 	if (ret)
 		return ret;
 
-	ret = mst_connector_atomic_topology_check(intel_connector, state);
+	ret = mst_connector_atomic_topology_check(connector, state);
 	if (ret)
 		return ret;
 
-	if (intel_connector_needs_modeset(state, connector)) {
+	if (intel_connector_needs_modeset(state, &connector->base)) {
 		ret = intel_dp_tunnel_atomic_check_state(state,
-							 intel_connector->mst_port,
-							 intel_connector);
+							 connector->mst_port,
+							 connector);
 		if (ret)
 			return ret;
 	}
 
 	return drm_dp_atomic_release_time_slots(&state->base,
-						&intel_connector->mst_port->mst_mgr,
-						intel_connector->port);
+						&connector->mst_port->mst_mgr,
+						connector->port);
 }
 
 static void mst_stream_disable(struct intel_atomic_state *state,
@@ -1343,23 +1342,23 @@ static bool mst_stream_initial_fastset_check(struct intel_encoder *encoder,
 	return intel_dp_initial_fastset_check(primary_encoder, crtc_state);
 }
 
-static int mst_connector_get_ddc_modes(struct drm_connector *connector)
+static int mst_connector_get_ddc_modes(struct drm_connector *_connector)
 {
-	struct intel_connector *intel_connector = to_intel_connector(connector);
-	struct drm_i915_private *i915 = to_i915(intel_connector->base.dev);
-	struct intel_dp *intel_dp = intel_connector->mst_port;
+	struct intel_connector *connector = to_intel_connector(_connector);
+	struct drm_i915_private *i915 = to_i915(connector->base.dev);
+	struct intel_dp *intel_dp = connector->mst_port;
 	const struct drm_edid *drm_edid;
 	int ret;
 
-	if (drm_connector_is_unregistered(connector))
-		return intel_connector_update_modes(connector, NULL);
+	if (drm_connector_is_unregistered(&connector->base))
+		return intel_connector_update_modes(&connector->base, NULL);
 
 	if (!intel_display_driver_check_access(i915))
-		return drm_edid_connector_add_modes(connector);
+		return drm_edid_connector_add_modes(&connector->base);
 
-	drm_edid = drm_dp_mst_edid_read(connector, &intel_dp->mst_mgr, intel_connector->port);
+	drm_edid = drm_dp_mst_edid_read(&connector->base, &intel_dp->mst_mgr, connector->port);
 
-	ret = intel_connector_update_modes(connector, drm_edid);
+	ret = intel_connector_update_modes(&connector->base, drm_edid);
 
 	drm_edid_free(drm_edid);
 
@@ -1367,32 +1366,29 @@ static int mst_connector_get_ddc_modes(struct drm_connector *connector)
 }
 
 static int
-mst_connector_late_register(struct drm_connector *connector)
+mst_connector_late_register(struct drm_connector *_connector)
 {
-	struct intel_connector *intel_connector = to_intel_connector(connector);
+	struct intel_connector *connector = to_intel_connector(_connector);
 	int ret;
 
-	ret = drm_dp_mst_connector_late_register(connector,
-						 intel_connector->port);
+	ret = drm_dp_mst_connector_late_register(&connector->base, connector->port);
 	if (ret < 0)
 		return ret;
 
-	ret = intel_connector_register(connector);
+	ret = intel_connector_register(&connector->base);
 	if (ret < 0)
-		drm_dp_mst_connector_early_unregister(connector,
-						      intel_connector->port);
+		drm_dp_mst_connector_early_unregister(&connector->base, connector->port);
 
 	return ret;
 }
 
 static void
-mst_connector_early_unregister(struct drm_connector *connector)
+mst_connector_early_unregister(struct drm_connector *_connector)
 {
-	struct intel_connector *intel_connector = to_intel_connector(connector);
+	struct intel_connector *connector = to_intel_connector(_connector);
 
-	intel_connector_unregister(connector);
-	drm_dp_mst_connector_early_unregister(connector,
-					      intel_connector->port);
+	intel_connector_unregister(&connector->base);
+	drm_dp_mst_connector_early_unregister(&connector->base, connector->port);
 }
 
 static const struct drm_connector_funcs mst_connector_funcs = {
@@ -1406,23 +1402,25 @@ static const struct drm_connector_funcs mst_connector_funcs = {
 	.atomic_duplicate_state = intel_digital_connector_duplicate_state,
 };
 
-static int mst_connector_get_modes(struct drm_connector *connector)
+static int mst_connector_get_modes(struct drm_connector *_connector)
 {
-	return mst_connector_get_ddc_modes(connector);
+	struct intel_connector *connector = to_intel_connector(_connector);
+
+	return mst_connector_get_ddc_modes(&connector->base);
 }
 
 static int
-mst_connector_mode_valid_ctx(struct drm_connector *connector,
+mst_connector_mode_valid_ctx(struct drm_connector *_connector,
 			     struct drm_display_mode *mode,
 			     struct drm_modeset_acquire_ctx *ctx,
 			     enum drm_mode_status *status)
 {
-	struct intel_display *display = to_intel_display(connector->dev);
-	struct drm_i915_private *dev_priv = to_i915(connector->dev);
-	struct intel_connector *intel_connector = to_intel_connector(connector);
-	struct intel_dp *intel_dp = intel_connector->mst_port;
+	struct intel_connector *connector = to_intel_connector(_connector);
+	struct intel_display *display = to_intel_display(connector->base.dev);
+	struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
+	struct intel_dp *intel_dp = connector->mst_port;
 	struct drm_dp_mst_topology_mgr *mgr = &intel_dp->mst_mgr;
-	struct drm_dp_mst_port *port = intel_connector->port;
+	struct drm_dp_mst_port *port = connector->port;
 	const int min_bpp = 18;
 	int max_dotclk = display->cdclk.max_dotclk_freq;
 	int max_rate, mode_rate, max_lanes, max_link_clock;
@@ -1433,7 +1431,7 @@ mst_connector_mode_valid_ctx(struct drm_connector *connector,
 	int target_clock = mode->clock;
 	int num_joined_pipes;
 
-	if (drm_connector_is_unregistered(connector)) {
+	if (drm_connector_is_unregistered(&connector->base)) {
 		*status = MODE_ERROR;
 		return 0;
 	}
@@ -1471,7 +1469,7 @@ mst_connector_mode_valid_ctx(struct drm_connector *connector,
 	 *   corresponding link capabilities of the sink) in case the
 	 *   stream is uncompressed for it by the last branch device.
 	 */
-	num_joined_pipes = intel_dp_num_joined_pipes(intel_dp, intel_connector,
+	num_joined_pipes = intel_dp_num_joined_pipes(intel_dp, connector,
 						     mode->hdisplay, target_clock);
 	max_dotclk *= num_joined_pipes;
 
@@ -1485,14 +1483,14 @@ mst_connector_mode_valid_ctx(struct drm_connector *connector,
 		return 0;
 	}
 
-	if (intel_dp_has_dsc(intel_connector)) {
+	if (intel_dp_has_dsc(connector)) {
 		/*
 		 * TBD pass the connector BPC,
 		 * for now U8_MAX so that max BPC on that platform would be picked
 		 */
-		int pipe_bpp = intel_dp_dsc_compute_max_bpp(intel_connector, U8_MAX);
+		int pipe_bpp = intel_dp_dsc_compute_max_bpp(connector, U8_MAX);
 
-		if (drm_dp_sink_supports_fec(intel_connector->dp.fec_capability)) {
+		if (drm_dp_sink_supports_fec(connector->dp.fec_capability)) {
 			dsc_max_compressed_bpp =
 				intel_dp_dsc_get_max_compressed_bpp(dev_priv,
 								    max_link_clock,
@@ -1503,7 +1501,7 @@ mst_connector_mode_valid_ctx(struct drm_connector *connector,
 								    INTEL_OUTPUT_FORMAT_RGB,
 								    pipe_bpp, 64);
 			dsc_slice_count =
-				intel_dp_dsc_get_slice_count(intel_connector,
+				intel_dp_dsc_get_slice_count(connector,
 							     target_clock,
 							     mode->hdisplay,
 							     num_joined_pipes);
@@ -1527,40 +1525,40 @@ mst_connector_mode_valid_ctx(struct drm_connector *connector,
 }
 
 static struct drm_encoder *
-mst_connector_atomic_best_encoder(struct drm_connector *connector,
+mst_connector_atomic_best_encoder(struct drm_connector *_connector,
 				  struct drm_atomic_state *state)
 {
-	struct drm_connector_state *connector_state = drm_atomic_get_new_connector_state(state,
-											 connector);
-	struct intel_connector *intel_connector = to_intel_connector(connector);
-	struct intel_dp *intel_dp = intel_connector->mst_port;
+	struct intel_connector *connector = to_intel_connector(_connector);
+	struct drm_connector_state *connector_state =
+		drm_atomic_get_new_connector_state(state, &connector->base);
+	struct intel_dp *intel_dp = connector->mst_port;
 	struct intel_crtc *crtc = to_intel_crtc(connector_state->crtc);
 
 	return &intel_dp->mst_encoders[crtc->pipe]->base.base;
 }
 
 static int
-mst_connector_detect_ctx(struct drm_connector *connector,
+mst_connector_detect_ctx(struct drm_connector *_connector,
 			 struct drm_modeset_acquire_ctx *ctx, bool force)
 {
-	struct intel_display *display = to_intel_display(connector->dev);
-	struct drm_i915_private *i915 = to_i915(connector->dev);
-	struct intel_connector *intel_connector = to_intel_connector(connector);
-	struct intel_dp *intel_dp = intel_connector->mst_port;
+	struct intel_connector *connector = to_intel_connector(_connector);
+	struct intel_display *display = to_intel_display(connector->base.dev);
+	struct drm_i915_private *i915 = to_i915(connector->base.dev);
+	struct intel_dp *intel_dp = connector->mst_port;
 
 	if (!intel_display_device_enabled(display))
 		return connector_status_disconnected;
 
-	if (drm_connector_is_unregistered(connector))
+	if (drm_connector_is_unregistered(&connector->base))
 		return connector_status_disconnected;
 
 	if (!intel_display_driver_check_access(i915))
-		return connector->status;
+		return connector->base.status;
 
-	intel_dp_flush_connector_commits(intel_connector);
+	intel_dp_flush_connector_commits(connector);
 
-	return drm_dp_mst_detect_port(connector, ctx, &intel_dp->mst_mgr,
-				      intel_connector->port);
+	return drm_dp_mst_detect_port(&connector->base, ctx, &intel_dp->mst_mgr,
+				      connector->port);
 }
 
 static const struct drm_connector_helper_funcs mst_connector_helper_funcs = {
@@ -1596,29 +1594,30 @@ static bool mst_connector_get_hw_state(struct intel_connector *connector)
 }
 
 static int mst_topology_add_connector_properties(struct intel_dp *intel_dp,
-						 struct drm_connector *connector,
+						 struct drm_connector *_connector,
 						 const char *pathprop)
 {
 	struct intel_display *display = to_intel_display(intel_dp);
+	struct intel_connector *connector = to_intel_connector(_connector);
 
-	drm_object_attach_property(&connector->base,
+	drm_object_attach_property(&connector->base.base,
 				   display->drm->mode_config.path_property, 0);
-	drm_object_attach_property(&connector->base,
+	drm_object_attach_property(&connector->base.base,
 				   display->drm->mode_config.tile_property, 0);
 
-	intel_attach_force_audio_property(connector);
-	intel_attach_broadcast_rgb_property(connector);
+	intel_attach_force_audio_property(&connector->base);
+	intel_attach_broadcast_rgb_property(&connector->base);
 
 	/*
 	 * Reuse the prop from the SST connector because we're
 	 * not allowed to create new props after device registration.
 	 */
-	connector->max_bpc_property =
+	connector->base.max_bpc_property =
 		intel_dp->attached_connector->base.max_bpc_property;
-	if (connector->max_bpc_property)
-		drm_connector_attach_max_bpc_property(connector, 6, 12);
+	if (connector->base.max_bpc_property)
+		drm_connector_attach_max_bpc_property(&connector->base, 6, 12);
 
-	return drm_connector_set_path_property(connector, pathprop);
+	return drm_connector_set_path_property(&connector->base, pathprop);
 }
 
 static void
@@ -1691,64 +1690,61 @@ mst_topology_add_connector(struct drm_dp_mst_topology_mgr *mgr,
 	struct intel_dp *intel_dp = container_of(mgr, struct intel_dp, mst_mgr);
 	struct intel_display *display = to_intel_display(intel_dp);
 	struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
-	struct intel_connector *intel_connector;
-	struct drm_connector *connector;
+	struct intel_connector *connector;
 	enum pipe pipe;
 	int ret;
 
-	intel_connector = intel_connector_alloc();
-	if (!intel_connector)
+	connector = intel_connector_alloc();
+	if (!connector)
 		return NULL;
 
-	connector = &intel_connector->base;
-
-	intel_connector->get_hw_state = mst_connector_get_hw_state;
-	intel_connector->sync_state = intel_dp_connector_sync_state;
-	intel_connector->mst_port = intel_dp;
-	intel_connector->port = port;
+	connector->get_hw_state = mst_connector_get_hw_state;
+	connector->sync_state = intel_dp_connector_sync_state;
+	connector->mst_port = intel_dp;
+	connector->port = port;
 	drm_dp_mst_get_port_malloc(port);
 
-	intel_dp_init_modeset_retry_work(intel_connector);
+	intel_dp_init_modeset_retry_work(connector);
 
-	ret = drm_connector_init_core(display->drm, connector, &mst_connector_funcs,
+	ret = drm_connector_init_core(display->drm, &connector->base, &mst_connector_funcs,
 				      DRM_MODE_CONNECTOR_DisplayPort, NULL);
 	if (ret)
 		goto err_put_port;
 
-	intel_connector->dp.dsc_decompression_aux = drm_dp_mst_dsc_aux_for_port(port);
-	intel_dp_mst_read_decompression_port_dsc_caps(intel_dp, intel_connector);
-	intel_connector->dp.dsc_hblank_expansion_quirk =
-		detect_dsc_hblank_expansion_quirk(intel_connector);
+	connector->dp.dsc_decompression_aux = drm_dp_mst_dsc_aux_for_port(port);
+	intel_dp_mst_read_decompression_port_dsc_caps(intel_dp, connector);
+	connector->dp.dsc_hblank_expansion_quirk =
+		detect_dsc_hblank_expansion_quirk(connector);
 
-	drm_connector_helper_add(connector, &mst_connector_helper_funcs);
+	drm_connector_helper_add(&connector->base, &mst_connector_helper_funcs);
 
 	for_each_pipe(display, pipe) {
 		struct drm_encoder *enc =
 			&intel_dp->mst_encoders[pipe]->base.base;
 
-		ret = drm_connector_attach_encoder(&intel_connector->base, enc);
+		ret = drm_connector_attach_encoder(&connector->base, enc);
 		if (ret)
 			goto err_cleanup_connector;
 	}
 
-	ret = mst_topology_add_connector_properties(intel_dp, connector, pathprop);
+	ret = mst_topology_add_connector_properties(intel_dp, &connector->base, pathprop);
 	if (ret)
 		goto err_cleanup_connector;
 
-	ret = intel_dp_hdcp_init(dig_port, intel_connector);
+	ret = intel_dp_hdcp_init(dig_port, connector);
 	if (ret)
 		drm_dbg_kms(display->drm, "[%s:%d] HDCP MST init failed, skipping.\n",
-			    connector->name, connector->base.id);
+			    connector->base.name, connector->base.base.id);
 
-	drm_connector_add(connector);
+	drm_connector_add(&connector->base);
 
-	return connector;
+	return &connector->base;
 
 err_cleanup_connector:
-	drm_connector_cleanup(connector);
+	drm_connector_cleanup(&connector->base);
 err_put_port:
 	drm_dp_mst_put_port_malloc(port);
-	intel_connector_free(intel_connector);
+	intel_connector_free(connector);
 
 	return NULL;
 }
-- 
2.44.2


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

* ✗ Fi.CI.SPARSE: warning for drm/dp: Expose only a properly inited connector
  2024-11-26 16:18 [PATCH v2 0/4] drm/dp: Expose only a properly inited connector Imre Deak
                   ` (3 preceding siblings ...)
  2024-11-26 16:18 ` [PATCH v2 4/4] drm/i915/dp_mst: Use intel_connector vs. drm_connector pointer in intel_dp_mst.c Imre Deak
@ 2024-11-26 16:51 ` Patchwork
  2024-11-26 17:05 ` ✓ i915.CI.BAT: success " Patchwork
  2024-11-26 18:30 ` ✗ i915.CI.Full: failure " Patchwork
  6 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2024-11-26 16:51 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-gfx

== Series Details ==

Series: drm/dp: Expose only a properly inited connector
URL   : https://patchwork.freedesktop.org/series/141797/
State : warning

== Summary ==

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



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

* ✓ i915.CI.BAT: success for drm/dp: Expose only a properly inited connector
  2024-11-26 16:18 [PATCH v2 0/4] drm/dp: Expose only a properly inited connector Imre Deak
                   ` (4 preceding siblings ...)
  2024-11-26 16:51 ` ✗ Fi.CI.SPARSE: warning for drm/dp: Expose only a properly inited connector Patchwork
@ 2024-11-26 17:05 ` Patchwork
  2024-11-26 18:30 ` ✗ i915.CI.Full: failure " Patchwork
  6 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2024-11-26 17:05 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-gfx

== Series Details ==

Series: drm/dp: Expose only a properly inited connector
URL   : https://patchwork.freedesktop.org/series/141797/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_15749 -> Patchwork_141797v1
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

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

Participating hosts (45 -> 43)
------------------------------

  Missing    (2): fi-glk-j4005 fi-snb-2520m 

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

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

### IGT changes ###

#### Suppressed ####

  The following results come from untrusted machines, tests, or statuses.
  They do not affect the overall result.

  * igt@i915_selftest@live:
    - {bat-mtlp-9}:       [ABORT][1] ([i915#12061]) -> [ABORT][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/bat-mtlp-9/igt@i915_selftest@live.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/bat-mtlp-9/igt@i915_selftest@live.html

  * igt@kms_flip@basic-flip-vs-wf_vblank@b-dp7:
    - {bat-mtlp-9}:       [PASS][3] -> [FAIL][4]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/bat-mtlp-9/igt@kms_flip@basic-flip-vs-wf_vblank@b-dp7.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/bat-mtlp-9/igt@kms_flip@basic-flip-vs-wf_vblank@b-dp7.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@gem_lmem_swapping@parallel-random-engines:
    - bat-rplp-1:         NOTRUN -> [SKIP][5] ([i915#4613]) +3 other tests skip
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/bat-rplp-1/igt@gem_lmem_swapping@parallel-random-engines.html

  * igt@i915_pm_rpm@module-reload:
    - bat-adls-6:         [PASS][6] -> [FAIL][7] ([i915#12903])
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/bat-adls-6/igt@i915_pm_rpm@module-reload.html
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/bat-adls-6/igt@i915_pm_rpm@module-reload.html
    - bat-dg1-7:          [PASS][8] -> [FAIL][9] ([i915#12903])
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/bat-dg1-7/igt@i915_pm_rpm@module-reload.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/bat-dg1-7/igt@i915_pm_rpm@module-reload.html

  * igt@i915_selftest@live:
    - bat-arls-5:         NOTRUN -> [ABORT][10] ([i915#12061])
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/bat-arls-5/igt@i915_selftest@live.html

  * igt@i915_selftest@live@workarounds:
    - bat-arls-5:         [PASS][11] -> [ABORT][12] ([i915#12061])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/bat-arls-5/igt@i915_selftest@live@workarounds.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/bat-arls-5/igt@i915_selftest@live@workarounds.html

  * igt@prime_vgem@basic-read:
    - bat-rplp-1:         NOTRUN -> [SKIP][13] ([i915#3708]) +2 other tests skip
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/bat-rplp-1/igt@prime_vgem@basic-read.html

  
#### Possible fixes ####

  * igt@i915_selftest@live:
    - fi-skl-6600u:       [INCOMPLETE][14] ([i915#13050]) -> [PASS][15]
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/fi-skl-6600u/igt@i915_selftest@live.html
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/fi-skl-6600u/igt@i915_selftest@live.html

  * igt@i915_selftest@live@gt_lrc:
    - fi-skl-6600u:       [INCOMPLETE][16] -> [PASS][17]
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/fi-skl-6600u/igt@i915_selftest@live@gt_lrc.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/fi-skl-6600u/igt@i915_selftest@live@gt_lrc.html

  * igt@i915_selftest@live@workarounds:
    - bat-arlh-3:         [ABORT][18] ([i915#12061]) -> [PASS][19] +1 other test pass
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/bat-arlh-3/igt@i915_selftest@live@workarounds.html
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/bat-arlh-3/igt@i915_selftest@live@workarounds.html
    - bat-arlh-2:         [ABORT][20] ([i915#12061]) -> [PASS][21] +1 other test pass
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/bat-arlh-2/igt@i915_selftest@live@workarounds.html
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/bat-arlh-2/igt@i915_selftest@live@workarounds.html

  * igt@kms_flip@basic-flip-vs-dpms:
    - bat-apl-1:          [DMESG-WARN][22] ([i915#12921]) -> [PASS][23]
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/bat-apl-1/igt@kms_flip@basic-flip-vs-dpms.html
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/bat-apl-1/igt@kms_flip@basic-flip-vs-dpms.html

  * igt@kms_flip@basic-flip-vs-dpms@b-dp1:
    - bat-apl-1:          [DMESG-WARN][24] ([i915#12918]) -> [PASS][25] +1 other test pass
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/bat-apl-1/igt@kms_flip@basic-flip-vs-dpms@b-dp1.html
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/bat-apl-1/igt@kms_flip@basic-flip-vs-dpms@b-dp1.html

  * igt@kms_flip@basic-flip-vs-modeset@b-dp1:
    - bat-apl-1:          [DMESG-WARN][26] -> [PASS][27]
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/bat-apl-1/igt@kms_flip@basic-flip-vs-modeset@b-dp1.html
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/bat-apl-1/igt@kms_flip@basic-flip-vs-modeset@b-dp1.html

  * igt@prime_vgem@basic-fence-flip:
    - bat-rplp-1:         [INCOMPLETE][28] -> [PASS][29]
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/bat-rplp-1/igt@prime_vgem@basic-fence-flip.html
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/bat-rplp-1/igt@prime_vgem@basic-fence-flip.html

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

  [i915#11989]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11989
  [i915#12061]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12061
  [i915#12903]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12903
  [i915#12918]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12918
  [i915#12921]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12921
  [i915#13050]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13050
  [i915#3708]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3708
  [i915#4613]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/4613


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

  * Linux: CI_DRM_15749 -> Patchwork_141797v1

  CI-20190529: 20190529
  CI_DRM_15749: 739a2506c44a0be22cc842d2c625a05ed21c1198 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGT_8126: 8126
  Patchwork_141797v1: 739a2506c44a0be22cc842d2c625a05ed21c1198 @ git://anongit.freedesktop.org/gfx-ci/linux

== Logs ==

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

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

* ✗ i915.CI.Full: failure for drm/dp: Expose only a properly inited connector
  2024-11-26 16:18 [PATCH v2 0/4] drm/dp: Expose only a properly inited connector Imre Deak
                   ` (5 preceding siblings ...)
  2024-11-26 17:05 ` ✓ i915.CI.BAT: success " Patchwork
@ 2024-11-26 18:30 ` Patchwork
  6 siblings, 0 replies; 25+ messages in thread
From: Patchwork @ 2024-11-26 18:30 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-gfx

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

== Series Details ==

Series: drm/dp: Expose only a properly inited connector
URL   : https://patchwork.freedesktop.org/series/141797/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_15749_full -> Patchwork_141797v1_full
====================================================

Summary
-------

  **FAILURE**

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

  

Participating hosts (10 -> 10)
------------------------------

  No changes in participating hosts

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@core_setmaster@master-drop-set-shared-fd:
    - shard-dg2:          [PASS][1] -> [SKIP][2]
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@core_setmaster@master-drop-set-shared-fd.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@core_setmaster@master-drop-set-shared-fd.html

  * igt@gem_ctx_param@invalid-get-no-zeromap:
    - shard-dg1:          NOTRUN -> [INCOMPLETE][3]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-18/igt@gem_ctx_param@invalid-get-no-zeromap.html

  * igt@gem_lmem_evict@dontneed-evict-race:
    - shard-dg2:          NOTRUN -> [SKIP][4] +1 other test skip
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@gem_lmem_evict@dontneed-evict-race.html

  * igt@gem_tiled_swapping@non-threaded:
    - shard-tglu:         [PASS][5] -> [FAIL][6]
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-tglu-2/igt@gem_tiled_swapping@non-threaded.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-7/igt@gem_tiled_swapping@non-threaded.html

  * igt@i915_selftest@live@objects:
    - shard-dg2:          NOTRUN -> [FAIL][7] +37 other tests fail
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@i915_selftest@live@objects.html

  
#### Warnings ####

  * igt@device_reset@cold-reset-bound:
    - shard-dg2:          [SKIP][8] ([i915#11078]) -> [SKIP][9]
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@device_reset@cold-reset-bound.html
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@device_reset@cold-reset-bound.html

  * igt@gem_exec_capture@capture@vecs0-lmem0:
    - shard-dg1:          [FAIL][10] ([i915#11965] / [i915#12558]) -> [INCOMPLETE][11] +1 other test incomplete
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg1-12/igt@gem_exec_capture@capture@vecs0-lmem0.html
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-12/igt@gem_exec_capture@capture@vecs0-lmem0.html

  * igt@perf_pmu@busy-double-start:
    - shard-dg2:          [FAIL][12] ([i915#4349]) -> [SKIP][13]
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@perf_pmu@busy-double-start.html
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@perf_pmu@busy-double-start.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@api_intel_bb@object-reloc-purge-cache:
    - shard-dg1:          NOTRUN -> [SKIP][14] ([i915#8411])
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@api_intel_bb@object-reloc-purge-cache.html

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

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

  * igt@drm_fdinfo@busy-idle-check-all@vcs0:
    - shard-dg2:          NOTRUN -> [SKIP][17] ([i915#8414]) +7 other tests skip
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@drm_fdinfo@busy-idle-check-all@vcs0.html

  * igt@drm_fdinfo@virtual-busy-all:
    - shard-dg1:          NOTRUN -> [SKIP][18] ([i915#8414])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-17/igt@drm_fdinfo@virtual-busy-all.html

  * igt@fbdev@write:
    - shard-dg2:          [PASS][19] -> [SKIP][20] ([i915#2582])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@fbdev@write.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@fbdev@write.html

  * igt@gem_ccs@block-multicopy-inplace:
    - shard-tglu-1:       NOTRUN -> [SKIP][21] ([i915#3555] / [i915#9323])
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@gem_ccs@block-multicopy-inplace.html

  * igt@gem_ccs@suspend-resume:
    - shard-tglu-1:       NOTRUN -> [SKIP][22] ([i915#9323])
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@gem_ccs@suspend-resume.html
    - shard-dg1:          NOTRUN -> [SKIP][23] ([i915#9323])
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-17/igt@gem_ccs@suspend-resume.html

  * igt@gem_ccs@suspend-resume@tile64-compressed-compfmt0-smem-lmem0:
    - shard-dg2:          NOTRUN -> [INCOMPLETE][24] ([i915#12392])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-7/igt@gem_ccs@suspend-resume@tile64-compressed-compfmt0-smem-lmem0.html

  * igt@gem_ctx_freq@sysfs:
    - shard-dg2:          [PASS][25] -> [FAIL][26] ([i915#9561]) +1 other test fail
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-4/igt@gem_ctx_freq@sysfs.html
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-3/igt@gem_ctx_freq@sysfs.html

  * igt@gem_ctx_persistence@engines-cleanup:
    - shard-snb:          NOTRUN -> [SKIP][27] ([i915#1099])
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-snb4/igt@gem_ctx_persistence@engines-cleanup.html

  * igt@gem_ctx_persistence@hang:
    - shard-dg2:          NOTRUN -> [SKIP][28] ([i915#8555])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@gem_ctx_persistence@hang.html

  * igt@gem_ctx_persistence@heartbeat-many:
    - shard-dg1:          NOTRUN -> [SKIP][29] ([i915#8555])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@gem_ctx_persistence@heartbeat-many.html

  * igt@gem_ctx_persistence@saturated-hostile-nopreempt@ccs0:
    - shard-dg2:          NOTRUN -> [SKIP][30] ([i915#5882]) +6 other tests skip
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@gem_ctx_persistence@saturated-hostile-nopreempt@ccs0.html

  * igt@gem_exec_balancer@parallel-ordering:
    - shard-tglu-1:       NOTRUN -> [FAIL][31] ([i915#6117])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@gem_exec_balancer@parallel-ordering.html

  * igt@gem_exec_balancer@sliced:
    - shard-dg2:          NOTRUN -> [SKIP][32] ([i915#4812]) +1 other test skip
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@gem_exec_balancer@sliced.html

  * igt@gem_exec_flush@basic-batch-kernel-default-uc:
    - shard-dg1:          NOTRUN -> [SKIP][33] ([i915#3539] / [i915#4852])
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@gem_exec_flush@basic-batch-kernel-default-uc.html

  * igt@gem_exec_reloc@basic-active:
    - shard-dg2:          NOTRUN -> [SKIP][34] ([i915#3281]) +1 other test skip
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@gem_exec_reloc@basic-active.html

  * igt@gem_exec_reloc@basic-wc-read-active:
    - shard-dg1:          NOTRUN -> [SKIP][35] ([i915#3281]) +4 other tests skip
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@gem_exec_reloc@basic-wc-read-active.html

  * igt@gem_fence_thrash@bo-write-verify-threaded-none:
    - shard-dg1:          NOTRUN -> [SKIP][36] ([i915#4860]) +1 other test skip
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@gem_fence_thrash@bo-write-verify-threaded-none.html

  * igt@gem_huc_copy@huc-copy:
    - shard-tglu:         NOTRUN -> [SKIP][37] ([i915#2190])
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-8/igt@gem_huc_copy@huc-copy.html

  * igt@gem_lmem_swapping@parallel-random-verify-ccs:
    - shard-tglu-1:       NOTRUN -> [SKIP][38] ([i915#4613]) +2 other tests skip
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@gem_lmem_swapping@parallel-random-verify-ccs.html
    - shard-glk:          NOTRUN -> [SKIP][39] ([i915#4613])
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-glk1/igt@gem_lmem_swapping@parallel-random-verify-ccs.html

  * igt@gem_lmem_swapping@verify-ccs:
    - shard-dg2:          [PASS][40] -> [SKIP][41] ([i915#12936]) +1 other test skip
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@gem_lmem_swapping@verify-ccs.html
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@gem_lmem_swapping@verify-ccs.html

  * igt@gem_mmap_gtt@basic-read:
    - shard-dg2:          NOTRUN -> [SKIP][42] ([i915#4077]) +2 other tests skip
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@gem_mmap_gtt@basic-read.html

  * igt@gem_mmap_wc@bad-size:
    - shard-dg2:          NOTRUN -> [SKIP][43] ([i915#4083])
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@gem_mmap_wc@bad-size.html

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

  * igt@gem_partial_pwrite_pread@writes-after-reads-display:
    - shard-dg2:          NOTRUN -> [SKIP][45] ([i915#3282])
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-5/igt@gem_partial_pwrite_pread@writes-after-reads-display.html
    - shard-mtlp:         NOTRUN -> [SKIP][46] ([i915#3282])
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-mtlp-2/igt@gem_partial_pwrite_pread@writes-after-reads-display.html

  * igt@gem_pread@self:
    - shard-dg1:          NOTRUN -> [SKIP][47] ([i915#3282]) +1 other test skip
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@gem_pread@self.html

  * igt@gem_pxp@create-regular-buffer:
    - shard-dg2:          NOTRUN -> [SKIP][48] ([i915#4270])
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@gem_pxp@create-regular-buffer.html

  * igt@gem_pxp@verify-pxp-stale-ctx-execution:
    - shard-dg1:          NOTRUN -> [SKIP][49] ([i915#4270]) +1 other test skip
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-13/igt@gem_pxp@verify-pxp-stale-ctx-execution.html

  * igt@gem_render_copy@yf-tiled-ccs-to-yf-tiled-ccs:
    - shard-dg2:          NOTRUN -> [SKIP][50] ([i915#5190] / [i915#8428])
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@gem_render_copy@yf-tiled-ccs-to-yf-tiled-ccs.html

  * igt@gem_set_tiling_vs_blt@untiled-to-tiled:
    - shard-dg1:          NOTRUN -> [SKIP][51] ([i915#4079]) +1 other test skip
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-17/igt@gem_set_tiling_vs_blt@untiled-to-tiled.html

  * igt@gem_tiled_partial_pwrite_pread@writes-after-reads:
    - shard-dg1:          NOTRUN -> [SKIP][52] ([i915#4077]) +10 other tests skip
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-13/igt@gem_tiled_partial_pwrite_pread@writes-after-reads.html

  * igt@gem_userptr_blits@unsync-overlap:
    - shard-tglu-1:       NOTRUN -> [SKIP][53] ([i915#3297])
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@gem_userptr_blits@unsync-overlap.html

  * igt@gen7_exec_parse@oacontrol-tracking:
    - shard-snb:          NOTRUN -> [SKIP][54] +68 other tests skip
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-snb4/igt@gen7_exec_parse@oacontrol-tracking.html

  * igt@gen9_exec_parse@bb-large:
    - shard-dg1:          NOTRUN -> [SKIP][55] ([i915#2527]) +2 other tests skip
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@gen9_exec_parse@bb-large.html

  * igt@gen9_exec_parse@bb-secure:
    - shard-tglu:         NOTRUN -> [SKIP][56] ([i915#2527] / [i915#2856])
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-8/igt@gen9_exec_parse@bb-secure.html

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

  * igt@i915_module_load@reload:
    - shard-dg2:          NOTRUN -> [FAIL][58] ([i915#12870])
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@i915_module_load@reload.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-tglu:         NOTRUN -> [ABORT][59] ([i915#12817] / [i915#9820])
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-10/igt@i915_module_load@reload-with-fault-injection.html
    - shard-glk:          NOTRUN -> [ABORT][60] ([i915#9820])
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-glk2/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_pm_freq_mult@media-freq@gt0:
    - shard-tglu-1:       NOTRUN -> [SKIP][61] ([i915#6590]) +1 other test skip
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@i915_pm_freq_mult@media-freq@gt0.html

  * igt@i915_pm_rps@reset:
    - shard-snb:          [PASS][62] -> [INCOMPLETE][63] ([i915#7790])
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-snb2/igt@i915_pm_rps@reset.html
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-snb6/igt@i915_pm_rps@reset.html

  * igt@i915_pm_sseu@full-enable:
    - shard-tglu-1:       NOTRUN -> [SKIP][64] ([i915#4387])
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@i915_pm_sseu@full-enable.html

  * igt@intel_hwmon@hwmon-read:
    - shard-tglu:         NOTRUN -> [SKIP][65] ([i915#7707])
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-8/igt@intel_hwmon@hwmon-read.html

  * igt@kms_addfb_basic@addfb25-x-tiled-mismatch-legacy:
    - shard-dg1:          NOTRUN -> [SKIP][66] ([i915#4212])
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_addfb_basic@addfb25-x-tiled-mismatch-legacy.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels:
    - shard-tglu-1:       NOTRUN -> [SKIP][67] ([i915#1769] / [i915#3555]) +1 other test skip
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/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][68] -> [FAIL][69] ([i915#11808] / [i915#5956]) +1 other test fail
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-mtlp-3/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-edp-1.html
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-mtlp-8/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-edp-1.html

  * igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-hdmi-a-1:
    - shard-tglu:         [PASS][70] -> [FAIL][71] ([i915#11808]) +1 other test fail
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-tglu-3/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-hdmi-a-1.html
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-4/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-hdmi-a-1.html

  * igt@kms_big_fb@4-tiled-16bpp-rotate-90:
    - shard-tglu-1:       NOTRUN -> [SKIP][72] ([i915#5286]) +2 other tests skip
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_big_fb@4-tiled-16bpp-rotate-90.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0:
    - shard-tglu:         NOTRUN -> [SKIP][73] ([i915#5286])
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-8/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
    - shard-dg1:          NOTRUN -> [SKIP][74] ([i915#4538] / [i915#5286]) +4 other tests skip
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-13/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html

  * igt@kms_big_fb@linear-16bpp-rotate-270:
    - shard-tglu:         NOTRUN -> [SKIP][75] +29 other tests skip
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-8/igt@kms_big_fb@linear-16bpp-rotate-270.html

  * igt@kms_big_fb@linear-64bpp-rotate-180:
    - shard-dg2:          [PASS][76] -> [SKIP][77] +18 other tests skip
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_big_fb@linear-64bpp-rotate-180.html
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_big_fb@linear-64bpp-rotate-180.html

  * igt@kms_big_fb@y-tiled-8bpp-rotate-90:
    - shard-dg1:          NOTRUN -> [SKIP][78] ([i915#3638]) +2 other tests skip
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_big_fb@y-tiled-8bpp-rotate-90.html

  * igt@kms_big_fb@y-tiled-addfb-size-offset-overflow:
    - shard-dg2:          NOTRUN -> [SKIP][79] ([i915#5190]) +4 other tests skip
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_big_fb@y-tiled-addfb-size-offset-overflow.html

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

  * igt@kms_big_fb@yf-tiled-64bpp-rotate-180:
    - shard-dg2:          NOTRUN -> [SKIP][81] ([i915#4538] / [i915#5190]) +1 other test skip
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip:
    - shard-dg1:          NOTRUN -> [SKIP][82] ([i915#4538]) +2 other tests skip
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip.html

  * igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs@pipe-b-dp-4:
    - shard-dg2:          NOTRUN -> [SKIP][83] ([i915#10307] / [i915#6095]) +74 other tests skip
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs@pipe-b-dp-4.html

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

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

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-bmg-ccs:
    - shard-tglu-1:       NOTRUN -> [SKIP][86] ([i915#12313])
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_ccs@crc-primary-rotation-180-4-tiled-bmg-ccs.html

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

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

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs:
    - shard-dg1:          NOTRUN -> [SKIP][89] ([i915#12313])
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs.html
    - shard-mtlp:         NOTRUN -> [SKIP][90] ([i915#12313])
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-mtlp-2/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs.html

  * igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-mc-ccs@pipe-b-hdmi-a-1:
    - shard-tglu-1:       NOTRUN -> [SKIP][91] ([i915#6095]) +49 other tests skip
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-mc-ccs@pipe-b-hdmi-a-1.html

  * igt@kms_cdclk@plane-scaling:
    - shard-tglu-1:       NOTRUN -> [SKIP][92] ([i915#3742])
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_cdclk@plane-scaling.html

  * igt@kms_cdclk@plane-scaling@pipe-b-hdmi-a-3:
    - shard-dg2:          NOTRUN -> [SKIP][93] ([i915#4087]) +3 other tests skip
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-3/igt@kms_cdclk@plane-scaling@pipe-b-hdmi-a-3.html

  * igt@kms_chamelium_edid@dp-edid-read:
    - shard-tglu-1:       NOTRUN -> [SKIP][94] ([i915#7828]) +4 other tests skip
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_chamelium_edid@dp-edid-read.html

  * igt@kms_chamelium_edid@dp-edid-stress-resolution-non-4k:
    - shard-dg2:          NOTRUN -> [SKIP][95] ([i915#7828]) +2 other tests skip
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@kms_chamelium_edid@dp-edid-stress-resolution-non-4k.html
    - shard-dg1:          NOTRUN -> [SKIP][96] ([i915#7828]) +5 other tests skip
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_chamelium_edid@dp-edid-stress-resolution-non-4k.html
    - shard-mtlp:         NOTRUN -> [SKIP][97] ([i915#7828])
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-mtlp-4/igt@kms_chamelium_edid@dp-edid-stress-resolution-non-4k.html

  * igt@kms_chamelium_frames@vga-frame-dump:
    - shard-tglu:         NOTRUN -> [SKIP][98] ([i915#7828]) +1 other test skip
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-8/igt@kms_chamelium_frames@vga-frame-dump.html

  * igt@kms_color@deep-color:
    - shard-tglu-1:       NOTRUN -> [SKIP][99] ([i915#3555] / [i915#9979])
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_color@deep-color.html

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

  * igt@kms_content_protection@dp-mst-lic-type-0:
    - shard-dg1:          NOTRUN -> [SKIP][101] ([i915#3299])
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_content_protection@dp-mst-lic-type-0.html

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

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

  * igt@kms_content_protection@lic-type-1:
    - shard-dg1:          NOTRUN -> [SKIP][104] ([i915#9424])
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-13/igt@kms_content_protection@lic-type-1.html

  * igt@kms_content_protection@srm:
    - shard-dg2:          NOTRUN -> [SKIP][105] ([i915#7118])
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@kms_content_protection@srm.html

  * igt@kms_content_protection@uevent:
    - shard-tglu:         NOTRUN -> [SKIP][106] ([i915#6944] / [i915#7116] / [i915#7118] / [i915#9424])
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-8/igt@kms_content_protection@uevent.html

  * igt@kms_cursor_crc@cursor-alpha-opaque:
    - shard-dg2:          NOTRUN -> [SKIP][107] ([i915#2575]) +70 other tests skip
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_cursor_crc@cursor-alpha-opaque.html

  * igt@kms_cursor_crc@cursor-offscreen-32x32:
    - shard-tglu-1:       NOTRUN -> [SKIP][108] ([i915#3555]) +2 other tests skip
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_cursor_crc@cursor-offscreen-32x32.html
    - shard-dg1:          NOTRUN -> [SKIP][109] ([i915#3555]) +1 other test skip
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-17/igt@kms_cursor_crc@cursor-offscreen-32x32.html

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

  * igt@kms_cursor_crc@cursor-random-512x512:
    - shard-dg1:          NOTRUN -> [SKIP][111] ([i915#13049]) +1 other test skip
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_cursor_crc@cursor-random-512x512.html

  * igt@kms_cursor_crc@cursor-random-max-size:
    - shard-rkl:          NOTRUN -> [SKIP][112] ([i915#3555])
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-rkl-1/igt@kms_cursor_crc@cursor-random-max-size.html

  * igt@kms_cursor_crc@cursor-rapid-movement-512x170:
    - shard-tglu:         NOTRUN -> [SKIP][113] ([i915#13049]) +1 other test skip
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-10/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions:
    - shard-dg1:          NOTRUN -> [SKIP][114] ([i915#4103] / [i915#4213])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html

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

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

  * igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-2:
    - shard-rkl:          NOTRUN -> [SKIP][117] ([i915#3804])
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-rkl-3/igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-2.html

  * igt@kms_dp_linktrain_fallback@dp-fallback:
    - shard-dg1:          NOTRUN -> [SKIP][118] ([i915#12402])
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_dp_linktrain_fallback@dp-fallback.html
    - shard-mtlp:         NOTRUN -> [SKIP][119] ([i915#12402])
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-mtlp-2/igt@kms_dp_linktrain_fallback@dp-fallback.html

  * igt@kms_dsc@dsc-basic:
    - shard-dg1:          NOTRUN -> [SKIP][120] ([i915#3555] / [i915#3840])
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-13/igt@kms_dsc@dsc-basic.html

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

  * igt@kms_dsc@dsc-with-bpc:
    - shard-tglu-1:       NOTRUN -> [SKIP][122] ([i915#3555] / [i915#3840])
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_dsc@dsc-with-bpc.html

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

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

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

  * igt@kms_flip@2x-dpms-vs-vblank-race:
    - shard-rkl:          NOTRUN -> [SKIP][126] ([i915#9934])
   [126]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-rkl-1/igt@kms_flip@2x-dpms-vs-vblank-race.html

  * igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset-interruptible:
    - shard-dg1:          NOTRUN -> [SKIP][127] ([i915#9934]) +5 other tests skip
   [127]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_flip@2x-flip-vs-dpms-off-vs-modeset-interruptible.html

  * igt@kms_flip@2x-flip-vs-fences-interruptible:
    - shard-tglu-1:       NOTRUN -> [SKIP][128] ([i915#3637]) +3 other tests skip
   [128]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_flip@2x-flip-vs-fences-interruptible.html
    - shard-dg1:          NOTRUN -> [SKIP][129] ([i915#4423] / [i915#8381])
   [129]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-17/igt@kms_flip@2x-flip-vs-fences-interruptible.html

  * igt@kms_flip@2x-plain-flip-fb-recreate:
    - shard-tglu:         NOTRUN -> [SKIP][130] ([i915#3637]) +5 other tests skip
   [130]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-8/igt@kms_flip@2x-plain-flip-fb-recreate.html

  * igt@kms_flip@flip-vs-fences-interruptible:
    - shard-dg2:          NOTRUN -> [SKIP][131] ([i915#8381])
   [131]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@kms_flip@flip-vs-fences-interruptible.html

  * igt@kms_flip@plain-flip-ts-check-interruptible:
    - shard-dg1:          [PASS][132] -> [FAIL][133] ([i915#11989] / [i915#12517])
   [132]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg1-12/igt@kms_flip@plain-flip-ts-check-interruptible.html
   [133]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_flip@plain-flip-ts-check-interruptible.html

  * igt@kms_flip@plain-flip-ts-check-interruptible@d-hdmi-a4:
    - shard-dg1:          NOTRUN -> [FAIL][134] ([i915#11989])
   [134]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_flip@plain-flip-ts-check-interruptible@d-hdmi-a4.html

  * igt@kms_flip@wf_vblank-ts-check-interruptible@b-vga1:
    - shard-snb:          [PASS][135] -> [FAIL][136] ([i915#11989]) +2 other tests fail
   [135]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-snb1/igt@kms_flip@wf_vblank-ts-check-interruptible@b-vga1.html
   [136]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-snb7/igt@kms_flip@wf_vblank-ts-check-interruptible@b-vga1.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-downscaling@pipe-a-valid-mode:
    - shard-dg2:          NOTRUN -> [SKIP][137] ([i915#2672])
   [137]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-downscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling:
    - shard-dg1:          NOTRUN -> [SKIP][138] ([i915#2672] / [i915#3555])
   [138]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling@pipe-a-valid-mode:
    - shard-dg1:          NOTRUN -> [SKIP][139] ([i915#2587] / [i915#2672])
   [139]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-upscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling:
    - shard-tglu-1:       NOTRUN -> [SKIP][140] ([i915#2672] / [i915#3555])
   [140]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling@pipe-a-valid-mode:
    - shard-tglu-1:       NOTRUN -> [SKIP][141] ([i915#2587] / [i915#2672])
   [141]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling@pipe-a-valid-mode.html

  * igt@kms_flip_scaled_crc@flip-64bpp-linear-to-16bpp-linear-downscaling:
    - shard-mtlp:         NOTRUN -> [SKIP][142] ([i915#3555] / [i915#8810] / [i915#8813])
   [142]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-mtlp-4/igt@kms_flip_scaled_crc@flip-64bpp-linear-to-16bpp-linear-downscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-linear-to-16bpp-linear-downscaling@pipe-a-default-mode:
    - shard-mtlp:         NOTRUN -> [SKIP][143] ([i915#3555] / [i915#8810])
   [143]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-mtlp-4/igt@kms_flip_scaled_crc@flip-64bpp-linear-to-16bpp-linear-downscaling@pipe-a-default-mode.html

  * igt@kms_frontbuffer_tracking@fbc-2p-pri-indfb-multidraw:
    - shard-dg2:          NOTRUN -> [SKIP][144] ([i915#5354]) +8 other tests skip
   [144]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@kms_frontbuffer_tracking@fbc-2p-pri-indfb-multidraw.html

  * igt@kms_frontbuffer_tracking@fbc-rgb565-draw-pwrite:
    - shard-dg2:          [PASS][145] -> [FAIL][146] ([i915#6880])
   [145]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_frontbuffer_tracking@fbc-rgb565-draw-pwrite.html
   [146]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-rgb565-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbc-rgb565-draw-render:
    - shard-dg2:          NOTRUN -> [SKIP][147] +40 other tests skip
   [147]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_frontbuffer_tracking@fbc-rgb565-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-shrfb-draw-pwrite:
    - shard-dg1:          NOTRUN -> [SKIP][148] ([i915#3458]) +10 other tests skip
   [148]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-shrfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-gtt:
    - shard-dg2:          NOTRUN -> [SKIP][149] ([i915#8708]) +1 other test skip
   [149]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-5/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-gtt.html
    - shard-mtlp:         NOTRUN -> [SKIP][150] ([i915#8708])
   [150]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-mtlp-2/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-move:
    - shard-dg1:          NOTRUN -> [SKIP][151] ([i915#3458] / [i915#4423])
   [151]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-17/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-indfb-plflip-blt:
    - shard-dg1:          NOTRUN -> [SKIP][152] +26 other tests skip
   [152]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-indfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-mmap-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][153] ([i915#8708]) +11 other tests skip
   [153]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-13/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-pwrite:
    - shard-tglu-1:       NOTRUN -> [SKIP][154] +60 other tests skip
   [154]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-render:
    - shard-dg2:          NOTRUN -> [SKIP][155] ([i915#3458]) +2 other tests skip
   [155]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@kms_frontbuffer_tracking@psr-1p-primscrn-pri-shrfb-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-indfb-draw-blt:
    - shard-mtlp:         NOTRUN -> [SKIP][156] ([i915#1825]) +1 other test skip
   [156]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-mtlp-4/igt@kms_frontbuffer_tracking@psr-2p-primscrn-pri-indfb-draw-blt.html

  * igt@kms_hdr@bpc-switch-dpms:
    - shard-dg1:          NOTRUN -> [SKIP][157] ([i915#3555] / [i915#8228])
   [157]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_hdr@bpc-switch-dpms.html

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

  * igt@kms_joiner@basic-force-ultra-joiner:
    - shard-tglu-1:       NOTRUN -> [SKIP][159] ([i915#12394])
   [159]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_joiner@basic-force-ultra-joiner.html

  * igt@kms_joiner@basic-ultra-joiner:
    - shard-tglu-1:       NOTRUN -> [SKIP][160] ([i915#12339])
   [160]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_joiner@basic-ultra-joiner.html

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

  * igt@kms_joiner@invalid-modeset-ultra-joiner:
    - shard-tglu:         NOTRUN -> [SKIP][162] ([i915#12339])
   [162]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-5/igt@kms_joiner@invalid-modeset-ultra-joiner.html

  * igt@kms_lease@lease-unleased-crtc:
    - shard-dg1:          NOTRUN -> [ABORT][163] ([i915#4423]) +1 other test abort
   [163]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-17/igt@kms_lease@lease-unleased-crtc.html

  * igt@kms_lease@lease-unleased-crtc@pipe-d-hdmi-a-4:
    - shard-dg1:          NOTRUN -> [DMESG-WARN][164] ([i915#4423]) +3 other tests dmesg-warn
   [164]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-17/igt@kms_lease@lease-unleased-crtc@pipe-d-hdmi-a-4.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-dg1:          NOTRUN -> [SKIP][165] ([i915#1839])
   [165]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_plane_cursor@overlay@pipe-a-hdmi-a-2-size-256:
    - shard-rkl:          NOTRUN -> [DMESG-WARN][166] ([i915#12964]) +16 other tests dmesg-warn
   [166]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-rkl-3/igt@kms_plane_cursor@overlay@pipe-a-hdmi-a-2-size-256.html

  * igt@kms_plane_lowres@tiling-y:
    - shard-mtlp:         NOTRUN -> [SKIP][167] ([i915#3555] / [i915#8821])
   [167]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-mtlp-2/igt@kms_plane_lowres@tiling-y.html
    - shard-dg2:          NOTRUN -> [SKIP][168] ([i915#8821])
   [168]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-5/igt@kms_plane_lowres@tiling-y.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format:
    - shard-tglu-1:       NOTRUN -> [SKIP][169] ([i915#12247]) +14 other tests skip
   [169]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format.html
    - shard-dg1:          NOTRUN -> [SKIP][170] ([i915#12247]) +12 other tests skip
   [170]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-17/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][171] ([i915#12247]) +3 other tests skip
   [171]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-7/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-d.html

  * igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-c:
    - shard-tglu:         NOTRUN -> [SKIP][172] ([i915#12247]) +4 other tests skip
   [172]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-5/igt@kms_plane_scaling@plane-upscale-20x20-with-rotation@pipe-c.html

  * igt@kms_plane_scaling@plane-upscale-factor-0-25-with-rotation:
    - shard-dg2:          [PASS][173] -> [SKIP][174] ([i915#2575] / [i915#9423]) +1 other test skip
   [173]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@kms_plane_scaling@plane-upscale-factor-0-25-with-rotation.html
   [174]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_plane_scaling@plane-upscale-factor-0-25-with-rotation.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25:
    - shard-dg1:          NOTRUN -> [SKIP][175] ([i915#12247] / [i915#6953]) +1 other test skip
   [175]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-factor-0-25.html

  * igt@kms_plane_scaling@planes-scaler-unity-scaling:
    - shard-dg2:          NOTRUN -> [SKIP][176] ([i915#2575] / [i915#9423]) +1 other test skip
   [176]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_plane_scaling@planes-scaler-unity-scaling.html

  * igt@kms_pm_backlight@brightness-with-dpms:
    - shard-tglu-1:       NOTRUN -> [SKIP][177] ([i915#12343])
   [177]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_pm_backlight@brightness-with-dpms.html

  * igt@kms_pm_dc@dc3co-vpb-simulation:
    - shard-dg1:          NOTRUN -> [SKIP][178] ([i915#9685])
   [178]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_pm_dc@dc3co-vpb-simulation.html

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

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

  * igt@kms_pm_rpm@basic-rte:
    - shard-dg2:          [PASS][181] -> [SKIP][182] ([i915#12937])
   [181]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_pm_rpm@basic-rte.html
   [182]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_pm_rpm@basic-rte.html

  * igt@kms_pm_rpm@dpms-lpsp:
    - shard-dg2:          NOTRUN -> [SKIP][183] ([i915#9519])
   [183]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@kms_pm_rpm@dpms-lpsp.html

  * igt@kms_pm_rpm@i2c:
    - shard-dg2:          NOTRUN -> [SKIP][184] ([i915#12937])
   [184]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_pm_rpm@i2c.html

  * igt@kms_pm_rpm@modeset-lpsp-stress:
    - shard-dg2:          [PASS][185] -> [SKIP][186] ([i915#9519])
   [185]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-4/igt@kms_pm_rpm@modeset-lpsp-stress.html
   [186]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-3/igt@kms_pm_rpm@modeset-lpsp-stress.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress:
    - shard-rkl:          [PASS][187] -> [SKIP][188] ([i915#9519]) +4 other tests skip
   [187]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-rkl-3/igt@kms_pm_rpm@modeset-non-lpsp-stress.html
   [188]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-rkl-2/igt@kms_pm_rpm@modeset-non-lpsp-stress.html

  * igt@kms_pm_rpm@pm-caching:
    - shard-rkl:          [PASS][189] -> [DMESG-WARN][190] ([i915#12964]) +7 other tests dmesg-warn
   [189]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-rkl-1/igt@kms_pm_rpm@pm-caching.html
   [190]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-rkl-7/igt@kms_pm_rpm@pm-caching.html

  * igt@kms_prime@basic-modeset-hybrid:
    - shard-dg1:          NOTRUN -> [SKIP][191] ([i915#6524])
   [191]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_prime@basic-modeset-hybrid.html

  * igt@kms_psr2_sf@fbc-pr-overlay-primary-update-sf-dmg-area:
    - shard-tglu-1:       NOTRUN -> [SKIP][192] ([i915#11520]) +5 other tests skip
   [192]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_psr2_sf@fbc-pr-overlay-primary-update-sf-dmg-area.html

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

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

  * igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-fully-sf:
    - shard-dg1:          NOTRUN -> [SKIP][195] ([i915#11520]) +5 other tests skip
   [195]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_psr2_sf@pr-cursor-plane-move-continuous-exceed-fully-sf.html

  * igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-sf:
    - shard-snb:          NOTRUN -> [SKIP][196] ([i915#11520])
   [196]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-snb4/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-sf.html

  * igt@kms_psr2_sf@pr-primary-plane-update-sf-dmg-area-big-fb:
    - shard-dg2:          NOTRUN -> [SKIP][197] ([i915#11520])
   [197]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@kms_psr2_sf@pr-primary-plane-update-sf-dmg-area-big-fb.html

  * igt@kms_psr2_su@page_flip-nv12:
    - shard-tglu-1:       NOTRUN -> [SKIP][198] ([i915#9683])
   [198]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_psr2_su@page_flip-nv12.html

  * igt@kms_psr@fbc-pr-cursor-render:
    - shard-rkl:          NOTRUN -> [SKIP][199] ([i915#1072] / [i915#9732])
   [199]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-rkl-1/igt@kms_psr@fbc-pr-cursor-render.html

  * igt@kms_psr@fbc-pr-primary-mmap-gtt:
    - shard-mtlp:         NOTRUN -> [SKIP][200] ([i915#9688])
   [200]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-mtlp-2/igt@kms_psr@fbc-pr-primary-mmap-gtt.html

  * igt@kms_psr@fbc-psr2-cursor-mmap-gtt:
    - shard-glk:          NOTRUN -> [SKIP][201] +161 other tests skip
   [201]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-glk5/igt@kms_psr@fbc-psr2-cursor-mmap-gtt.html

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

  * igt@kms_psr@psr-sprite-mmap-cpu:
    - shard-tglu-1:       NOTRUN -> [SKIP][203] ([i915#9732]) +14 other tests skip
   [203]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_psr@psr-sprite-mmap-cpu.html

  * igt@kms_psr@psr2-cursor-blt:
    - shard-dg2:          NOTRUN -> [SKIP][204] ([i915#1072] / [i915#9732])
   [204]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@kms_psr@psr2-cursor-blt.html

  * igt@kms_psr@psr2-sprite-mmap-gtt:
    - shard-dg1:          NOTRUN -> [SKIP][205] ([i915#1072] / [i915#9732]) +14 other tests skip
   [205]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_psr@psr2-sprite-mmap-gtt.html

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

  * igt@kms_scaling_modes@scaling-mode-full:
    - shard-tglu:         NOTRUN -> [SKIP][207] ([i915#3555]) +1 other test skip
   [207]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-8/igt@kms_scaling_modes@scaling-mode-full.html

  * igt@kms_setmode@invalid-clone-single-crtc:
    - shard-dg2:          NOTRUN -> [SKIP][208] ([i915#3555])
   [208]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@kms_setmode@invalid-clone-single-crtc.html

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

  * igt@kms_vrr@seamless-rr-switch-vrr:
    - shard-dg1:          NOTRUN -> [SKIP][210] ([i915#9906]) +1 other test skip
   [210]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-13/igt@kms_vrr@seamless-rr-switch-vrr.html

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

  * igt@kms_writeback@writeback-pixel-formats:
    - shard-glk:          NOTRUN -> [SKIP][212] ([i915#2437])
   [212]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-glk1/igt@kms_writeback@writeback-pixel-formats.html
    - shard-tglu-1:       NOTRUN -> [SKIP][213] ([i915#2437] / [i915#9412])
   [213]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@kms_writeback@writeback-pixel-formats.html
    - shard-dg1:          NOTRUN -> [SKIP][214] ([i915#2437] / [i915#9412])
   [214]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-17/igt@kms_writeback@writeback-pixel-formats.html

  * igt@perf_pmu@all-busy-idle-check-all:
    - shard-dg2:          [PASS][215] -> [SKIP][216] ([i915#12506]) +4 other tests skip
   [215]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@perf_pmu@all-busy-idle-check-all.html
   [216]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@perf_pmu@all-busy-idle-check-all.html

  * igt@perf_pmu@enable-race:
    - shard-dg2:          NOTRUN -> [SKIP][217] ([i915#12506]) +6 other tests skip
   [217]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@perf_pmu@enable-race.html

  * igt@perf_pmu@rc6-all-gts:
    - shard-tglu-1:       NOTRUN -> [SKIP][218] ([i915#8516])
   [218]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-1/igt@perf_pmu@rc6-all-gts.html

  * igt@perf_pmu@rc6@other-idle-gt0:
    - shard-dg2:          NOTRUN -> [SKIP][219] ([i915#8516])
   [219]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-6/igt@perf_pmu@rc6@other-idle-gt0.html

  * igt@prime_busy@before:
    - shard-dg2:          [PASS][220] -> [SKIP][221] ([i915#2575]) +93 other tests skip
   [220]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@prime_busy@before.html
   [221]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@prime_busy@before.html

  * igt@prime_vgem@fence-read-hang:
    - shard-dg1:          NOTRUN -> [SKIP][222] ([i915#3708])
   [222]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@prime_vgem@fence-read-hang.html

  * igt@sriov_basic@enable-vfs-autoprobe-off:
    - shard-dg1:          NOTRUN -> [SKIP][223] ([i915#9917])
   [223]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-13/igt@sriov_basic@enable-vfs-autoprobe-off.html

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

  * igt@tools_test@sysfs_l3_parity:
    - shard-dg1:          NOTRUN -> [SKIP][225] ([i915#4818])
   [225]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@tools_test@sysfs_l3_parity.html

  
#### Possible fixes ####

  * igt@gem_ctx_engines@execute-allforone:
    - shard-dg2:          [SKIP][226] ([i915#2575]) -> [PASS][227] +66 other tests pass
   [226]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@gem_ctx_engines@execute-allforone.html
   [227]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@gem_ctx_engines@execute-allforone.html

  * igt@gem_ctx_persistence@hostile:
    - shard-tglu:         [FAIL][228] ([i915#11980] / [i915#12580]) -> [PASS][229]
   [228]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-tglu-5/igt@gem_ctx_persistence@hostile.html
   [229]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-2/igt@gem_ctx_persistence@hostile.html

  * igt@gem_lmem_swapping@heavy-random:
    - shard-dg2:          [SKIP][230] ([i915#12936]) -> [PASS][231]
   [230]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@gem_lmem_swapping@heavy-random.html
   [231]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@gem_lmem_swapping@heavy-random.html

  * igt@i915_module_load@reload-with-fault-injection:
    - shard-snb:          [ABORT][232] ([i915#9820]) -> [PASS][233]
   [232]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-snb7/igt@i915_module_load@reload-with-fault-injection.html
   [233]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-snb4/igt@i915_module_load@reload-with-fault-injection.html

  * igt@i915_power@sanity:
    - shard-mtlp:         [SKIP][234] ([i915#7984]) -> [PASS][235]
   [234]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-mtlp-8/igt@i915_power@sanity.html
   [235]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-mtlp-2/igt@i915_power@sanity.html

  * igt@i915_selftest@perf:
    - shard-dg2:          [FAIL][236] ([i915#12867]) -> [PASS][237] +4 other tests pass
   [236]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@i915_selftest@perf.html
   [237]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-7/igt@i915_selftest@perf.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180:
    - shard-mtlp:         [DMESG-FAIL][238] ([i915#11627]) -> [PASS][239]
   [238]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-mtlp-3/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180.html
   [239]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-mtlp-8/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180.html

  * igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-180:
    - shard-dg2:          [SKIP][240] -> [PASS][241] +10 other tests pass
   [240]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-180.html
   [241]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_big_fb@linear-max-hw-stride-64bpp-rotate-180.html

  * igt@kms_cursor_legacy@flip-vs-cursor-toggle:
    - shard-snb:          [FAIL][242] ([i915#2346]) -> [PASS][243] +1 other test pass
   [242]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-snb7/igt@kms_cursor_legacy@flip-vs-cursor-toggle.html
   [243]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-snb2/igt@kms_cursor_legacy@flip-vs-cursor-toggle.html

  * igt@kms_flip@flip-vs-blocking-wf-vblank:
    - shard-snb:          [FAIL][244] ([i915#11989]) -> [PASS][245] +1 other test pass
   [244]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-snb4/igt@kms_flip@flip-vs-blocking-wf-vblank.html
   [245]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-snb4/igt@kms_flip@flip-vs-blocking-wf-vblank.html

  * igt@kms_flip@flip-vs-suspend-interruptible@c-hdmi-a4:
    - shard-dg1:          [DMESG-WARN][246] ([i915#4423]) -> [PASS][247] +1 other test pass
   [246]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg1-14/igt@kms_flip@flip-vs-suspend-interruptible@c-hdmi-a4.html
   [247]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg1-14/igt@kms_flip@flip-vs-suspend-interruptible@c-hdmi-a4.html

  * igt@kms_flip@flip-vs-wf_vblank-interruptible:
    - shard-snb:          [FAIL][248] ([i915#10826]) -> [PASS][249] +1 other test pass
   [248]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-snb1/igt@kms_flip@flip-vs-wf_vblank-interruptible.html
   [249]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-snb6/igt@kms_flip@flip-vs-wf_vblank-interruptible.html

  * igt@kms_flip@wf_vblank-ts-check-interruptible@d-hdmi-a1:
    - shard-tglu:         [FAIL][250] ([i915#11989]) -> [PASS][251] +5 other tests pass
   [250]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-tglu-2/igt@kms_flip@wf_vblank-ts-check-interruptible@d-hdmi-a1.html
   [251]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-9/igt@kms_flip@wf_vblank-ts-check-interruptible@d-hdmi-a1.html

  * igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-pwrite:
    - shard-rkl:          [DMESG-WARN][252] ([i915#12964]) -> [PASS][253] +9 other tests pass
   [252]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-rkl-3/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-pwrite.html
   [253]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-rkl-5/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-pwrite.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-pwrite:
    - shard-dg2:          [FAIL][254] ([i915#6880]) -> [PASS][255] +2 other tests pass
   [254]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-5/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-pwrite.html
   [255]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-1/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-pwrite.html

  * igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5:
    - shard-dg2:          [SKIP][256] ([i915#2575] / [i915#9423]) -> [PASS][257] +1 other test pass
   [256]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5.html
   [257]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5.html

  * igt@kms_pm_dc@dc6-dpms:
    - shard-tglu:         [FAIL][258] ([i915#9295]) -> [PASS][259]
   [258]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-tglu-9/igt@kms_pm_dc@dc6-dpms.html
   [259]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-tglu-6/igt@kms_pm_dc@dc6-dpms.html

  * igt@kms_pm_rpm@modeset-non-lpsp:
    - shard-dg2:          [SKIP][260] ([i915#9519]) -> [PASS][261]
   [260]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-4/igt@kms_pm_rpm@modeset-non-lpsp.html
   [261]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-3/igt@kms_pm_rpm@modeset-non-lpsp.html

  * igt@kms_sysfs_edid_timing:
    - shard-dg2:          [FAIL][262] ([IGT#160]) -> [PASS][263]
   [262]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-1/igt@kms_sysfs_edid_timing.html
   [263]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_sysfs_edid_timing.html

  * igt@perf@stress-open-close:
    - shard-dg2:          [SKIP][264] ([i915#12506]) -> [PASS][265] +4 other tests pass
   [264]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@perf@stress-open-close.html
   [265]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@perf@stress-open-close.html

  * igt@perf_pmu@busy-idle@vecs0:
    - shard-mtlp:         [FAIL][266] ([i915#4349]) -> [PASS][267]
   [266]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-mtlp-3/igt@perf_pmu@busy-idle@vecs0.html
   [267]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-mtlp-7/igt@perf_pmu@busy-idle@vecs0.html

  * igt@perf_pmu@most-busy-idle-check-all@rcs0:
    - shard-rkl:          [FAIL][268] ([i915#4349]) -> [PASS][269] +3 other tests pass
   [268]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-rkl-2/igt@perf_pmu@most-busy-idle-check-all@rcs0.html
   [269]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-rkl-4/igt@perf_pmu@most-busy-idle-check-all@rcs0.html

  
#### Warnings ####

  * igt@drm_fdinfo@virtual-busy-all:
    - shard-dg2:          [SKIP][270] ([i915#12506]) -> [SKIP][271] ([i915#8414]) +1 other test skip
   [270]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@drm_fdinfo@virtual-busy-all.html
   [271]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-7/igt@drm_fdinfo@virtual-busy-all.html

  * igt@drm_fdinfo@virtual-busy-idle:
    - shard-dg2:          [SKIP][272] ([i915#8414]) -> [SKIP][273] ([i915#12506]) +1 other test skip
   [272]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@drm_fdinfo@virtual-busy-idle.html
   [273]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@drm_fdinfo@virtual-busy-idle.html

  * igt@gem_ccs@suspend-resume:
    - shard-dg2:          [SKIP][274] ([i915#2575]) -> [INCOMPLETE][275] ([i915#7297])
   [274]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@gem_ccs@suspend-resume.html
   [275]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-7/igt@gem_ccs@suspend-resume.html

  * igt@gem_ctx_persistence@heartbeat-hang:
    - shard-dg2:          [SKIP][276] ([i915#8555]) -> [SKIP][277] ([i915#2575]) +1 other test skip
   [276]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@gem_ctx_persistence@heartbeat-hang.html
   [277]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@gem_ctx_persistence@heartbeat-hang.html

  * igt@gem_ctx_persistence@saturated-hostile-nopreempt:
    - shard-dg2:          [SKIP][278] ([i915#2575]) -> [SKIP][279] ([i915#5882])
   [278]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@gem_ctx_persistence@saturated-hostile-nopreempt.html
   [279]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@gem_ctx_persistence@saturated-hostile-nopreempt.html

  * igt@gem_ctx_sseu@invalid-sseu:
    - shard-dg2:          [SKIP][280] ([i915#280]) -> [SKIP][281] ([i915#2575])
   [280]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@gem_ctx_sseu@invalid-sseu.html
   [281]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@gem_ctx_sseu@invalid-sseu.html

  * igt@gem_exec_balancer@bonded-true-hang:
    - shard-dg2:          [SKIP][282] ([i915#4812]) -> [SKIP][283] ([i915#2575]) +1 other test skip
   [282]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@gem_exec_balancer@bonded-true-hang.html
   [283]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@gem_exec_balancer@bonded-true-hang.html

  * igt@gem_exec_flush@basic-uc-ro-default:
    - shard-dg2:          [SKIP][284] ([i915#2575]) -> [SKIP][285] ([i915#3539] / [i915#4852])
   [284]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@gem_exec_flush@basic-uc-ro-default.html
   [285]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@gem_exec_flush@basic-uc-ro-default.html

  * igt@gem_exec_flush@basic-wb-rw-default:
    - shard-dg2:          [SKIP][286] ([i915#3539] / [i915#4852]) -> [SKIP][287] ([i915#2575])
   [286]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@gem_exec_flush@basic-wb-rw-default.html
   [287]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@gem_exec_flush@basic-wb-rw-default.html

  * igt@gem_exec_reloc@basic-cpu-read:
    - shard-dg2:          [SKIP][288] ([i915#3281]) -> [SKIP][289] ([i915#2575]) +1 other test skip
   [288]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@gem_exec_reloc@basic-cpu-read.html
   [289]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@gem_exec_reloc@basic-cpu-read.html

  * igt@gem_exec_reloc@basic-write-gtt:
    - shard-dg2:          [SKIP][290] ([i915#2575]) -> [SKIP][291] ([i915#3281]) +2 other tests skip
   [290]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@gem_exec_reloc@basic-write-gtt.html
   [291]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@gem_exec_reloc@basic-write-gtt.html

  * igt@gem_exec_schedule@preempt-queue:
    - shard-dg2:          [SKIP][292] ([i915#2575]) -> [SKIP][293] ([i915#4537] / [i915#4812])
   [292]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@gem_exec_schedule@preempt-queue.html
   [293]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@gem_exec_schedule@preempt-queue.html

  * igt@gem_exec_schedule@semaphore-power:
    - shard-dg2:          [SKIP][294] ([i915#4537] / [i915#4812]) -> [SKIP][295] ([i915#2575])
   [294]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@gem_exec_schedule@semaphore-power.html
   [295]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@gem_exec_schedule@semaphore-power.html

  * igt@gem_fence_thrash@bo-write-verify-none:
    - shard-dg2:          [SKIP][296] ([i915#4860]) -> [SKIP][297] ([i915#2575])
   [296]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@gem_fence_thrash@bo-write-verify-none.html
   [297]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@gem_fence_thrash@bo-write-verify-none.html

  * igt@gem_mmap@basic:
    - shard-dg2:          [SKIP][298] ([i915#4083]) -> [SKIP][299] ([i915#2575]) +3 other tests skip
   [298]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@gem_mmap@basic.html
   [299]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@gem_mmap@basic.html

  * igt@gem_mmap@basic-small-bo:
    - shard-dg2:          [SKIP][300] ([i915#2575]) -> [SKIP][301] ([i915#4083]) +1 other test skip
   [300]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@gem_mmap@basic-small-bo.html
   [301]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@gem_mmap@basic-small-bo.html

  * igt@gem_mmap_gtt@cpuset-medium-copy:
    - shard-dg2:          [SKIP][302] ([i915#2575]) -> [SKIP][303] ([i915#4077])
   [302]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@gem_mmap_gtt@cpuset-medium-copy.html
   [303]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@gem_mmap_gtt@cpuset-medium-copy.html

  * igt@gem_mmap_gtt@medium-copy:
    - shard-dg2:          [SKIP][304] ([i915#4077]) -> [SKIP][305] ([i915#2575]) +1 other test skip
   [304]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@gem_mmap_gtt@medium-copy.html
   [305]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@gem_mmap_gtt@medium-copy.html

  * igt@gem_partial_pwrite_pread@reads:
    - shard-dg2:          [SKIP][306] ([i915#3282]) -> [SKIP][307] ([i915#2575]) +2 other tests skip
   [306]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@gem_partial_pwrite_pread@reads.html
   [307]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@gem_partial_pwrite_pread@reads.html

  * igt@gem_pxp@fail-invalid-protected-context:
    - shard-dg2:          [SKIP][308] ([i915#4270]) -> [SKIP][309] ([i915#2575])
   [308]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@gem_pxp@fail-invalid-protected-context.html
   [309]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@gem_pxp@fail-invalid-protected-context.html

  * igt@gem_render_copy@y-tiled-mc-ccs-to-vebox-yf-tiled:
    - shard-dg2:          [SKIP][310] ([i915#5190] / [i915#8428]) -> [SKIP][311] ([i915#2575] / [i915#5190]) +3 other tests skip
   [310]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@gem_render_copy@y-tiled-mc-ccs-to-vebox-yf-tiled.html
   [311]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@gem_render_copy@y-tiled-mc-ccs-to-vebox-yf-tiled.html

  * igt@gem_render_copy@y-tiled-to-vebox-x-tiled:
    - shard-dg2:          [SKIP][312] ([i915#2575] / [i915#5190]) -> [SKIP][313] ([i915#5190] / [i915#8428]) +2 other tests skip
   [312]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@gem_render_copy@y-tiled-to-vebox-x-tiled.html
   [313]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-7/igt@gem_render_copy@y-tiled-to-vebox-x-tiled.html

  * igt@gem_tiled_pread_basic:
    - shard-dg2:          [SKIP][314] ([i915#4079]) -> [SKIP][315] ([i915#2575]) +1 other test skip
   [314]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@gem_tiled_pread_basic.html
   [315]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@gem_tiled_pread_basic.html

  * igt@gem_userptr_blits@create-destroy-unsync:
    - shard-dg2:          [SKIP][316] ([i915#3297]) -> [SKIP][317] ([i915#2575]) +1 other test skip
   [316]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@gem_userptr_blits@create-destroy-unsync.html
   [317]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@gem_userptr_blits@create-destroy-unsync.html

  * igt@gem_userptr_blits@map-fixed-invalidate-busy:
    - shard-dg2:          [SKIP][318] ([i915#2575]) -> [SKIP][319] ([i915#3297] / [i915#4880])
   [318]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@gem_userptr_blits@map-fixed-invalidate-busy.html
   [319]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@gem_userptr_blits@map-fixed-invalidate-busy.html

  * igt@gem_userptr_blits@unsync-unmap-after-close:
    - shard-dg2:          [SKIP][320] ([i915#2575]) -> [SKIP][321] ([i915#3297])
   [320]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@gem_userptr_blits@unsync-unmap-after-close.html
   [321]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@gem_userptr_blits@unsync-unmap-after-close.html

  * igt@gen3_render_linear_blits:
    - shard-dg2:          [SKIP][322] ([i915#2575]) -> [SKIP][323] +1 other test skip
   [322]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@gen3_render_linear_blits.html
   [323]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@gen3_render_linear_blits.html

  * igt@gen9_exec_parse@basic-rejected:
    - shard-dg2:          [SKIP][324] ([i915#2575]) -> [SKIP][325] ([i915#2856]) +1 other test skip
   [324]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@gen9_exec_parse@basic-rejected.html
   [325]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-7/igt@gen9_exec_parse@basic-rejected.html

  * igt@gen9_exec_parse@secure-batches:
    - shard-dg2:          [SKIP][326] ([i915#2856]) -> [SKIP][327] ([i915#2575]) +1 other test skip
   [326]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@gen9_exec_parse@secure-batches.html
   [327]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@gen9_exec_parse@secure-batches.html

  * igt@i915_pm_rpm@gem-evict-pwrite:
    - shard-dg2:          [SKIP][328] ([i915#13014]) -> [SKIP][329] ([i915#4077])
   [328]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@i915_pm_rpm@gem-evict-pwrite.html
   [329]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@i915_pm_rpm@gem-evict-pwrite.html

  * igt@i915_pm_sseu@full-enable:
    - shard-dg2:          [SKIP][330] ([i915#4387]) -> [SKIP][331] ([i915#2575])
   [330]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@i915_pm_sseu@full-enable.html
   [331]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@i915_pm_sseu@full-enable.html

  * igt@kms_addfb_basic@addfb25-framebuffer-vs-set-tiling:
    - shard-dg2:          [SKIP][332] ([i915#2575]) -> [SKIP][333] ([i915#4212])
   [332]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_addfb_basic@addfb25-framebuffer-vs-set-tiling.html
   [333]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_addfb_basic@addfb25-framebuffer-vs-set-tiling.html

  * igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
    - shard-dg2:          [SKIP][334] ([i915#2575] / [i915#5190]) -> [SKIP][335] ([i915#5190])
   [334]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
   [335]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels:
    - shard-dg2:          [SKIP][336] ([i915#1769] / [i915#3555]) -> [SKIP][337] ([i915#2575])
   [336]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels.html
   [337]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_atomic_transition@plane-all-modeset-transition-internal-panels.html

  * igt@kms_big_fb@y-tiled-8bpp-rotate-180:
    - shard-dg2:          [SKIP][338] ([i915#4538] / [i915#5190]) -> [SKIP][339] ([i915#5190]) +5 other tests skip
   [338]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@kms_big_fb@y-tiled-8bpp-rotate-180.html
   [339]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_big_fb@y-tiled-8bpp-rotate-180.html

  * igt@kms_big_fb@yf-tiled-32bpp-rotate-90:
    - shard-dg2:          [SKIP][340] ([i915#5190]) -> [SKIP][341] ([i915#4538] / [i915#5190]) +1 other test skip
   [340]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_big_fb@yf-tiled-32bpp-rotate-90.html
   [341]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_big_fb@yf-tiled-32bpp-rotate-90.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs:
    - shard-dg2:          [SKIP][342] ([i915#10307] / [i915#6095]) -> [SKIP][343] +6 other tests skip
   [342]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs.html
   [343]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs.html

  * igt@kms_ccs@random-ccs-data-y-tiled-gen12-rc-ccs-cc:
    - shard-dg2:          [SKIP][344] -> [SKIP][345] ([i915#10307] / [i915#6095]) +4 other tests skip
   [344]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_ccs@random-ccs-data-y-tiled-gen12-rc-ccs-cc.html
   [345]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_ccs@random-ccs-data-y-tiled-gen12-rc-ccs-cc.html

  * igt@kms_chamelium_color@ctm-blue-to-red:
    - shard-dg2:          [SKIP][346] -> [SKIP][347] ([i915#2575]) +2 other tests skip
   [346]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@kms_chamelium_color@ctm-blue-to-red.html
   [347]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_chamelium_color@ctm-blue-to-red.html

  * igt@kms_chamelium_edid@dp-edid-read:
    - shard-dg2:          [SKIP][348] ([i915#2575]) -> [SKIP][349] ([i915#7828]) +2 other tests skip
   [348]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_chamelium_edid@dp-edid-read.html
   [349]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-7/igt@kms_chamelium_edid@dp-edid-read.html

  * igt@kms_chamelium_hpd@hdmi-hpd-enable-disable-mode:
    - shard-dg2:          [SKIP][350] ([i915#7828]) -> [SKIP][351] ([i915#2575]) +2 other tests skip
   [350]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@kms_chamelium_hpd@hdmi-hpd-enable-disable-mode.html
   [351]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_chamelium_hpd@hdmi-hpd-enable-disable-mode.html

  * igt@kms_content_protection@dp-mst-lic-type-1:
    - shard-dg2:          [SKIP][352] ([i915#3299]) -> [SKIP][353] ([i915#2575])
   [352]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@kms_content_protection@dp-mst-lic-type-1.html
   [353]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_content_protection@dp-mst-lic-type-1.html

  * igt@kms_content_protection@dp-mst-type-0:
    - shard-dg2:          [SKIP][354] ([i915#2575]) -> [SKIP][355] ([i915#3299])
   [354]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_content_protection@dp-mst-type-0.html
   [355]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_content_protection@dp-mst-type-0.html

  * igt@kms_content_protection@legacy:
    - shard-dg2:          [SKIP][356] ([i915#7118] / [i915#9424]) -> [TIMEOUT][357] ([i915#7173])
   [356]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-1/igt@kms_content_protection@legacy.html
   [357]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_content_protection@legacy.html

  * igt@kms_content_protection@type1:
    - shard-dg2:          [SKIP][358] ([i915#7118] / [i915#9424]) -> [SKIP][359] ([i915#2575]) +1 other test skip
   [358]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_content_protection@type1.html
   [359]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_content_protection@type1.html

  * igt@kms_cursor_crc@cursor-rapid-movement-max-size:
    - shard-dg2:          [SKIP][360] ([i915#2575]) -> [SKIP][361] ([i915#3555]) +2 other tests skip
   [360]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_cursor_crc@cursor-rapid-movement-max-size.html
   [361]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_cursor_crc@cursor-rapid-movement-max-size.html

  * igt@kms_cursor_crc@cursor-sliding-32x10:
    - shard-dg2:          [SKIP][362] ([i915#3555]) -> [SKIP][363] ([i915#2575]) +2 other tests skip
   [362]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@kms_cursor_crc@cursor-sliding-32x10.html
   [363]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_cursor_crc@cursor-sliding-32x10.html

  * igt@kms_cursor_crc@cursor-sliding-512x170:
    - shard-dg2:          [SKIP][364] ([i915#2575]) -> [SKIP][365] ([i915#13049])
   [364]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_cursor_crc@cursor-sliding-512x170.html
   [365]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-7/igt@kms_cursor_crc@cursor-sliding-512x170.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy:
    - shard-dg2:          [SKIP][366] ([i915#4103] / [i915#4213]) -> [SKIP][367] ([i915#2575])
   [366]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html
   [367]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-legacy.html

  * igt@kms_cursor_legacy@cursora-vs-flipb-legacy:
    - shard-dg2:          [SKIP][368] ([i915#2575]) -> [SKIP][369] ([i915#5354])
   [368]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_cursor_legacy@cursora-vs-flipb-legacy.html
   [369]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_cursor_legacy@cursora-vs-flipb-legacy.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size:
    - shard-dg2:          [SKIP][370] ([i915#5354]) -> [SKIP][371] ([i915#2575])
   [370]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size.html
   [371]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size.html

  * igt@kms_display_modes@mst-extended-mode-negative:
    - shard-dg2:          [SKIP][372] ([i915#8588]) -> [SKIP][373] ([i915#2575])
   [372]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@kms_display_modes@mst-extended-mode-negative.html
   [373]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_display_modes@mst-extended-mode-negative.html

  * igt@kms_fbcon_fbt@psr:
    - shard-dg2:          [SKIP][374] ([i915#3469]) -> [SKIP][375]
   [374]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_fbcon_fbt@psr.html
   [375]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_fbcon_fbt@psr.html

  * igt@kms_feature_discovery@chamelium:
    - shard-dg2:          [SKIP][376] ([i915#4854]) -> [SKIP][377] ([i915#2575])
   [376]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_feature_discovery@chamelium.html
   [377]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_feature_discovery@chamelium.html

  * igt@kms_feature_discovery@psr2:
    - shard-dg2:          [SKIP][378] ([i915#658]) -> [SKIP][379] ([i915#2575])
   [378]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@kms_feature_discovery@psr2.html
   [379]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_feature_discovery@psr2.html

  * igt@kms_flip@2x-flip-vs-absolute-wf_vblank:
    - shard-dg2:          [SKIP][380] ([i915#2575]) -> [SKIP][381] ([i915#9934]) +1 other test skip
   [380]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_flip@2x-flip-vs-absolute-wf_vblank.html
   [381]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_flip@2x-flip-vs-absolute-wf_vblank.html

  * igt@kms_flip@2x-flip-vs-panning-vs-hang:
    - shard-dg2:          [SKIP][382] ([i915#9934]) -> [SKIP][383] ([i915#2575]) +2 other tests skip
   [382]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@kms_flip@2x-flip-vs-panning-vs-hang.html
   [383]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_flip@2x-flip-vs-panning-vs-hang.html

  * igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-downscaling:
    - shard-dg2:          [SKIP][384] -> [SKIP][385] ([i915#2672] / [i915#3555])
   [384]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-downscaling.html
   [385]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-32bpp-yftileccs-downscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling:
    - shard-dg2:          [SKIP][386] ([i915#2672] / [i915#3555] / [i915#5190]) -> [SKIP][387] ([i915#5190])
   [386]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling.html
   [387]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling:
    - shard-dg2:          [SKIP][388] ([i915#2672] / [i915#3555]) -> [SKIP][389]
   [388]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html
   [389]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-blt:
    - shard-dg2:          [SKIP][390] ([i915#5354]) -> [SKIP][391] +10 other tests skip
   [390]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-blt.html
   [391]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-cpu:
    - shard-dg2:          [SKIP][392] -> [SKIP][393] ([i915#5354]) +9 other tests skip
   [392]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-cpu.html
   [393]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-shrfb-draw-mmap-gtt:
    - shard-dg2:          [SKIP][394] -> [SKIP][395] ([i915#8708]) +2 other tests skip
   [394]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-shrfb-draw-mmap-gtt.html
   [395]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-7/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-shrfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-cpu:
    - shard-dg2:          [SKIP][396] ([i915#3458]) -> [SKIP][397] +8 other tests skip
   [396]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-cpu.html
   [397]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-pri-shrfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-indfb-draw-mmap-gtt:
    - shard-dg2:          [SKIP][398] ([i915#8708]) -> [SKIP][399] +6 other tests skip
   [398]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-indfb-draw-mmap-gtt.html
   [399]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_frontbuffer_tracking@psr-1p-offscren-pri-indfb-draw-mmap-gtt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-pgflip-blt:
    - shard-dg2:          [SKIP][400] -> [SKIP][401] ([i915#3458]) +6 other tests skip
   [400]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-pgflip-blt.html
   [401]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_frontbuffer_tracking@psr-1p-primscrn-indfb-pgflip-blt.html

  * igt@kms_joiner@basic-big-joiner:
    - shard-dg2:          [SKIP][402] ([i915#10656]) -> [SKIP][403]
   [402]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_joiner@basic-big-joiner.html
   [403]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_joiner@basic-big-joiner.html

  * igt@kms_joiner@basic-ultra-joiner:
    - shard-dg2:          [SKIP][404] ([i915#12339]) -> [SKIP][405]
   [404]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@kms_joiner@basic-ultra-joiner.html
   [405]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_joiner@basic-ultra-joiner.html

  * igt@kms_plane_multiple@tiling-yf:
    - shard-dg2:          [SKIP][406] ([i915#3555] / [i915#8806]) -> [SKIP][407] ([i915#2575])
   [406]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_plane_multiple@tiling-yf.html
   [407]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_plane_multiple@tiling-yf.html

  * igt@kms_plane_scaling@2x-scaler-multi-pipe:
    - shard-dg2:          [SKIP][408] ([i915#5354] / [i915#9423]) -> [SKIP][409] ([i915#2575] / [i915#9423])
   [408]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_plane_scaling@2x-scaler-multi-pipe.html
   [409]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_plane_scaling@2x-scaler-multi-pipe.html

  * igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format:
    - shard-dg2:          [SKIP][410] ([i915#2575] / [i915#9423]) -> [SKIP][411] ([i915#12247] / [i915#9423])
   [410]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format.html
   [411]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-7/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20:
    - shard-dg2:          [SKIP][412] ([i915#12247] / [i915#9423]) -> [SKIP][413] ([i915#2575] / [i915#9423]) +1 other test skip
   [412]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20.html
   [413]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20.html

  * igt@kms_pm_backlight@brightness-with-dpms:
    - shard-dg2:          [SKIP][414] ([i915#12343]) -> [SKIP][415]
   [414]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@kms_pm_backlight@brightness-with-dpms.html
   [415]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_pm_backlight@brightness-with-dpms.html

  * igt@kms_pm_lpsp@kms-lpsp:
    - shard-rkl:          [SKIP][416] ([i915#9340]) -> [SKIP][417] ([i915#3828])
   [416]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-rkl-1/igt@kms_pm_lpsp@kms-lpsp.html
   [417]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-rkl-7/igt@kms_pm_lpsp@kms-lpsp.html

  * igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
    - shard-rkl:          [DMESG-WARN][418] ([i915#12964]) -> [SKIP][419] ([i915#9519])
   [418]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-rkl-3/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
   [419]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-rkl-2/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html

  * igt@kms_prime@basic-crc-hybrid:
    - shard-dg2:          [SKIP][420] ([i915#6524] / [i915#6805]) -> [SKIP][421] ([Intel XE#3529])
   [420]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_prime@basic-crc-hybrid.html
   [421]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_prime@basic-crc-hybrid.html

  * igt@kms_psr2_sf@fbc-pr-cursor-plane-update-sf:
    - shard-dg2:          [SKIP][422] -> [SKIP][423] ([i915#11520]) +2 other tests skip
   [422]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_psr2_sf@fbc-pr-cursor-plane-update-sf.html
   [423]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_psr2_sf@fbc-pr-cursor-plane-update-sf.html

  * igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area:
    - shard-dg2:          [SKIP][424] ([i915#11520]) -> [SKIP][425] +3 other tests skip
   [424]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area.html
   [425]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_psr2_sf@psr2-overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_su@page_flip-nv12:
    - shard-dg2:          [SKIP][426] ([i915#9683]) -> [SKIP][427]
   [426]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@kms_psr2_su@page_flip-nv12.html
   [427]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_psr2_su@page_flip-nv12.html

  * igt@kms_psr@fbc-pr-suspend:
    - shard-dg2:          [SKIP][428] ([i915#1072] / [i915#9732]) -> [SKIP][429] +7 other tests skip
   [428]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-3/igt@kms_psr@fbc-pr-suspend.html
   [429]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@kms_psr@fbc-pr-suspend.html

  * igt@kms_psr@fbc-psr2-sprite-mmap-cpu:
    - shard-dg2:          [SKIP][430] -> [SKIP][431] ([i915#1072] / [i915#9732]) +6 other tests skip
   [430]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_psr@fbc-psr2-sprite-mmap-cpu.html
   [431]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-7/igt@kms_psr@fbc-psr2-sprite-mmap-cpu.html

  * igt@kms_vrr@seamless-rr-switch-drrs:
    - shard-dg2:          [SKIP][432] ([i915#2575]) -> [SKIP][433] ([i915#9906])
   [432]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-11/igt@kms_vrr@seamless-rr-switch-drrs.html
   [433]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-10/igt@kms_vrr@seamless-rr-switch-drrs.html

  * igt@prime_vgem@basic-fence-flip:
    - shard-dg2:          [SKIP][434] ([i915#3708]) -> [SKIP][435] ([i915#2575])
   [434]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@prime_vgem@basic-fence-flip.html
   [435]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@prime_vgem@basic-fence-flip.html

  * igt@sriov_basic@enable-vfs-autoprobe-on:
    - shard-dg2:          [SKIP][436] ([i915#9917]) -> [SKIP][437] ([i915#2575])
   [436]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_15749/shard-dg2-2/igt@sriov_basic@enable-vfs-autoprobe-on.html
   [437]: https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_141797v1/shard-dg2-11/igt@sriov_basic@enable-vfs-autoprobe-on.html

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

  [IGT#160]: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/160
  [Intel XE#3529]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3529
  [i915#10307]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10307
  [i915#10656]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10656
  [i915#1072]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1072
  [i915#10826]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10826
  [i915#1099]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/1099
  [i915#11078]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11078
  [i915#11441]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11441
  [i915#11520]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11520
  [i915#11527]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11527
  [i915#11627]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11627
  [i915#11681]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11681
  [i915#11808]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11808
  [i915#11965]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11965
  [i915#11980]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11980
  [i915#11989]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/11989
  [i915#12247]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12247
  [i915#12313]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12313
  [i915#12339]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12339
  [i915#12343]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12343
  [i915#12392]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12392
  [i915#12394]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12394
  [i915#12402]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12402
  [i915#12506]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12506
  [i915#12517]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12517
  [i915#12558]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12558
  [i915#12580]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12580
  [i915#12805]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12805
  [i915#12817]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12817
  [i915#12867]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12867
  [i915#12870]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12870
  [i915#12910]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12910
  [i915#12936]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12936
  [i915#12937]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12937
  [i915#12964]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/12964
  [i915#13014]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13014
  [i915#13049]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13049
  [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

== Logs ==

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

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

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

* Re: [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-11-26 16:18 ` [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps Imre Deak
@ 2024-11-29 14:26   ` Imre Deak
  2024-11-29 14:46     ` Maxime Ripard
  2024-12-02 16:35   ` Simona Vetter
  1 sibling, 1 reply; 25+ messages in thread
From: Imre Deak @ 2024-11-29 14:26 UTC (permalink / raw)
  To: intel-gfx, Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
	Dave Airlie, Daniel Vetter
  Cc: dri-devel, Jani Nikula, Rodrigo Vivi

Adding more people from DRM core domain. Any comment, objection to this
change?

On Tue, Nov 26, 2024 at 06:18:56PM +0200, Imre Deak wrote:
> Atm when the connector is added to the drm_mode_config::connector_list,
> the connector may not be fully initialized yet. This is not a problem
> for user space, which will see the connector only after it's registered
> later, it could be a problem for in-kernel users looking up connectors
> via the above list.
> 
> To resolve the above issue, add a way to separately initialize the DRM
> core specific parts of the connector and add it to the above list. This
> will move adding the connector to the list after the properties on the
> connector have been added, this is ok since these steps don't have a
> dependency.
> 
> v2: (Jani)
> - Let initing DDC as well via drm_connector_init_core().
> - Rename __drm_connector_init to drm_connector_init_core_and_add().
> 
> Cc: Jani Nikula <jani.nikula@intel.com>
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> (v1)
> Signed-off-by: Imre Deak <imre.deak@intel.com>
> ---
>  drivers/gpu/drm/drm_connector.c | 111 ++++++++++++++++++++++++++------
>  include/drm/drm_connector.h     |   6 ++
>  2 files changed, 97 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> index fc35f47e2849e..fd7acae8656b2 100644
> --- a/drivers/gpu/drm/drm_connector.c
> +++ b/drivers/gpu/drm/drm_connector.c
> @@ -218,11 +218,11 @@ void drm_connector_free_work_fn(struct work_struct *work)
>  	}
>  }
>  
> -static int __drm_connector_init(struct drm_device *dev,
> -				struct drm_connector *connector,
> -				const struct drm_connector_funcs *funcs,
> -				int connector_type,
> -				struct i2c_adapter *ddc)
> +static int __drm_connector_init_core(struct drm_device *dev,
> +				     struct drm_connector *connector,
> +				     const struct drm_connector_funcs *funcs,
> +				     int connector_type,
> +				     struct i2c_adapter *ddc)
>  {
>  	struct drm_mode_config *config = &dev->mode_config;
>  	int ret;
> @@ -273,6 +273,7 @@ static int __drm_connector_init(struct drm_device *dev,
>  	/* provide ddc symlink in sysfs */
>  	connector->ddc = ddc;
>  
> +	INIT_LIST_HEAD(&connector->head);
>  	INIT_LIST_HEAD(&connector->global_connector_list_entry);
>  	INIT_LIST_HEAD(&connector->probed_modes);
>  	INIT_LIST_HEAD(&connector->modes);
> @@ -288,14 +289,6 @@ static int __drm_connector_init(struct drm_device *dev,
>  
>  	drm_connector_get_cmdline_mode(connector);
>  
> -	/* We should add connectors at the end to avoid upsetting the connector
> -	 * index too much.
> -	 */
> -	spin_lock_irq(&config->connector_list_lock);
> -	list_add_tail(&connector->head, &config->connector_list);
> -	config->num_connector++;
> -	spin_unlock_irq(&config->connector_list_lock);
> -
>  	if (connector_type != DRM_MODE_CONNECTOR_VIRTUAL &&
>  	    connector_type != DRM_MODE_CONNECTOR_WRITEBACK)
>  		drm_connector_attach_edid_property(connector);
> @@ -332,6 +325,86 @@ static int __drm_connector_init(struct drm_device *dev,
>  	return ret;
>  }
>  
> +/**
> + * drm_connector_init_core - Initialize the core state of a preallocated connector
> + * @dev: DRM device
> + * @connector: the connector to init
> + * @funcs: callbacks for this connector
> + * @connector_type: user visible type of the connector
> + * @ddc: pointer to the associated ddc adapter
> + *
> + * Initialises the core state of preallocated connector. This is
> + * equivalent to drm_connector_init(), without adding the connector to
> + * drm_mode_config::connector_list. This call must be followed by calling
> + * drm_connector_add() during initialization to expose the connector to
> + * in-kernel users via the above list.
> + *
> + * Returns:
> + * Zero on success, error code on failure.
> + */
> +int drm_connector_init_core(struct drm_device *dev,
> +			    struct drm_connector *connector,
> +			    const struct drm_connector_funcs *funcs,
> +			    int connector_type,
> +			    struct i2c_adapter *ddc)
> +{
> +	if (drm_WARN_ON(dev, !(funcs && funcs->destroy)))
> +		return -EINVAL;
> +
> +	return __drm_connector_init_core(dev, connector, funcs, connector_type, ddc);
> +}
> +EXPORT_SYMBOL(drm_connector_init_core);
> +
> +/**
> + * drm_connector_add - Add the connector
> + * @connector: the connector to add
> + *
> + * Add the connector to the drm_mode_config::connector_list, exposing the
> + * connector to in-kernel users. This call must be preceded by a call to
> + * drm_connector_init_core().
> + */
> +void drm_connector_add(struct drm_connector *connector)
> +{
> +	struct drm_device *dev = connector->dev;
> +	struct drm_mode_config *config = &dev->mode_config;
> +
> +	spin_lock_irq(&config->connector_list_lock);
> +	list_add_tail(&connector->head, &config->connector_list);
> +	config->num_connector++;
> +	spin_unlock_irq(&config->connector_list_lock);
> +}
> +EXPORT_SYMBOL(drm_connector_add);
> +
> +static void drm_connector_remove(struct drm_connector *connector)
> +{
> +	struct drm_device *dev = connector->dev;
> +
> +	if (list_empty(&connector->head))
> +		return;
> +
> +	spin_lock_irq(&dev->mode_config.connector_list_lock);
> +	list_del_init(&connector->head);
> +	dev->mode_config.num_connector--;
> +	spin_unlock_irq(&dev->mode_config.connector_list_lock);
> +}
> +
> +static int drm_connector_init_core_and_add(struct drm_device *dev,
> +					   struct drm_connector *connector,
> +					   const struct drm_connector_funcs *funcs,
> +					   int connector_type,
> +					   struct i2c_adapter *ddc)
> +{
> +	int ret;
> +
> +	ret = __drm_connector_init_core(dev, connector, funcs, connector_type, ddc);
> +	if (ret)
> +		return ret;
> +
> +	drm_connector_add(connector);
> +
> +	return 0;
> +}
> +
>  /**
>   * drm_connector_init - Init a preallocated connector
>   * @dev: DRM device
> @@ -361,7 +434,7 @@ int drm_connector_init(struct drm_device *dev,
>  	if (drm_WARN_ON(dev, !(funcs && funcs->destroy)))
>  		return -EINVAL;
>  
> -	return __drm_connector_init(dev, connector, funcs, connector_type, NULL);
> +	return drm_connector_init_core_and_add(dev, connector, funcs, connector_type, NULL);
>  }
>  EXPORT_SYMBOL(drm_connector_init);
>  
> @@ -398,7 +471,7 @@ int drm_connector_init_with_ddc(struct drm_device *dev,
>  	if (drm_WARN_ON(dev, !(funcs && funcs->destroy)))
>  		return -EINVAL;
>  
> -	return __drm_connector_init(dev, connector, funcs, connector_type, ddc);
> +	return drm_connector_init_core_and_add(dev, connector, funcs, connector_type, ddc);
>  }
>  EXPORT_SYMBOL(drm_connector_init_with_ddc);
>  
> @@ -442,7 +515,7 @@ int drmm_connector_init(struct drm_device *dev,
>  	if (drm_WARN_ON(dev, funcs && funcs->destroy))
>  		return -EINVAL;
>  
> -	ret = __drm_connector_init(dev, connector, funcs, connector_type, ddc);
> +	ret = drm_connector_init_core_and_add(dev, connector, funcs, connector_type, ddc);
>  	if (ret)
>  		return ret;
>  
> @@ -659,10 +732,8 @@ void drm_connector_cleanup(struct drm_connector *connector)
>  	connector->name = NULL;
>  	fwnode_handle_put(connector->fwnode);
>  	connector->fwnode = NULL;
> -	spin_lock_irq(&dev->mode_config.connector_list_lock);
> -	list_del(&connector->head);
> -	dev->mode_config.num_connector--;
> -	spin_unlock_irq(&dev->mode_config.connector_list_lock);
> +
> +	drm_connector_remove(connector);
>  
>  	WARN_ON(connector->state && !connector->funcs->atomic_destroy_state);
>  	if (connector->state && connector->funcs->atomic_destroy_state)
> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
> index e3fa43291f449..2476dcbd3c34d 100644
> --- a/include/drm/drm_connector.h
> +++ b/include/drm/drm_connector.h
> @@ -2122,6 +2122,12 @@ struct drm_connector {
>  
>  #define obj_to_connector(x) container_of(x, struct drm_connector, base)
>  
> +int drm_connector_init_core(struct drm_device *dev,
> +			    struct drm_connector *connector,
> +			    const struct drm_connector_funcs *funcs,
> +			    int connector_type,
> +			    struct i2c_adapter *ddc);
> +void drm_connector_add(struct drm_connector *connector);
>  int drm_connector_init(struct drm_device *dev,
>  		       struct drm_connector *connector,
>  		       const struct drm_connector_funcs *funcs,
> -- 
> 2.44.2
> 

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

* Re: [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-11-29 14:26   ` Imre Deak
@ 2024-11-29 14:46     ` Maxime Ripard
  2024-11-29 15:58       ` Jani Nikula
  2024-11-29 16:12       ` Imre Deak
  0 siblings, 2 replies; 25+ messages in thread
From: Maxime Ripard @ 2024-11-29 14:46 UTC (permalink / raw)
  To: Imre Deak
  Cc: intel-gfx, Maarten Lankhorst, Thomas Zimmermann, Dave Airlie,
	Daniel Vetter, dri-devel, Jani Nikula, Rodrigo Vivi

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

On Fri, Nov 29, 2024 at 04:26:01PM +0200, Imre Deak wrote:
> Adding more people from DRM core domain. Any comment, objection to this
> change?
> 
> On Tue, Nov 26, 2024 at 06:18:56PM +0200, Imre Deak wrote:
> > Atm when the connector is added to the drm_mode_config::connector_list,
> > the connector may not be fully initialized yet. This is not a problem
> > for user space, which will see the connector only after it's registered
> > later, it could be a problem for in-kernel users looking up connectors
> > via the above list.

It could be, or it actually is a problem? If so, in what situation?

> > To resolve the above issue, add a way to separately initialize the DRM
> > core specific parts of the connector and add it to the above list. This
> > will move adding the connector to the list after the properties on the
> > connector have been added, this is ok since these steps don't have a
> > dependency.
> >
> > v2: (Jani)
> > - Let initing DDC as well via drm_connector_init_core().
> > - Rename __drm_connector_init to drm_connector_init_core_and_add().
> > 
> > Cc: Jani Nikula <jani.nikula@intel.com>
> > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> (v1)
> > Signed-off-by: Imre Deak <imre.deak@intel.com>

If we do have an actual problem to solve, we'll need kunit tests too.

Maxime

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]

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

* Re: [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-11-29 14:46     ` Maxime Ripard
@ 2024-11-29 15:58       ` Jani Nikula
  2024-12-02 10:45         ` Maxime Ripard
  2024-11-29 16:12       ` Imre Deak
  1 sibling, 1 reply; 25+ messages in thread
From: Jani Nikula @ 2024-11-29 15:58 UTC (permalink / raw)
  To: Maxime Ripard, Imre Deak
  Cc: intel-gfx, Maarten Lankhorst, Thomas Zimmermann, Dave Airlie,
	Daniel Vetter, dri-devel, Rodrigo Vivi

On Fri, 29 Nov 2024, Maxime Ripard <mripard@kernel.org> wrote:
> On Fri, Nov 29, 2024 at 04:26:01PM +0200, Imre Deak wrote:
>> Adding more people from DRM core domain. Any comment, objection to this
>> change?
>> 
>> On Tue, Nov 26, 2024 at 06:18:56PM +0200, Imre Deak wrote:
>> > Atm when the connector is added to the drm_mode_config::connector_list,
>> > the connector may not be fully initialized yet. This is not a problem
>> > for user space, which will see the connector only after it's registered
>> > later, it could be a problem for in-kernel users looking up connectors
>> > via the above list.
>
> It could be, or it actually is a problem? If so, in what situation?

It's an actual problem.

While in most cases connectors are created at probe, for DP MST they're
created at runtime via the ->add_connector hook. We want to call
drm_connector_init() on them soon in that hook, so we can pass the
connector around and expect it to have connector->dev etc. initialized
while we continue its initialization.

But there's a race. As soon as we call drm_connector_init(), the
connector gets added to dev->mode_config.connector_list, and any drm
code may discover it. For example connector polling. And we might not be
done with the initialization yet.

>> > To resolve the above issue, add a way to separately initialize the DRM
>> > core specific parts of the connector and add it to the above list. This
>> > will move adding the connector to the list after the properties on the
>> > connector have been added, this is ok since these steps don't have a
>> > dependency.
>> >
>> > v2: (Jani)
>> > - Let initing DDC as well via drm_connector_init_core().
>> > - Rename __drm_connector_init to drm_connector_init_core_and_add().
>> > 
>> > Cc: Jani Nikula <jani.nikula@intel.com>
>> > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> (v1)
>> > Signed-off-by: Imre Deak <imre.deak@intel.com>
>
> If we do have an actual problem to solve, we'll need kunit tests too.

That's not an unreasonable request, per se, but what exactly should they
test? That the new init core didn't add stuff to the list, and the new
add connector did?


BR,
Jani.


-- 
Jani Nikula, Intel

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

* Re: [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-11-29 14:46     ` Maxime Ripard
  2024-11-29 15:58       ` Jani Nikula
@ 2024-11-29 16:12       ` Imre Deak
  2024-12-02 10:48         ` Maxime Ripard
  1 sibling, 1 reply; 25+ messages in thread
From: Imre Deak @ 2024-11-29 16:12 UTC (permalink / raw)
  To: Maxime Ripard
  Cc: intel-gfx, Maarten Lankhorst, Thomas Zimmermann, Dave Airlie,
	Daniel Vetter, dri-devel, Jani Nikula, Rodrigo Vivi

On Fri, Nov 29, 2024 at 03:46:28PM +0100, Maxime Ripard wrote:
> On Fri, Nov 29, 2024 at 04:26:01PM +0200, Imre Deak wrote:
> > Adding more people from DRM core domain. Any comment, objection to this
> > change?
> > 
> > On Tue, Nov 26, 2024 at 06:18:56PM +0200, Imre Deak wrote:
> > > Atm when the connector is added to the drm_mode_config::connector_list,
> > > the connector may not be fully initialized yet. This is not a problem
> > > for user space, which will see the connector only after it's registered
> > > later, it could be a problem for in-kernel users looking up connectors
> > > via the above list.
> 
> It could be, or it actually is a problem? If so, in what situation?

An actual problem is that after an MST connector is created and added to
the connector list, the connector could be probed without the connector
being fully initialized during a hotplug event handling along with all
the other connectors on the list. The connector's helper functions could
be still unset leading to a NULL deref while trying to call the
connector's detect/detect_ctx callbacks, or if these callbacks are set
already, the detect handler could see a connector which is not yet
initialized fully.

> > > To resolve the above issue, add a way to separately initialize the DRM
> > > core specific parts of the connector and add it to the above list. This
> > > will move adding the connector to the list after the properties on the
> > > connector have been added, this is ok since these steps don't have a
> > > dependency.
> > >
> > > v2: (Jani)
> > > - Let initing DDC as well via drm_connector_init_core().
> > > - Rename __drm_connector_init to drm_connector_init_core_and_add().
> > > 
> > > Cc: Jani Nikula <jani.nikula@intel.com>
> > > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> (v1)
> > > Signed-off-by: Imre Deak <imre.deak@intel.com>
> 
> If we do have an actual problem to solve, we'll need kunit tests too.

I don't have a good idea for this. The problem is not in a parituclar
function, rather in the order a connector is initialized and added to
the connector list. The above is an actual problem though, so I don't
think fixing that should be blocked by this.

> 
> Maxime

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

* Re: [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-11-29 15:58       ` Jani Nikula
@ 2024-12-02 10:45         ` Maxime Ripard
  0 siblings, 0 replies; 25+ messages in thread
From: Maxime Ripard @ 2024-12-02 10:45 UTC (permalink / raw)
  To: Jani Nikula
  Cc: Imre Deak, intel-gfx, Maarten Lankhorst, Thomas Zimmermann,
	Dave Airlie, Daniel Vetter, dri-devel, Rodrigo Vivi

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

On Fri, Nov 29, 2024 at 05:58:56PM +0200, Jani Nikula wrote:
> On Fri, 29 Nov 2024, Maxime Ripard <mripard@kernel.org> wrote:
> > On Fri, Nov 29, 2024 at 04:26:01PM +0200, Imre Deak wrote:
> >> Adding more people from DRM core domain. Any comment, objection to this
> >> change?
> >> 
> >> On Tue, Nov 26, 2024 at 06:18:56PM +0200, Imre Deak wrote:
> >> > Atm when the connector is added to the drm_mode_config::connector_list,
> >> > the connector may not be fully initialized yet. This is not a problem
> >> > for user space, which will see the connector only after it's registered
> >> > later, it could be a problem for in-kernel users looking up connectors
> >> > via the above list.
> >
> > It could be, or it actually is a problem? If so, in what situation?
> 
> It's an actual problem.
> 
> While in most cases connectors are created at probe, for DP MST they're
> created at runtime via the ->add_connector hook. We want to call
> drm_connector_init() on them soon in that hook, so we can pass the
> connector around and expect it to have connector->dev etc. initialized
> while we continue its initialization.
> 
> But there's a race. As soon as we call drm_connector_init(), the
> connector gets added to dev->mode_config.connector_list, and any drm
> code may discover it. For example connector polling. And we might not be
> done with the initialization yet.

Ack. This should be in the commit log then.

> >> > To resolve the above issue, add a way to separately initialize the DRM
> >> > core specific parts of the connector and add it to the above list. This
> >> > will move adding the connector to the list after the properties on the
> >> > connector have been added, this is ok since these steps don't have a
> >> > dependency.
> >> >
> >> > v2: (Jani)
> >> > - Let initing DDC as well via drm_connector_init_core().
> >> > - Rename __drm_connector_init to drm_connector_init_core_and_add().
> >> > 
> >> > Cc: Jani Nikula <jani.nikula@intel.com>
> >> > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> (v1)
> >> > Signed-off-by: Imre Deak <imre.deak@intel.com>
> >
> > If we do have an actual problem to solve, we'll need kunit tests too.
> 
> That's not an unreasonable request, per se, but what exactly should they
> test? That the new init core didn't add stuff to the list, and the new
> add connector did?

Everything we test with drm_connector_init* already, plus the fact that
we now might have callers that call add without init, so we need to test
that too.

Maxime

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]

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

* Re: [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-11-29 16:12       ` Imre Deak
@ 2024-12-02 10:48         ` Maxime Ripard
  2024-12-02 12:07           ` Jani Nikula
  0 siblings, 1 reply; 25+ messages in thread
From: Maxime Ripard @ 2024-12-02 10:48 UTC (permalink / raw)
  To: Imre Deak
  Cc: intel-gfx, Maarten Lankhorst, Thomas Zimmermann, Dave Airlie,
	Daniel Vetter, dri-devel, Jani Nikula, Rodrigo Vivi

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

On Fri, Nov 29, 2024 at 06:12:01PM +0200, Imre Deak wrote:
> On Fri, Nov 29, 2024 at 03:46:28PM +0100, Maxime Ripard wrote:
> > On Fri, Nov 29, 2024 at 04:26:01PM +0200, Imre Deak wrote:
> > > Adding more people from DRM core domain. Any comment, objection to this
> > > change?
> > > 
> > > On Tue, Nov 26, 2024 at 06:18:56PM +0200, Imre Deak wrote:
> > > > Atm when the connector is added to the drm_mode_config::connector_list,
> > > > the connector may not be fully initialized yet. This is not a problem
> > > > for user space, which will see the connector only after it's registered
> > > > later, it could be a problem for in-kernel users looking up connectors
> > > > via the above list.
> > 
> > It could be, or it actually is a problem? If so, in what situation?
> 
> An actual problem is that after an MST connector is created and added to
> the connector list, the connector could be probed without the connector
> being fully initialized during a hotplug event handling along with all
> the other connectors on the list. The connector's helper functions could
> be still unset leading to a NULL deref while trying to call the
> connector's detect/detect_ctx callbacks, or if these callbacks are set
> already, the detect handler could see a connector which is not yet
> initialized fully.

Ack. Like I said to Jani, this needs to be in the commit log then.

> > > > To resolve the above issue, add a way to separately initialize the DRM
> > > > core specific parts of the connector and add it to the above list. This
> > > > will move adding the connector to the list after the properties on the
> > > > connector have been added, this is ok since these steps don't have a
> > > > dependency.
> > > >
> > > > v2: (Jani)
> > > > - Let initing DDC as well via drm_connector_init_core().
> > > > - Rename __drm_connector_init to drm_connector_init_core_and_add().
> > > > 
> > > > Cc: Jani Nikula <jani.nikula@intel.com>
> > > > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> (v1)
> > > > Signed-off-by: Imre Deak <imre.deak@intel.com>
> > 
> > If we do have an actual problem to solve, we'll need kunit tests too.
> 
> I don't have a good idea for this. The problem is not in a parituclar
> function, rather in the order a connector is initialized and added to
> the connector list. The above is an actual problem though, so I don't
> think fixing that should be blocked by this.

It's not about whether we have a problem or not: you introduce new
framework functions, you need to have kunit tests to check their
behaviour.

Maxime

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]

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

* Re: [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-12-02 10:48         ` Maxime Ripard
@ 2024-12-02 12:07           ` Jani Nikula
  2024-12-02 13:24             ` Imre Deak
  2024-12-02 15:06             ` Maxime Ripard
  0 siblings, 2 replies; 25+ messages in thread
From: Jani Nikula @ 2024-12-02 12:07 UTC (permalink / raw)
  To: Maxime Ripard, Imre Deak
  Cc: intel-gfx, Maarten Lankhorst, Thomas Zimmermann, Dave Airlie,
	Daniel Vetter, dri-devel, Rodrigo Vivi

On Mon, 02 Dec 2024, Maxime Ripard <mripard@kernel.org> wrote:
> It's not about whether we have a problem or not: you introduce new
> framework functions, you need to have kunit tests to check their
> behaviour.

I don't fundamentally disagree with that goal, but it does seem like a
pretty drastic policy change. I don't recall a discussion where we made
that decision, nor can I find any documentation stating this. Or what
exactly the requirement is; it's totally unclear to me.

Had I been involved, I would've pointed out that while adding tests is
good, it inevitably increases the friction of adding new stuff to drm
core. It's super tempting for people to just get their jobs done. If
doing the right thing adds yet another hurdle, we may see more stuff
being added in drivers instead of drm core.

(Case in point, we already hacked around the problem being solved here
with commit d58f65df2dcb ("drm/i915/dp_mst: Fix connector initialization
in intel_dp_add_mst_connector()"). We could've just dropped the ball
right there.)

BR,
Jani.


-- 
Jani Nikula, Intel

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

* Re: [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-12-02 12:07           ` Jani Nikula
@ 2024-12-02 13:24             ` Imre Deak
  2024-12-02 15:07               ` Maxime Ripard
  2024-12-02 15:06             ` Maxime Ripard
  1 sibling, 1 reply; 25+ messages in thread
From: Imre Deak @ 2024-12-02 13:24 UTC (permalink / raw)
  To: Jani Nikula, Maxime Ripard
  Cc: intel-gfx, Maarten Lankhorst, Thomas Zimmermann, Dave Airlie,
	Daniel Vetter, dri-devel, Rodrigo Vivi

On Mon, Dec 02, 2024 at 02:07:36PM +0200, Jani Nikula wrote:
> On Mon, 02 Dec 2024, Maxime Ripard <mripard@kernel.org> wrote:
> > It's not about whether we have a problem or not: you introduce new
> > framework functions, you need to have kunit tests to check their
> > behaviour.
> 
> I don't fundamentally disagree with that goal, but it does seem like a
> pretty drastic policy change. I don't recall a discussion where we made
> that decision, nor can I find any documentation stating this. Or what
> exactly the requirement is; it's totally unclear to me.
> 
> Had I been involved, I would've pointed out that while adding tests is
> good, it inevitably increases the friction of adding new stuff to drm
> core. It's super tempting for people to just get their jobs done. If
> doing the right thing adds yet another hurdle, we may see more stuff
> being added in drivers instead of drm core.
> 
> (Case in point, we already hacked around the problem being solved here
> with commit d58f65df2dcb ("drm/i915/dp_mst: Fix connector initialization
> in intel_dp_add_mst_connector()"). We could've just dropped the ball
> right there.)

Fwiw, in this case adding tests for drm_connector_init_core() and
drm_connector_add() looks simple enough.

IIUC it's the 3 testcases in drmm_connector_init_tests[] performed for
drm_connector_init_core() and additional 3 test cases checking that (1)
drm_connector_init_core() doesn't add the connector to the connector
list, (2) drm_connector_add() adds it and (3) drm_connector_add() fails
(by not adding the connector to the list and emitting a dmesg WARN) if
drm_connector_init_core() was not called for the connector previously.
For the last test I actually need to add the corresponding assert/early
return to drm_connector_add().

If Maxim could confirm the above, I could resend the patchset adding
these tests.

--Imre

> BR,
> Jani.
> 
> 
> -- 
> Jani Nikula, Intel

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

* Re: [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-12-02 12:07           ` Jani Nikula
  2024-12-02 13:24             ` Imre Deak
@ 2024-12-02 15:06             ` Maxime Ripard
  2024-12-02 15:44               ` Jani Nikula
  1 sibling, 1 reply; 25+ messages in thread
From: Maxime Ripard @ 2024-12-02 15:06 UTC (permalink / raw)
  To: Jani Nikula
  Cc: Imre Deak, intel-gfx, Maarten Lankhorst, Thomas Zimmermann,
	Dave Airlie, Daniel Vetter, dri-devel, Rodrigo Vivi

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

On Mon, Dec 02, 2024 at 02:07:36PM +0200, Jani Nikula wrote:
> On Mon, 02 Dec 2024, Maxime Ripard <mripard@kernel.org> wrote:
> > It's not about whether we have a problem or not: you introduce new
> > framework functions, you need to have kunit tests to check their
> > behaviour.
> 
> I don't fundamentally disagree with that goal,

You don't really have to agree. You asked for my review, you have it.

> but it does seem like a pretty drastic policy change. I don't recall a
> discussion where we made that decision, nor can I find any
> documentation stating this. Or what exactly the requirement is; it's
> totally unclear to me.

There isn't, because there's no such policy, even though it's definitely
something I'd like. This situation is different though:
drm_connector_init is already a function that is being tested. It seems
natural to not dilute testing when adding new variant, disregarding what
the policy of the rest of the framework is.

> Had I been involved, I would've pointed out that while adding tests is
> good, it inevitably increases the friction of adding new stuff to drm
> core.

You also know what increases the friction of adding new stuff? Adding
new stuff. Or writing documentation. Or writing commit log. Or sending
emails / making pull requests. Or asking for cross-reviews. Or having an
open-source user-space requirement. It seems pretty arbitrary to draw
the line right where testing starts.

> It's super tempting for people to just get their jobs done. If doing
> the right thing adds yet another hurdle, we may see more stuff being
> added in drivers instead of drm core.

I really enjoy hidden threats. And it's not like i915 is a great example
there.

> (Case in point, we already hacked around the problem being solved here
> with commit d58f65df2dcb ("drm/i915/dp_mst: Fix connector initialization
> in intel_dp_add_mst_connector()"). We could've just dropped the ball
> right there.)

Case in point indeed.

Maxime

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]

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

* Re: [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-12-02 13:24             ` Imre Deak
@ 2024-12-02 15:07               ` Maxime Ripard
  2024-12-02 15:31                 ` Imre Deak
  0 siblings, 1 reply; 25+ messages in thread
From: Maxime Ripard @ 2024-12-02 15:07 UTC (permalink / raw)
  To: Imre Deak
  Cc: Jani Nikula, intel-gfx, Maarten Lankhorst, Thomas Zimmermann,
	Dave Airlie, Daniel Vetter, dri-devel, Rodrigo Vivi

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

On Mon, Dec 02, 2024 at 03:24:43PM +0200, Imre Deak wrote:
> On Mon, Dec 02, 2024 at 02:07:36PM +0200, Jani Nikula wrote:
> > On Mon, 02 Dec 2024, Maxime Ripard <mripard@kernel.org> wrote:
> > > It's not about whether we have a problem or not: you introduce new
> > > framework functions, you need to have kunit tests to check their
> > > behaviour.
> > 
> > I don't fundamentally disagree with that goal, but it does seem like a
> > pretty drastic policy change. I don't recall a discussion where we made
> > that decision, nor can I find any documentation stating this. Or what
> > exactly the requirement is; it's totally unclear to me.
> > 
> > Had I been involved, I would've pointed out that while adding tests is
> > good, it inevitably increases the friction of adding new stuff to drm
> > core. It's super tempting for people to just get their jobs done. If
> > doing the right thing adds yet another hurdle, we may see more stuff
> > being added in drivers instead of drm core.
> > 
> > (Case in point, we already hacked around the problem being solved here
> > with commit d58f65df2dcb ("drm/i915/dp_mst: Fix connector initialization
> > in intel_dp_add_mst_connector()"). We could've just dropped the ball
> > right there.)
> 
> Fwiw, in this case adding tests for drm_connector_init_core() and
> drm_connector_add() looks simple enough.
> 
> IIUC it's the 3 testcases in drmm_connector_init_tests[] performed for
> drm_connector_init_core() and additional 3 test cases checking that (1)
> drm_connector_init_core() doesn't add the connector to the connector
> list, (2) drm_connector_add() adds it and (3) drm_connector_add() fails
> (by not adding the connector to the list and emitting a dmesg WARN) if
> drm_connector_init_core() was not called for the connector previously.
> For the last test I actually need to add the corresponding assert/early
> return to drm_connector_add().
> 
> If Maxim could confirm the above, I could resend the patchset adding
> these tests.

Yep, sounds great, thanks!
Maxime

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]

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

* Re: [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-12-02 15:07               ` Maxime Ripard
@ 2024-12-02 15:31                 ` Imre Deak
  0 siblings, 0 replies; 25+ messages in thread
From: Imre Deak @ 2024-12-02 15:31 UTC (permalink / raw)
  To: Maxime Ripard
  Cc: Jani Nikula, intel-gfx, Maarten Lankhorst, Thomas Zimmermann,
	Dave Airlie, Daniel Vetter, dri-devel, Rodrigo Vivi

On Mon, Dec 02, 2024 at 04:07:56PM +0100, Maxime Ripard wrote:
> On Mon, Dec 02, 2024 at 03:24:43PM +0200, Imre Deak wrote:
> > On Mon, Dec 02, 2024 at 02:07:36PM +0200, Jani Nikula wrote:
> > > On Mon, 02 Dec 2024, Maxime Ripard <mripard@kernel.org> wrote:
> > > > It's not about whether we have a problem or not: you introduce new
> > > > framework functions, you need to have kunit tests to check their
> > > > behaviour.
> > > 
> > > I don't fundamentally disagree with that goal, but it does seem like a
> > > pretty drastic policy change. I don't recall a discussion where we made
> > > that decision, nor can I find any documentation stating this. Or what
> > > exactly the requirement is; it's totally unclear to me.
> > > 
> > > Had I been involved, I would've pointed out that while adding tests is
> > > good, it inevitably increases the friction of adding new stuff to drm
> > > core. It's super tempting for people to just get their jobs done. If
> > > doing the right thing adds yet another hurdle, we may see more stuff
> > > being added in drivers instead of drm core.
> > > 
> > > (Case in point, we already hacked around the problem being solved here
> > > with commit d58f65df2dcb ("drm/i915/dp_mst: Fix connector initialization
> > > in intel_dp_add_mst_connector()"). We could've just dropped the ball
> > > right there.)
> > 
> > Fwiw, in this case adding tests for drm_connector_init_core() and
> > drm_connector_add() looks simple enough.
> > 
> > IIUC it's the 3 testcases in drmm_connector_init_tests[] performed for
> > drm_connector_init_core() and additional 3 test cases checking that (1)
> > drm_connector_init_core() doesn't add the connector to the connector
> > list, (2) drm_connector_add() adds it and (3) drm_connector_add() fails
> > (by not adding the connector to the list and emitting a dmesg WARN) if
> > drm_connector_init_core() was not called for the connector previously.
> > For the last test I actually need to add the corresponding assert/early
> > return to drm_connector_add().
> > 
> > If Maxim could confirm the above, I could resend the patchset adding
> > these tests.
> 
> Yep, sounds great, thanks!

Ok. The subtest (3) above checking if drm_connector_add() fails as
expected if drm_connector_init_core() was not called before would also
generate a dmesg warn, via a

	if (drm_WARN_ON(dev, !connector->funcs))
		return;

early return I'm adding to drm_connector_add() in the new version of the
patchset. This fails the kunit test, as always when an error or warn is
printed to the log. I couldn't find a good way to suppress this warn
(don't want to modify the function being tested) to make the testcase
pass. I think this test case could be omitted, since it's tested by all
users implicitly anyway via the above assert. Is this acceptable?

> Maxime

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

* Re: [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-12-02 15:06             ` Maxime Ripard
@ 2024-12-02 15:44               ` Jani Nikula
  2024-12-03  9:36                 ` Maxime Ripard
  0 siblings, 1 reply; 25+ messages in thread
From: Jani Nikula @ 2024-12-02 15:44 UTC (permalink / raw)
  To: Maxime Ripard
  Cc: Imre Deak, intel-gfx, Maarten Lankhorst, Thomas Zimmermann,
	Dave Airlie, Daniel Vetter, dri-devel, Rodrigo Vivi

On Mon, 02 Dec 2024, Maxime Ripard <mripard@kernel.org> wrote:
> On Mon, Dec 02, 2024 at 02:07:36PM +0200, Jani Nikula wrote:
>> On Mon, 02 Dec 2024, Maxime Ripard <mripard@kernel.org> wrote:
>> > It's not about whether we have a problem or not: you introduce new
>> > framework functions, you need to have kunit tests to check their
>> > behaviour.
>> 
>> I don't fundamentally disagree with that goal,
>
> You don't really have to agree. You asked for my review, you have it.
>
>> but it does seem like a pretty drastic policy change. I don't recall a
>> discussion where we made that decision, nor can I find any
>> documentation stating this. Or what exactly the requirement is; it's
>> totally unclear to me.
>
> There isn't, because there's no such policy, even though it's definitely
> something I'd like. This situation is different though:
> drm_connector_init is already a function that is being tested. It seems
> natural to not dilute testing when adding new variant, disregarding what
> the policy of the rest of the framework is.

"You do X, you need do have Y" coming from a maintainer sure sounded
like hard rules. I was surprised.

>> It's super tempting for people to just get their jobs done. If doing
>> the right thing adds yet another hurdle, we may see more stuff being
>> added in drivers instead of drm core.
>
> I really enjoy hidden threats.

None were implied. That's your interpretation of what I honestly think
is a plausible outcome. I try to push people towards contributing to drm
core instead of drivers, and it's not always easy as it is. It's just a
guess, but I'll bet the majority of drm contributors have never run
kunit tests themselves.

> And it's not like i915 is a great example there.

Sincerely, is this the level of discussion we really want to have?


BR,
Jani.


-- 
Jani Nikula, Intel

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

* Re: [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-11-26 16:18 ` [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps Imre Deak
  2024-11-29 14:26   ` Imre Deak
@ 2024-12-02 16:35   ` Simona Vetter
  2024-12-02 20:07     ` Imre Deak
  1 sibling, 1 reply; 25+ messages in thread
From: Simona Vetter @ 2024-12-02 16:35 UTC (permalink / raw)
  To: Imre Deak; +Cc: intel-gfx, dri-devel, Jani Nikula, Rodrigo Vivi

On Tue, Nov 26, 2024 at 06:18:56PM +0200, Imre Deak wrote:
> Atm when the connector is added to the drm_mode_config::connector_list,
> the connector may not be fully initialized yet. This is not a problem
> for user space, which will see the connector only after it's registered
> later, it could be a problem for in-kernel users looking up connectors
> via the above list.
> 
> To resolve the above issue, add a way to separately initialize the DRM
> core specific parts of the connector and add it to the above list. This
> will move adding the connector to the list after the properties on the
> connector have been added, this is ok since these steps don't have a
> dependency.
> 
> v2: (Jani)
> - Let initing DDC as well via drm_connector_init_core().
> - Rename __drm_connector_init to drm_connector_init_core_and_add().
> 
> Cc: Jani Nikula <jani.nikula@intel.com>
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> (v1)
> Signed-off-by: Imre Deak <imre.deak@intel.com>

So looking at the thread, I guess it'd be good to document some consensus
stance on kunit tests, and whether or not we're at the point where for new
things or extensions of functions that already have kunit coverage we need
them. But I think that's orthogonal.

On the patch itself, I don't think it's the right fix. And by extension, I
don't think the i915 fix is correct either, because we have a bigger mess
here:

- GETCONNECTOR does indeed not show a connector that's not yet registers.

- But GETRESOURCES happily lists them. Which means we have a very silly
  race here, which isn't good.

- I think the correct solution is to move the list_add to the registration
  step, which would also move connectors in-line with other dynamically
  added kms objects like blobs or fbs (although those have a single-step
  registration+init function, so it's less obvious what's going on).

- The same thing applies on the unregister side of things, once a
  connector is unregistered I don't think it should stick around in any
  list. But I'm not entirely sure, would need to check with Lyude to make
  sure this doesn't break anything in mst helpers.

Now implementing this is going to be a bit a mess:

- For static connectors drivers _really_ want the connectors to be on the
  lists, otherwise a lot of the driver setup code just wont work. And
  we've worked towards removing all the explicit drm_connector_register
  calls, readding feels a bit silly.

- I think short-term we could just use the connector type to decide this,
  if it's MST it's a dynamic connector, and the list_add would need to be
  done late in drm_connector_register.

- Once the need pops up for other connectors to be dynamic (like for
  dynamic drm_bridge hotplug) we can add a drm_connector_dynamic_init or
  similar. I don't think splitting up _init further like you do here in
  two functions is correct, because the only place where it's correct to
  add a dynamic/hotplugged connector to the lists is in
  drm_connector_register, not anywhere else.

- It would be really nice if we could add a check to
  drm_connector_register to make sure it's not called for any connector
  which is already on the connector list, since that's a driver bug. Of
  course this would mean we'd need to split that from the internal version
  we call from drm_dev_register.

  Unfortunately that's not yet doable because the following todo isn't
  completed yet:

  https://dri.freedesktop.org/docs/drm/gpu/todo.html#connector-register-unregister-fixes

  I guess just add another bullet there?

Does this sound like a plan or am I completely wrong here?

Cheers, Sima


> ---
>  drivers/gpu/drm/drm_connector.c | 111 ++++++++++++++++++++++++++------
>  include/drm/drm_connector.h     |   6 ++
>  2 files changed, 97 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> index fc35f47e2849e..fd7acae8656b2 100644
> --- a/drivers/gpu/drm/drm_connector.c
> +++ b/drivers/gpu/drm/drm_connector.c
> @@ -218,11 +218,11 @@ void drm_connector_free_work_fn(struct work_struct *work)
>  	}
>  }
>  
> -static int __drm_connector_init(struct drm_device *dev,
> -				struct drm_connector *connector,
> -				const struct drm_connector_funcs *funcs,
> -				int connector_type,
> -				struct i2c_adapter *ddc)
> +static int __drm_connector_init_core(struct drm_device *dev,
> +				     struct drm_connector *connector,
> +				     const struct drm_connector_funcs *funcs,
> +				     int connector_type,
> +				     struct i2c_adapter *ddc)
>  {
>  	struct drm_mode_config *config = &dev->mode_config;
>  	int ret;
> @@ -273,6 +273,7 @@ static int __drm_connector_init(struct drm_device *dev,
>  	/* provide ddc symlink in sysfs */
>  	connector->ddc = ddc;
>  
> +	INIT_LIST_HEAD(&connector->head);
>  	INIT_LIST_HEAD(&connector->global_connector_list_entry);
>  	INIT_LIST_HEAD(&connector->probed_modes);
>  	INIT_LIST_HEAD(&connector->modes);
> @@ -288,14 +289,6 @@ static int __drm_connector_init(struct drm_device *dev,
>  
>  	drm_connector_get_cmdline_mode(connector);
>  
> -	/* We should add connectors at the end to avoid upsetting the connector
> -	 * index too much.
> -	 */
> -	spin_lock_irq(&config->connector_list_lock);
> -	list_add_tail(&connector->head, &config->connector_list);
> -	config->num_connector++;
> -	spin_unlock_irq(&config->connector_list_lock);
> -
>  	if (connector_type != DRM_MODE_CONNECTOR_VIRTUAL &&
>  	    connector_type != DRM_MODE_CONNECTOR_WRITEBACK)
>  		drm_connector_attach_edid_property(connector);
> @@ -332,6 +325,86 @@ static int __drm_connector_init(struct drm_device *dev,
>  	return ret;
>  }
>  
> +/**
> + * drm_connector_init_core - Initialize the core state of a preallocated connector
> + * @dev: DRM device
> + * @connector: the connector to init
> + * @funcs: callbacks for this connector
> + * @connector_type: user visible type of the connector
> + * @ddc: pointer to the associated ddc adapter
> + *
> + * Initialises the core state of preallocated connector. This is
> + * equivalent to drm_connector_init(), without adding the connector to
> + * drm_mode_config::connector_list. This call must be followed by calling
> + * drm_connector_add() during initialization to expose the connector to
> + * in-kernel users via the above list.
> + *
> + * Returns:
> + * Zero on success, error code on failure.
> + */
> +int drm_connector_init_core(struct drm_device *dev,
> +			    struct drm_connector *connector,
> +			    const struct drm_connector_funcs *funcs,
> +			    int connector_type,
> +			    struct i2c_adapter *ddc)
> +{
> +	if (drm_WARN_ON(dev, !(funcs && funcs->destroy)))
> +		return -EINVAL;
> +
> +	return __drm_connector_init_core(dev, connector, funcs, connector_type, ddc);
> +}
> +EXPORT_SYMBOL(drm_connector_init_core);
> +
> +/**
> + * drm_connector_add - Add the connector
> + * @connector: the connector to add
> + *
> + * Add the connector to the drm_mode_config::connector_list, exposing the
> + * connector to in-kernel users. This call must be preceded by a call to
> + * drm_connector_init_core().
> + */
> +void drm_connector_add(struct drm_connector *connector)
> +{
> +	struct drm_device *dev = connector->dev;
> +	struct drm_mode_config *config = &dev->mode_config;
> +
> +	spin_lock_irq(&config->connector_list_lock);
> +	list_add_tail(&connector->head, &config->connector_list);
> +	config->num_connector++;
> +	spin_unlock_irq(&config->connector_list_lock);
> +}
> +EXPORT_SYMBOL(drm_connector_add);
> +
> +static void drm_connector_remove(struct drm_connector *connector)
> +{
> +	struct drm_device *dev = connector->dev;
> +
> +	if (list_empty(&connector->head))
> +		return;
> +
> +	spin_lock_irq(&dev->mode_config.connector_list_lock);
> +	list_del_init(&connector->head);
> +	dev->mode_config.num_connector--;
> +	spin_unlock_irq(&dev->mode_config.connector_list_lock);
> +}
> +
> +static int drm_connector_init_core_and_add(struct drm_device *dev,
> +					   struct drm_connector *connector,
> +					   const struct drm_connector_funcs *funcs,
> +					   int connector_type,
> +					   struct i2c_adapter *ddc)
> +{
> +	int ret;
> +
> +	ret = __drm_connector_init_core(dev, connector, funcs, connector_type, ddc);
> +	if (ret)
> +		return ret;
> +
> +	drm_connector_add(connector);
> +
> +	return 0;
> +}
> +
>  /**
>   * drm_connector_init - Init a preallocated connector
>   * @dev: DRM device
> @@ -361,7 +434,7 @@ int drm_connector_init(struct drm_device *dev,
>  	if (drm_WARN_ON(dev, !(funcs && funcs->destroy)))
>  		return -EINVAL;
>  
> -	return __drm_connector_init(dev, connector, funcs, connector_type, NULL);
> +	return drm_connector_init_core_and_add(dev, connector, funcs, connector_type, NULL);
>  }
>  EXPORT_SYMBOL(drm_connector_init);
>  
> @@ -398,7 +471,7 @@ int drm_connector_init_with_ddc(struct drm_device *dev,
>  	if (drm_WARN_ON(dev, !(funcs && funcs->destroy)))
>  		return -EINVAL;
>  
> -	return __drm_connector_init(dev, connector, funcs, connector_type, ddc);
> +	return drm_connector_init_core_and_add(dev, connector, funcs, connector_type, ddc);
>  }
>  EXPORT_SYMBOL(drm_connector_init_with_ddc);
>  
> @@ -442,7 +515,7 @@ int drmm_connector_init(struct drm_device *dev,
>  	if (drm_WARN_ON(dev, funcs && funcs->destroy))
>  		return -EINVAL;
>  
> -	ret = __drm_connector_init(dev, connector, funcs, connector_type, ddc);
> +	ret = drm_connector_init_core_and_add(dev, connector, funcs, connector_type, ddc);
>  	if (ret)
>  		return ret;
>  
> @@ -659,10 +732,8 @@ void drm_connector_cleanup(struct drm_connector *connector)
>  	connector->name = NULL;
>  	fwnode_handle_put(connector->fwnode);
>  	connector->fwnode = NULL;
> -	spin_lock_irq(&dev->mode_config.connector_list_lock);
> -	list_del(&connector->head);
> -	dev->mode_config.num_connector--;
> -	spin_unlock_irq(&dev->mode_config.connector_list_lock);
> +
> +	drm_connector_remove(connector);
>  
>  	WARN_ON(connector->state && !connector->funcs->atomic_destroy_state);
>  	if (connector->state && connector->funcs->atomic_destroy_state)
> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
> index e3fa43291f449..2476dcbd3c34d 100644
> --- a/include/drm/drm_connector.h
> +++ b/include/drm/drm_connector.h
> @@ -2122,6 +2122,12 @@ struct drm_connector {
>  
>  #define obj_to_connector(x) container_of(x, struct drm_connector, base)
>  
> +int drm_connector_init_core(struct drm_device *dev,
> +			    struct drm_connector *connector,
> +			    const struct drm_connector_funcs *funcs,
> +			    int connector_type,
> +			    struct i2c_adapter *ddc);
> +void drm_connector_add(struct drm_connector *connector);
>  int drm_connector_init(struct drm_device *dev,
>  		       struct drm_connector *connector,
>  		       const struct drm_connector_funcs *funcs,
> -- 
> 2.44.2
> 

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

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

* Re: [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-12-02 16:35   ` Simona Vetter
@ 2024-12-02 20:07     ` Imre Deak
  2024-12-06 20:48       ` Simona Vetter
  0 siblings, 1 reply; 25+ messages in thread
From: Imre Deak @ 2024-12-02 20:07 UTC (permalink / raw)
  To: Simona Vetter; +Cc: intel-gfx, dri-devel, Jani Nikula, Rodrigo Vivi

On Mon, Dec 02, 2024 at 05:35:34PM +0100, Simona Vetter wrote:
> On Tue, Nov 26, 2024 at 06:18:56PM +0200, Imre Deak wrote:
> > Atm when the connector is added to the drm_mode_config::connector_list,
> > the connector may not be fully initialized yet. This is not a problem
> > for user space, which will see the connector only after it's registered
> > later, it could be a problem for in-kernel users looking up connectors
> > via the above list.
> > 
> > To resolve the above issue, add a way to separately initialize the DRM
> > core specific parts of the connector and add it to the above list. This
> > will move adding the connector to the list after the properties on the
> > connector have been added, this is ok since these steps don't have a
> > dependency.
> > 
> > v2: (Jani)
> > - Let initing DDC as well via drm_connector_init_core().
> > - Rename __drm_connector_init to drm_connector_init_core_and_add().
> > 
> > Cc: Jani Nikula <jani.nikula@intel.com>
> > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> (v1)
> > Signed-off-by: Imre Deak <imre.deak@intel.com>
> 
> So looking at the thread, I guess it'd be good to document some consensus
> stance on kunit tests, and whether or not we're at the point where for new
> things or extensions of functions that already have kunit coverage we need
> them. But I think that's orthogonal.
> 
> On the patch itself, I don't think it's the right fix. And by extension, I
> don't think the i915 fix is correct either, because we have a bigger mess
> here:
> 
> - GETCONNECTOR does indeed not show a connector that's not yet registers.
> 
> - But GETRESOURCES happily lists them. Which means we have a very silly
>   race here, which isn't good.

Right, didn't notice that, it needs to be fixed as well.

> - I think the correct solution is to move the list_add to the registration
>   step, which would also move connectors in-line with other dynamically
>   added kms objects like blobs or fbs (although those have a single-step
>   registration+init function, so it's less obvious what's going on).
> 
> - The same thing applies on the unregister side of things, once a
>   connector is unregistered I don't think it should stick around in any
>   list. But I'm not entirely sure, would need to check with Lyude to make
>   sure this doesn't break anything in mst helpers.
> 
> Now implementing this is going to be a bit a mess:
> 
> - For static connectors drivers _really_ want the connectors to be on the
>   lists, otherwise a lot of the driver setup code just wont work. And
>   we've worked towards removing all the explicit drm_connector_register
>   calls, readding feels a bit silly.
> 
> - I think short-term we could just use the connector type to decide this,
>   if it's MST it's a dynamic connector, and the list_add would need to be
>   done late in drm_connector_register.
> 
> - Once the need pops up for other connectors to be dynamic (like for
>   dynamic drm_bridge hotplug) we can add a drm_connector_dynamic_init or
>   similar. I don't think splitting up _init further like you do here in
>   two functions is correct, because the only place where it's correct to
>   add a dynamic/hotplugged connector to the lists is in
>   drm_connector_register, not anywhere else.

Afaiu the above means adding drm_connector_dynamic_init() which would
only init the connector w/o adding it to the connector list (i.e. what
drm_connector_init_core() does) and adding this connector to the list
from drm_connector_register(), hence not needing the drm_connector_add()
interface.

I agree this would be better, in the following way: the deferred
registration via drm_connector_register_all() should continue to work -
if drm_connector_register() is called by the driver before the drm
device is registered. So a dynamically inited connector should be added
to the list - if not yet added - early in the function before returning
if the drm device is not yet registered.

Are you ok with the above for now, also fixing GETRESOURCES by checking
there if the connector is already registered?

Moving the addition of the connector to the list later could be done
once the deferred registration happens in a different way (i.e. not via
the current connector list).

> - It would be really nice if we could add a check to
>   drm_connector_register to make sure it's not called for any connector
>   which is already on the connector list, since that's a driver bug. Of
>   course this would mean we'd need to split that from the internal version
>   we call from drm_dev_register.
> 
>   Unfortunately that's not yet doable because the following todo isn't
>   completed yet:
> 
>   https://dri.freedesktop.org/docs/drm/gpu/todo.html#connector-register-unregister-fixes
> 
>   I guess just add another bullet there?
> 
> Does this sound like a plan or am I completely wrong here?
> 
> Cheers, Sima
> 
> 
> > ---
> >  drivers/gpu/drm/drm_connector.c | 111 ++++++++++++++++++++++++++------
> >  include/drm/drm_connector.h     |   6 ++
> >  2 files changed, 97 insertions(+), 20 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> > index fc35f47e2849e..fd7acae8656b2 100644
> > --- a/drivers/gpu/drm/drm_connector.c
> > +++ b/drivers/gpu/drm/drm_connector.c
> > @@ -218,11 +218,11 @@ void drm_connector_free_work_fn(struct work_struct *work)
> >  	}
> >  }
> >  
> > -static int __drm_connector_init(struct drm_device *dev,
> > -				struct drm_connector *connector,
> > -				const struct drm_connector_funcs *funcs,
> > -				int connector_type,
> > -				struct i2c_adapter *ddc)
> > +static int __drm_connector_init_core(struct drm_device *dev,
> > +				     struct drm_connector *connector,
> > +				     const struct drm_connector_funcs *funcs,
> > +				     int connector_type,
> > +				     struct i2c_adapter *ddc)
> >  {
> >  	struct drm_mode_config *config = &dev->mode_config;
> >  	int ret;
> > @@ -273,6 +273,7 @@ static int __drm_connector_init(struct drm_device *dev,
> >  	/* provide ddc symlink in sysfs */
> >  	connector->ddc = ddc;
> >  
> > +	INIT_LIST_HEAD(&connector->head);
> >  	INIT_LIST_HEAD(&connector->global_connector_list_entry);
> >  	INIT_LIST_HEAD(&connector->probed_modes);
> >  	INIT_LIST_HEAD(&connector->modes);
> > @@ -288,14 +289,6 @@ static int __drm_connector_init(struct drm_device *dev,
> >  
> >  	drm_connector_get_cmdline_mode(connector);
> >  
> > -	/* We should add connectors at the end to avoid upsetting the connector
> > -	 * index too much.
> > -	 */
> > -	spin_lock_irq(&config->connector_list_lock);
> > -	list_add_tail(&connector->head, &config->connector_list);
> > -	config->num_connector++;
> > -	spin_unlock_irq(&config->connector_list_lock);
> > -
> >  	if (connector_type != DRM_MODE_CONNECTOR_VIRTUAL &&
> >  	    connector_type != DRM_MODE_CONNECTOR_WRITEBACK)
> >  		drm_connector_attach_edid_property(connector);
> > @@ -332,6 +325,86 @@ static int __drm_connector_init(struct drm_device *dev,
> >  	return ret;
> >  }
> >  
> > +/**
> > + * drm_connector_init_core - Initialize the core state of a preallocated connector
> > + * @dev: DRM device
> > + * @connector: the connector to init
> > + * @funcs: callbacks for this connector
> > + * @connector_type: user visible type of the connector
> > + * @ddc: pointer to the associated ddc adapter
> > + *
> > + * Initialises the core state of preallocated connector. This is
> > + * equivalent to drm_connector_init(), without adding the connector to
> > + * drm_mode_config::connector_list. This call must be followed by calling
> > + * drm_connector_add() during initialization to expose the connector to
> > + * in-kernel users via the above list.
> > + *
> > + * Returns:
> > + * Zero on success, error code on failure.
> > + */
> > +int drm_connector_init_core(struct drm_device *dev,
> > +			    struct drm_connector *connector,
> > +			    const struct drm_connector_funcs *funcs,
> > +			    int connector_type,
> > +			    struct i2c_adapter *ddc)
> > +{
> > +	if (drm_WARN_ON(dev, !(funcs && funcs->destroy)))
> > +		return -EINVAL;
> > +
> > +	return __drm_connector_init_core(dev, connector, funcs, connector_type, ddc);
> > +}
> > +EXPORT_SYMBOL(drm_connector_init_core);
> > +
> > +/**
> > + * drm_connector_add - Add the connector
> > + * @connector: the connector to add
> > + *
> > + * Add the connector to the drm_mode_config::connector_list, exposing the
> > + * connector to in-kernel users. This call must be preceded by a call to
> > + * drm_connector_init_core().
> > + */
> > +void drm_connector_add(struct drm_connector *connector)
> > +{
> > +	struct drm_device *dev = connector->dev;
> > +	struct drm_mode_config *config = &dev->mode_config;
> > +
> > +	spin_lock_irq(&config->connector_list_lock);
> > +	list_add_tail(&connector->head, &config->connector_list);
> > +	config->num_connector++;
> > +	spin_unlock_irq(&config->connector_list_lock);
> > +}
> > +EXPORT_SYMBOL(drm_connector_add);
> > +
> > +static void drm_connector_remove(struct drm_connector *connector)
> > +{
> > +	struct drm_device *dev = connector->dev;
> > +
> > +	if (list_empty(&connector->head))
> > +		return;
> > +
> > +	spin_lock_irq(&dev->mode_config.connector_list_lock);
> > +	list_del_init(&connector->head);
> > +	dev->mode_config.num_connector--;
> > +	spin_unlock_irq(&dev->mode_config.connector_list_lock);
> > +}
> > +
> > +static int drm_connector_init_core_and_add(struct drm_device *dev,
> > +					   struct drm_connector *connector,
> > +					   const struct drm_connector_funcs *funcs,
> > +					   int connector_type,
> > +					   struct i2c_adapter *ddc)
> > +{
> > +	int ret;
> > +
> > +	ret = __drm_connector_init_core(dev, connector, funcs, connector_type, ddc);
> > +	if (ret)
> > +		return ret;
> > +
> > +	drm_connector_add(connector);
> > +
> > +	return 0;
> > +}
> > +
> >  /**
> >   * drm_connector_init - Init a preallocated connector
> >   * @dev: DRM device
> > @@ -361,7 +434,7 @@ int drm_connector_init(struct drm_device *dev,
> >  	if (drm_WARN_ON(dev, !(funcs && funcs->destroy)))
> >  		return -EINVAL;
> >  
> > -	return __drm_connector_init(dev, connector, funcs, connector_type, NULL);
> > +	return drm_connector_init_core_and_add(dev, connector, funcs, connector_type, NULL);
> >  }
> >  EXPORT_SYMBOL(drm_connector_init);
> >  
> > @@ -398,7 +471,7 @@ int drm_connector_init_with_ddc(struct drm_device *dev,
> >  	if (drm_WARN_ON(dev, !(funcs && funcs->destroy)))
> >  		return -EINVAL;
> >  
> > -	return __drm_connector_init(dev, connector, funcs, connector_type, ddc);
> > +	return drm_connector_init_core_and_add(dev, connector, funcs, connector_type, ddc);
> >  }
> >  EXPORT_SYMBOL(drm_connector_init_with_ddc);
> >  
> > @@ -442,7 +515,7 @@ int drmm_connector_init(struct drm_device *dev,
> >  	if (drm_WARN_ON(dev, funcs && funcs->destroy))
> >  		return -EINVAL;
> >  
> > -	ret = __drm_connector_init(dev, connector, funcs, connector_type, ddc);
> > +	ret = drm_connector_init_core_and_add(dev, connector, funcs, connector_type, ddc);
> >  	if (ret)
> >  		return ret;
> >  
> > @@ -659,10 +732,8 @@ void drm_connector_cleanup(struct drm_connector *connector)
> >  	connector->name = NULL;
> >  	fwnode_handle_put(connector->fwnode);
> >  	connector->fwnode = NULL;
> > -	spin_lock_irq(&dev->mode_config.connector_list_lock);
> > -	list_del(&connector->head);
> > -	dev->mode_config.num_connector--;
> > -	spin_unlock_irq(&dev->mode_config.connector_list_lock);
> > +
> > +	drm_connector_remove(connector);
> >  
> >  	WARN_ON(connector->state && !connector->funcs->atomic_destroy_state);
> >  	if (connector->state && connector->funcs->atomic_destroy_state)
> > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
> > index e3fa43291f449..2476dcbd3c34d 100644
> > --- a/include/drm/drm_connector.h
> > +++ b/include/drm/drm_connector.h
> > @@ -2122,6 +2122,12 @@ struct drm_connector {
> >  
> >  #define obj_to_connector(x) container_of(x, struct drm_connector, base)
> >  
> > +int drm_connector_init_core(struct drm_device *dev,
> > +			    struct drm_connector *connector,
> > +			    const struct drm_connector_funcs *funcs,
> > +			    int connector_type,
> > +			    struct i2c_adapter *ddc);
> > +void drm_connector_add(struct drm_connector *connector);
> >  int drm_connector_init(struct drm_device *dev,
> >  		       struct drm_connector *connector,
> >  		       const struct drm_connector_funcs *funcs,
> > -- 
> > 2.44.2
> > 
> 
> -- 
> Simona Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch

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

* Re: [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-12-02 15:44               ` Jani Nikula
@ 2024-12-03  9:36                 ` Maxime Ripard
  2024-12-03 11:17                   ` Jani Nikula
  0 siblings, 1 reply; 25+ messages in thread
From: Maxime Ripard @ 2024-12-03  9:36 UTC (permalink / raw)
  To: Jani Nikula
  Cc: Imre Deak, intel-gfx, Maarten Lankhorst, Thomas Zimmermann,
	Dave Airlie, Daniel Vetter, dri-devel, Rodrigo Vivi

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

On Mon, Dec 02, 2024 at 05:44:27PM +0200, Jani Nikula wrote:
> >> It's super tempting for people to just get their jobs done. If doing
> >> the right thing adds yet another hurdle, we may see more stuff being
> >> added in drivers instead of drm core.
> >
> > I really enjoy hidden threats.
> 
> None were implied. That's your interpretation of what I honestly think
> is a plausible outcome.

I obviously misinterpreted what you were saying then. Sorry for the
whole tone of that mail.

> I try to push people towards contributing to drm core instead of
> drivers, and it's not always easy as it is. It's just a guess, but
> I'll bet the majority of drm contributors have never run kunit tests
> themselves.

Right, but I don't think it's worth worrying over either. If one stops
contributing because they are afraid of running one documented command
that takes a few seconds, they would have done so at any other obstacle.
We have much bigger barriers of entry, at several levels.

All of them are here for a good reason, and because we have collectively
judged that the trade-off between adding a barrier and increasing the
quality of the framework was worth it.

I believe tests are worth it too.

But anyway, it's really not what I had in mind.

Maxime

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]

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

* Re: [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-12-03  9:36                 ` Maxime Ripard
@ 2024-12-03 11:17                   ` Jani Nikula
  0 siblings, 0 replies; 25+ messages in thread
From: Jani Nikula @ 2024-12-03 11:17 UTC (permalink / raw)
  To: Maxime Ripard
  Cc: Imre Deak, intel-gfx, Maarten Lankhorst, Thomas Zimmermann,
	Dave Airlie, Daniel Vetter, dri-devel, Rodrigo Vivi

On Tue, 03 Dec 2024, Maxime Ripard <mripard@kernel.org> wrote:
> On Mon, Dec 02, 2024 at 05:44:27PM +0200, Jani Nikula wrote:
>> >> It's super tempting for people to just get their jobs done. If doing
>> >> the right thing adds yet another hurdle, we may see more stuff being
>> >> added in drivers instead of drm core.
>> >
>> > I really enjoy hidden threats.
>> 
>> None were implied. That's your interpretation of what I honestly think
>> is a plausible outcome.
>
> I obviously misinterpreted what you were saying then. Sorry for the
> whole tone of that mail.

Don't worry about it. Likewise, my mail wasn't a stellar example of
communication either. Sorry about that. Let's move on.

>> I try to push people towards contributing to drm core instead of
>> drivers, and it's not always easy as it is. It's just a guess, but
>> I'll bet the majority of drm contributors have never run kunit tests
>> themselves.
>
> Right, but I don't think it's worth worrying over either. If one stops
> contributing because they are afraid of running one documented command
> that takes a few seconds, they would have done so at any other obstacle.
> We have much bigger barriers of entry, at several levels.
>
> All of them are here for a good reason, and because we have collectively
> judged that the trade-off between adding a barrier and increasing the
> quality of the framework was worth it.
>
> I believe tests are worth it too.
>
> But anyway, it's really not what I had in mind.

Would you mind drafting some ground rules for what you think the
requirements for kunit tests should be? What's the bare minimum, what's
the goal?

BR,
Jani.


-- 
Jani Nikula, Intel

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

* Re: [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps
  2024-12-02 20:07     ` Imre Deak
@ 2024-12-06 20:48       ` Simona Vetter
  0 siblings, 0 replies; 25+ messages in thread
From: Simona Vetter @ 2024-12-06 20:48 UTC (permalink / raw)
  To: Imre Deak; +Cc: Simona Vetter, intel-gfx, dri-devel, Jani Nikula, Rodrigo Vivi

On Mon, Dec 02, 2024 at 10:07:23PM +0200, Imre Deak wrote:
> On Mon, Dec 02, 2024 at 05:35:34PM +0100, Simona Vetter wrote:
> > On Tue, Nov 26, 2024 at 06:18:56PM +0200, Imre Deak wrote:
> > > Atm when the connector is added to the drm_mode_config::connector_list,
> > > the connector may not be fully initialized yet. This is not a problem
> > > for user space, which will see the connector only after it's registered
> > > later, it could be a problem for in-kernel users looking up connectors
> > > via the above list.
> > > 
> > > To resolve the above issue, add a way to separately initialize the DRM
> > > core specific parts of the connector and add it to the above list. This
> > > will move adding the connector to the list after the properties on the
> > > connector have been added, this is ok since these steps don't have a
> > > dependency.
> > > 
> > > v2: (Jani)
> > > - Let initing DDC as well via drm_connector_init_core().
> > > - Rename __drm_connector_init to drm_connector_init_core_and_add().
> > > 
> > > Cc: Jani Nikula <jani.nikula@intel.com>
> > > Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> (v1)
> > > Signed-off-by: Imre Deak <imre.deak@intel.com>
> > 
> > So looking at the thread, I guess it'd be good to document some consensus
> > stance on kunit tests, and whether or not we're at the point where for new
> > things or extensions of functions that already have kunit coverage we need
> > them. But I think that's orthogonal.
> > 
> > On the patch itself, I don't think it's the right fix. And by extension, I
> > don't think the i915 fix is correct either, because we have a bigger mess
> > here:
> > 
> > - GETCONNECTOR does indeed not show a connector that's not yet registers.
> > 
> > - But GETRESOURCES happily lists them. Which means we have a very silly
> >   race here, which isn't good.
> 
> Right, didn't notice that, it needs to be fixed as well.
> 
> > - I think the correct solution is to move the list_add to the registration
> >   step, which would also move connectors in-line with other dynamically
> >   added kms objects like blobs or fbs (although those have a single-step
> >   registration+init function, so it's less obvious what's going on).
> > 
> > - The same thing applies on the unregister side of things, once a
> >   connector is unregistered I don't think it should stick around in any
> >   list. But I'm not entirely sure, would need to check with Lyude to make
> >   sure this doesn't break anything in mst helpers.
> > 
> > Now implementing this is going to be a bit a mess:
> > 
> > - For static connectors drivers _really_ want the connectors to be on the
> >   lists, otherwise a lot of the driver setup code just wont work. And
> >   we've worked towards removing all the explicit drm_connector_register
> >   calls, readding feels a bit silly.
> > 
> > - I think short-term we could just use the connector type to decide this,
> >   if it's MST it's a dynamic connector, and the list_add would need to be
> >   done late in drm_connector_register.
> > 
> > - Once the need pops up for other connectors to be dynamic (like for
> >   dynamic drm_bridge hotplug) we can add a drm_connector_dynamic_init or
> >   similar. I don't think splitting up _init further like you do here in
> >   two functions is correct, because the only place where it's correct to
> >   add a dynamic/hotplugged connector to the lists is in
> >   drm_connector_register, not anywhere else.
> 
> Afaiu the above means adding drm_connector_dynamic_init() which would
> only init the connector w/o adding it to the connector list (i.e. what
> drm_connector_init_core() does) and adding this connector to the list
> from drm_connector_register(), hence not needing the drm_connector_add()
> interface.

drm_connector_dynamic_init() is the more explicit approach, my suggestion
was to just hard-code this behavior for dp mst connectors. Which is a bit
a hack. Either is fine with me.

> I agree this would be better, in the following way: the deferred
> registration via drm_connector_register_all() should continue to work -
> if drm_connector_register() is called by the driver before the drm
> device is registered. So a dynamically inited connector should be added
> to the list - if not yet added - early in the function before returning
> if the drm device is not yet registered.
> 
> Are you ok with the above for now, also fixing GETRESOURCES by checking
> there if the connector is already registered?

I don't think you need to check for registered connectors. For dynamic
ones this should be impossible, and userspace cannot call any ioctl before
drm_dev_register registers all the non-dynamic connectors.

> Moving the addition of the connector to the list later could be done
> once the deferred registration happens in a different way (i.e. not via
> the current connector list).

I don't think you need that special case, the current code should work,
even for dynamic connectors?

Cheers, Sima

> 
> > - It would be really nice if we could add a check to
> >   drm_connector_register to make sure it's not called for any connector
> >   which is already on the connector list, since that's a driver bug. Of
> >   course this would mean we'd need to split that from the internal version
> >   we call from drm_dev_register.
> > 
> >   Unfortunately that's not yet doable because the following todo isn't
> >   completed yet:
> > 
> >   https://dri.freedesktop.org/docs/drm/gpu/todo.html#connector-register-unregister-fixes
> > 
> >   I guess just add another bullet there?
> > 
> > Does this sound like a plan or am I completely wrong here?
> > 
> > Cheers, Sima
> > 
> > 
> > > ---
> > >  drivers/gpu/drm/drm_connector.c | 111 ++++++++++++++++++++++++++------
> > >  include/drm/drm_connector.h     |   6 ++
> > >  2 files changed, 97 insertions(+), 20 deletions(-)
> > > 
> > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
> > > index fc35f47e2849e..fd7acae8656b2 100644
> > > --- a/drivers/gpu/drm/drm_connector.c
> > > +++ b/drivers/gpu/drm/drm_connector.c
> > > @@ -218,11 +218,11 @@ void drm_connector_free_work_fn(struct work_struct *work)
> > >  	}
> > >  }
> > >  
> > > -static int __drm_connector_init(struct drm_device *dev,
> > > -				struct drm_connector *connector,
> > > -				const struct drm_connector_funcs *funcs,
> > > -				int connector_type,
> > > -				struct i2c_adapter *ddc)
> > > +static int __drm_connector_init_core(struct drm_device *dev,
> > > +				     struct drm_connector *connector,
> > > +				     const struct drm_connector_funcs *funcs,
> > > +				     int connector_type,
> > > +				     struct i2c_adapter *ddc)
> > >  {
> > >  	struct drm_mode_config *config = &dev->mode_config;
> > >  	int ret;
> > > @@ -273,6 +273,7 @@ static int __drm_connector_init(struct drm_device *dev,
> > >  	/* provide ddc symlink in sysfs */
> > >  	connector->ddc = ddc;
> > >  
> > > +	INIT_LIST_HEAD(&connector->head);
> > >  	INIT_LIST_HEAD(&connector->global_connector_list_entry);
> > >  	INIT_LIST_HEAD(&connector->probed_modes);
> > >  	INIT_LIST_HEAD(&connector->modes);
> > > @@ -288,14 +289,6 @@ static int __drm_connector_init(struct drm_device *dev,
> > >  
> > >  	drm_connector_get_cmdline_mode(connector);
> > >  
> > > -	/* We should add connectors at the end to avoid upsetting the connector
> > > -	 * index too much.
> > > -	 */
> > > -	spin_lock_irq(&config->connector_list_lock);
> > > -	list_add_tail(&connector->head, &config->connector_list);
> > > -	config->num_connector++;
> > > -	spin_unlock_irq(&config->connector_list_lock);
> > > -
> > >  	if (connector_type != DRM_MODE_CONNECTOR_VIRTUAL &&
> > >  	    connector_type != DRM_MODE_CONNECTOR_WRITEBACK)
> > >  		drm_connector_attach_edid_property(connector);
> > > @@ -332,6 +325,86 @@ static int __drm_connector_init(struct drm_device *dev,
> > >  	return ret;
> > >  }
> > >  
> > > +/**
> > > + * drm_connector_init_core - Initialize the core state of a preallocated connector
> > > + * @dev: DRM device
> > > + * @connector: the connector to init
> > > + * @funcs: callbacks for this connector
> > > + * @connector_type: user visible type of the connector
> > > + * @ddc: pointer to the associated ddc adapter
> > > + *
> > > + * Initialises the core state of preallocated connector. This is
> > > + * equivalent to drm_connector_init(), without adding the connector to
> > > + * drm_mode_config::connector_list. This call must be followed by calling
> > > + * drm_connector_add() during initialization to expose the connector to
> > > + * in-kernel users via the above list.
> > > + *
> > > + * Returns:
> > > + * Zero on success, error code on failure.
> > > + */
> > > +int drm_connector_init_core(struct drm_device *dev,
> > > +			    struct drm_connector *connector,
> > > +			    const struct drm_connector_funcs *funcs,
> > > +			    int connector_type,
> > > +			    struct i2c_adapter *ddc)
> > > +{
> > > +	if (drm_WARN_ON(dev, !(funcs && funcs->destroy)))
> > > +		return -EINVAL;
> > > +
> > > +	return __drm_connector_init_core(dev, connector, funcs, connector_type, ddc);
> > > +}
> > > +EXPORT_SYMBOL(drm_connector_init_core);
> > > +
> > > +/**
> > > + * drm_connector_add - Add the connector
> > > + * @connector: the connector to add
> > > + *
> > > + * Add the connector to the drm_mode_config::connector_list, exposing the
> > > + * connector to in-kernel users. This call must be preceded by a call to
> > > + * drm_connector_init_core().
> > > + */
> > > +void drm_connector_add(struct drm_connector *connector)
> > > +{
> > > +	struct drm_device *dev = connector->dev;
> > > +	struct drm_mode_config *config = &dev->mode_config;
> > > +
> > > +	spin_lock_irq(&config->connector_list_lock);
> > > +	list_add_tail(&connector->head, &config->connector_list);
> > > +	config->num_connector++;
> > > +	spin_unlock_irq(&config->connector_list_lock);
> > > +}
> > > +EXPORT_SYMBOL(drm_connector_add);
> > > +
> > > +static void drm_connector_remove(struct drm_connector *connector)
> > > +{
> > > +	struct drm_device *dev = connector->dev;
> > > +
> > > +	if (list_empty(&connector->head))
> > > +		return;
> > > +
> > > +	spin_lock_irq(&dev->mode_config.connector_list_lock);
> > > +	list_del_init(&connector->head);
> > > +	dev->mode_config.num_connector--;
> > > +	spin_unlock_irq(&dev->mode_config.connector_list_lock);
> > > +}
> > > +
> > > +static int drm_connector_init_core_and_add(struct drm_device *dev,
> > > +					   struct drm_connector *connector,
> > > +					   const struct drm_connector_funcs *funcs,
> > > +					   int connector_type,
> > > +					   struct i2c_adapter *ddc)
> > > +{
> > > +	int ret;
> > > +
> > > +	ret = __drm_connector_init_core(dev, connector, funcs, connector_type, ddc);
> > > +	if (ret)
> > > +		return ret;
> > > +
> > > +	drm_connector_add(connector);
> > > +
> > > +	return 0;
> > > +}
> > > +
> > >  /**
> > >   * drm_connector_init - Init a preallocated connector
> > >   * @dev: DRM device
> > > @@ -361,7 +434,7 @@ int drm_connector_init(struct drm_device *dev,
> > >  	if (drm_WARN_ON(dev, !(funcs && funcs->destroy)))
> > >  		return -EINVAL;
> > >  
> > > -	return __drm_connector_init(dev, connector, funcs, connector_type, NULL);
> > > +	return drm_connector_init_core_and_add(dev, connector, funcs, connector_type, NULL);
> > >  }
> > >  EXPORT_SYMBOL(drm_connector_init);
> > >  
> > > @@ -398,7 +471,7 @@ int drm_connector_init_with_ddc(struct drm_device *dev,
> > >  	if (drm_WARN_ON(dev, !(funcs && funcs->destroy)))
> > >  		return -EINVAL;
> > >  
> > > -	return __drm_connector_init(dev, connector, funcs, connector_type, ddc);
> > > +	return drm_connector_init_core_and_add(dev, connector, funcs, connector_type, ddc);
> > >  }
> > >  EXPORT_SYMBOL(drm_connector_init_with_ddc);
> > >  
> > > @@ -442,7 +515,7 @@ int drmm_connector_init(struct drm_device *dev,
> > >  	if (drm_WARN_ON(dev, funcs && funcs->destroy))
> > >  		return -EINVAL;
> > >  
> > > -	ret = __drm_connector_init(dev, connector, funcs, connector_type, ddc);
> > > +	ret = drm_connector_init_core_and_add(dev, connector, funcs, connector_type, ddc);
> > >  	if (ret)
> > >  		return ret;
> > >  
> > > @@ -659,10 +732,8 @@ void drm_connector_cleanup(struct drm_connector *connector)
> > >  	connector->name = NULL;
> > >  	fwnode_handle_put(connector->fwnode);
> > >  	connector->fwnode = NULL;
> > > -	spin_lock_irq(&dev->mode_config.connector_list_lock);
> > > -	list_del(&connector->head);
> > > -	dev->mode_config.num_connector--;
> > > -	spin_unlock_irq(&dev->mode_config.connector_list_lock);
> > > +
> > > +	drm_connector_remove(connector);
> > >  
> > >  	WARN_ON(connector->state && !connector->funcs->atomic_destroy_state);
> > >  	if (connector->state && connector->funcs->atomic_destroy_state)
> > > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
> > > index e3fa43291f449..2476dcbd3c34d 100644
> > > --- a/include/drm/drm_connector.h
> > > +++ b/include/drm/drm_connector.h
> > > @@ -2122,6 +2122,12 @@ struct drm_connector {
> > >  
> > >  #define obj_to_connector(x) container_of(x, struct drm_connector, base)
> > >  
> > > +int drm_connector_init_core(struct drm_device *dev,
> > > +			    struct drm_connector *connector,
> > > +			    const struct drm_connector_funcs *funcs,
> > > +			    int connector_type,
> > > +			    struct i2c_adapter *ddc);
> > > +void drm_connector_add(struct drm_connector *connector);
> > >  int drm_connector_init(struct drm_device *dev,
> > >  		       struct drm_connector *connector,
> > >  		       const struct drm_connector_funcs *funcs,
> > > -- 
> > > 2.44.2
> > > 
> > 
> > -- 
> > Simona Vetter
> > Software Engineer, Intel Corporation
> > http://blog.ffwll.ch

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

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

end of thread, other threads:[~2024-12-06 20:48 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-26 16:18 [PATCH v2 0/4] drm/dp: Expose only a properly inited connector Imre Deak
2024-11-26 16:18 ` [PATCH v2 1/4] drm/dp: Add a way to init/add a connector in separate steps Imre Deak
2024-11-29 14:26   ` Imre Deak
2024-11-29 14:46     ` Maxime Ripard
2024-11-29 15:58       ` Jani Nikula
2024-12-02 10:45         ` Maxime Ripard
2024-11-29 16:12       ` Imre Deak
2024-12-02 10:48         ` Maxime Ripard
2024-12-02 12:07           ` Jani Nikula
2024-12-02 13:24             ` Imre Deak
2024-12-02 15:07               ` Maxime Ripard
2024-12-02 15:31                 ` Imre Deak
2024-12-02 15:06             ` Maxime Ripard
2024-12-02 15:44               ` Jani Nikula
2024-12-03  9:36                 ` Maxime Ripard
2024-12-03 11:17                   ` Jani Nikula
2024-12-02 16:35   ` Simona Vetter
2024-12-02 20:07     ` Imre Deak
2024-12-06 20:48       ` Simona Vetter
2024-11-26 16:18 ` [PATCH v2 2/4] drm/i915/dp_mst: Expose a connector to kernel users after it's properly initialized Imre Deak
2024-11-26 16:18 ` [PATCH v2 3/4] drm/i915/dp_mst: Fix error handling while adding a connector Imre Deak
2024-11-26 16:18 ` [PATCH v2 4/4] drm/i915/dp_mst: Use intel_connector vs. drm_connector pointer in intel_dp_mst.c Imre Deak
2024-11-26 16:51 ` ✗ Fi.CI.SPARSE: warning for drm/dp: Expose only a properly inited connector Patchwork
2024-11-26 17:05 ` ✓ i915.CI.BAT: success " Patchwork
2024-11-26 18:30 ` ✗ i915.CI.Full: failure " Patchwork

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