[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250425-hdmi-conn-yuv-v4-15-5e55e2aaa3fa@collabora.com>
Date: Fri, 25 Apr 2025 13:27:06 +0300
From: Cristian Ciocaltea <cristian.ciocaltea@...labora.com>
To: Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>,
Maxime Ripard <mripard@...nel.org>, Thomas Zimmermann <tzimmermann@...e.de>,
David Airlie <airlied@...il.com>, Simona Vetter <simona@...ll.ch>,
Dave Stevenson <dave.stevenson@...pberrypi.com>,
Dmitry Baryshkov <dmitry.baryshkov@....qualcomm.com>,
Dmitry Baryshkov <lumag@...nel.org>, Dmitry Baryshkov <lumag@...nel.org>
Cc: kernel@...labora.com, dri-devel@...ts.freedesktop.org,
linux-kernel@...r.kernel.org
Subject: [PATCH v4 15/23] drm/tests: hdmi: Restart atomic sequence on
EDEADLK
Make use of the newly introduced drm_kunit_atomic_restart_on_deadlock()
helper to handle EDEADLK errors throughout all test cases.
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@...labora.com>
---
drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c | 38 ++++++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c b/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c
index c8bb131d63ea6d0c9e166c8d9ba5e403118cd9f1..8c795eeb1090b50993c1907a9fc5bb72baa556e1 100644
--- a/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c
+++ b/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c
@@ -276,7 +276,9 @@ static void drm_test_check_broadcast_rgb_crtc_mode_changed(struct kunit *test)
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state);
+retry:
new_conn_state = drm_atomic_get_connector_state(state, conn);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, new_conn_state);
old_conn_state = drm_atomic_get_old_connector_state(state, conn);
@@ -289,6 +291,7 @@ static void drm_test_check_broadcast_rgb_crtc_mode_changed(struct kunit *test)
new_conn_state->hdmi.broadcast_rgb);
ret = drm_atomic_check_only(state);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_EQ(test, ret, 0);
new_conn_state = drm_atomic_get_new_connector_state(state, conn);
@@ -345,7 +348,9 @@ static void drm_test_check_broadcast_rgb_crtc_mode_not_changed(struct kunit *tes
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state);
+retry:
new_conn_state = drm_atomic_get_connector_state(state, conn);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, new_conn_state);
old_conn_state = drm_atomic_get_old_connector_state(state, conn);
@@ -354,6 +359,7 @@ static void drm_test_check_broadcast_rgb_crtc_mode_not_changed(struct kunit *tes
new_conn_state->hdmi.broadcast_rgb = old_conn_state->hdmi.broadcast_rgb;
ret = drm_atomic_check_only(state);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_EQ(test, ret, 0);
old_conn_state = drm_atomic_get_old_connector_state(state, conn);
@@ -416,7 +422,9 @@ static void drm_test_check_broadcast_rgb_auto_cea_mode(struct kunit *test)
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state);
+retry:
conn_state = drm_atomic_get_connector_state(state, conn);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state);
KUNIT_ASSERT_EQ(test,
@@ -424,6 +432,7 @@ static void drm_test_check_broadcast_rgb_auto_cea_mode(struct kunit *test)
DRM_HDMI_BROADCAST_RGB_AUTO);
ret = drm_atomic_check_only(state);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_EQ(test, ret, 0);
conn_state = drm_atomic_get_connector_state(state, conn);
@@ -475,7 +484,9 @@ static void drm_test_check_broadcast_rgb_auto_cea_mode_vic_1(struct kunit *test)
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state);
+retry:
conn_state = drm_atomic_get_connector_state(state, conn);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state);
KUNIT_ASSERT_EQ(test,
@@ -483,6 +494,7 @@ static void drm_test_check_broadcast_rgb_auto_cea_mode_vic_1(struct kunit *test)
DRM_HDMI_BROADCAST_RGB_AUTO);
ret = drm_atomic_check_only(state);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_EQ(test, ret, 0);
conn_state = drm_atomic_get_connector_state(state, conn);
@@ -536,12 +548,15 @@ static void drm_test_check_broadcast_rgb_full_cea_mode(struct kunit *test)
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state);
+retry:
conn_state = drm_atomic_get_connector_state(state, conn);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state);
conn_state->hdmi.broadcast_rgb = DRM_HDMI_BROADCAST_RGB_FULL;
ret = drm_atomic_check_only(state);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_EQ(test, ret, 0);
conn_state = drm_atomic_get_connector_state(state, conn);
@@ -597,12 +612,15 @@ static void drm_test_check_broadcast_rgb_full_cea_mode_vic_1(struct kunit *test)
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state);
+retry:
conn_state = drm_atomic_get_connector_state(state, conn);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state);
conn_state->hdmi.broadcast_rgb = DRM_HDMI_BROADCAST_RGB_FULL;
ret = drm_atomic_check_only(state);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_EQ(test, ret, 0);
conn_state = drm_atomic_get_connector_state(state, conn);
@@ -660,12 +678,15 @@ static void drm_test_check_broadcast_rgb_limited_cea_mode(struct kunit *test)
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state);
+retry:
conn_state = drm_atomic_get_connector_state(state, conn);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state);
conn_state->hdmi.broadcast_rgb = DRM_HDMI_BROADCAST_RGB_LIMITED;
ret = drm_atomic_check_only(state);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_EQ(test, ret, 0);
conn_state = drm_atomic_get_connector_state(state, conn);
@@ -721,12 +742,15 @@ static void drm_test_check_broadcast_rgb_limited_cea_mode_vic_1(struct kunit *te
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state);
+retry:
conn_state = drm_atomic_get_connector_state(state, conn);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state);
conn_state->hdmi.broadcast_rgb = DRM_HDMI_BROADCAST_RGB_LIMITED;
ret = drm_atomic_check_only(state);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_EQ(test, ret, 0);
conn_state = drm_atomic_get_connector_state(state, conn);
@@ -785,7 +809,9 @@ static void drm_test_check_output_bpc_crtc_mode_changed(struct kunit *test)
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state);
+retry:
new_conn_state = drm_atomic_get_connector_state(state, conn);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, new_conn_state);
old_conn_state = drm_atomic_get_old_connector_state(state, conn);
@@ -798,6 +824,7 @@ static void drm_test_check_output_bpc_crtc_mode_changed(struct kunit *test)
new_conn_state->max_requested_bpc);
ret = drm_atomic_check_only(state);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_EQ(test, ret, 0);
old_conn_state = drm_atomic_get_old_connector_state(state, conn);
@@ -861,7 +888,9 @@ static void drm_test_check_output_bpc_crtc_mode_not_changed(struct kunit *test)
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state);
+retry:
new_conn_state = drm_atomic_get_connector_state(state, conn);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, new_conn_state);
old_conn_state = drm_atomic_get_old_connector_state(state, conn);
@@ -872,6 +901,7 @@ static void drm_test_check_output_bpc_crtc_mode_not_changed(struct kunit *test)
old_conn_state->hdmi.output_bpc);
ret = drm_atomic_check_only(state);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_EQ(test, ret, 0);
old_conn_state = drm_atomic_get_old_connector_state(state, conn);
@@ -1136,12 +1166,15 @@ static void drm_test_check_hdmi_funcs_reject_rate(struct kunit *test)
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state);
+retry:
crtc_state = drm_atomic_get_crtc_state(state, crtc);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, crtc_state);
crtc_state->connectors_changed = true;
ret = drm_atomic_check_only(state);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_EXPECT_LT(test, ret, 0);
drm_modeset_drop_locks(&ctx);
@@ -1646,7 +1679,9 @@ static void drm_test_check_disable_connector(struct kunit *test)
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state);
+retry:
crtc_state = drm_atomic_get_crtc_state(state, crtc);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, crtc_state);
crtc_state->active = false;
@@ -1654,12 +1689,15 @@ static void drm_test_check_disable_connector(struct kunit *test)
KUNIT_EXPECT_EQ(test, ret, 0);
conn_state = drm_atomic_get_connector_state(state, conn);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state);
ret = drm_atomic_set_crtc_for_connector(conn_state, NULL);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_EXPECT_EQ(test, ret, 0);
ret = drm_atomic_check_only(state);
+ drm_kunit_atomic_restart_on_deadlock(ret, state, &ctx, retry);
KUNIT_ASSERT_EQ(test, ret, 0);
drm_modeset_drop_locks(&ctx);
--
2.49.0
Powered by blists - more mailing lists