Skip to content

Commit 5d14c08

Browse files
committed
drm/tests: hdmi: Fix recursive locking
The find_preferred_mode() functions takes the mode_config mutex, but due to the order most tests have, is called with the crtc_ww_class_mutex taken. This raises a warning for a circular dependency when running the tests with lockdep. Reorder the tests to call find_preferred_mode before the acquire context has been created to avoid the issue. Reviewed-by: Simona Vetter <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] Signed-off-by: Maxime Ripard <[email protected]>
1 parent 6b6bfd6 commit 5d14c08

File tree

1 file changed

+57
-57
lines changed

1 file changed

+57
-57
lines changed

drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c

Lines changed: 57 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -293,12 +293,12 @@ static void drm_test_check_broadcast_rgb_crtc_mode_changed(struct kunit *test)
293293
crtc = priv->crtc;
294294
conn = &priv->connector;
295295

296-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
297-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
298-
299296
preferred = find_preferred_mode(conn);
300297
KUNIT_ASSERT_NOT_NULL(test, preferred);
301298

299+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
300+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
301+
302302
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
303303
KUNIT_ASSERT_EQ(test, ret, 0);
304304

@@ -357,12 +357,12 @@ static void drm_test_check_broadcast_rgb_crtc_mode_not_changed(struct kunit *tes
357357
crtc = priv->crtc;
358358
conn = &priv->connector;
359359

360-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
361-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
362-
363360
preferred = find_preferred_mode(conn);
364361
KUNIT_ASSERT_NOT_NULL(test, preferred);
365362

363+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
364+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
365+
366366
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
367367
KUNIT_ASSERT_EQ(test, ret, 0);
368368

@@ -422,13 +422,13 @@ static void drm_test_check_broadcast_rgb_auto_cea_mode(struct kunit *test)
422422
conn = &priv->connector;
423423
KUNIT_ASSERT_TRUE(test, conn->display_info.is_hdmi);
424424

425-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
426-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
427-
428425
preferred = find_preferred_mode(conn);
429426
KUNIT_ASSERT_NOT_NULL(test, preferred);
430427
KUNIT_ASSERT_NE(test, drm_match_cea_mode(preferred), 1);
431428

429+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
430+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
431+
432432
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
433433
KUNIT_ASSERT_EQ(test, ret, 0);
434434

@@ -533,13 +533,13 @@ static void drm_test_check_broadcast_rgb_full_cea_mode(struct kunit *test)
533533
conn = &priv->connector;
534534
KUNIT_ASSERT_TRUE(test, conn->display_info.is_hdmi);
535535

536-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
537-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
538-
539536
preferred = find_preferred_mode(conn);
540537
KUNIT_ASSERT_NOT_NULL(test, preferred);
541538
KUNIT_ASSERT_NE(test, drm_match_cea_mode(preferred), 1);
542539

540+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
541+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
542+
543543
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
544544
KUNIT_ASSERT_EQ(test, ret, 0);
545545

@@ -648,13 +648,13 @@ static void drm_test_check_broadcast_rgb_limited_cea_mode(struct kunit *test)
648648
conn = &priv->connector;
649649
KUNIT_ASSERT_TRUE(test, conn->display_info.is_hdmi);
650650

651-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
652-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
653-
654651
preferred = find_preferred_mode(conn);
655652
KUNIT_ASSERT_NOT_NULL(test, preferred);
656653
KUNIT_ASSERT_NE(test, drm_match_cea_mode(preferred), 1);
657654

655+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
656+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
657+
658658
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
659659
KUNIT_ASSERT_EQ(test, ret, 0);
660660

@@ -768,12 +768,12 @@ static void drm_test_check_output_bpc_crtc_mode_changed(struct kunit *test)
768768
ARRAY_SIZE(test_edid_hdmi_1080p_rgb_yuv_dc_max_200mhz));
769769
KUNIT_ASSERT_GT(test, ret, 0);
770770

771-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
772-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
773-
774771
preferred = find_preferred_mode(conn);
775772
KUNIT_ASSERT_NOT_NULL(test, preferred);
776773

774+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
775+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
776+
777777
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
778778
KUNIT_ASSERT_EQ(test, ret, 0);
779779

@@ -842,12 +842,12 @@ static void drm_test_check_output_bpc_crtc_mode_not_changed(struct kunit *test)
842842
ARRAY_SIZE(test_edid_hdmi_1080p_rgb_yuv_dc_max_200mhz));
843843
KUNIT_ASSERT_GT(test, ret, 0);
844844

845-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
846-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
847-
848845
preferred = find_preferred_mode(conn);
849846
KUNIT_ASSERT_NOT_NULL(test, preferred);
850847

848+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
849+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
850+
851851
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
852852
KUNIT_ASSERT_EQ(test, ret, 0);
853853

@@ -916,12 +916,12 @@ static void drm_test_check_output_bpc_dvi(struct kunit *test)
916916
info = &conn->display_info;
917917
KUNIT_ASSERT_FALSE(test, info->is_hdmi);
918918

919-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
920-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
921-
922919
preferred = find_preferred_mode(conn);
923920
KUNIT_ASSERT_NOT_NULL(test, preferred);
924921

922+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
923+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
924+
925925
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
926926
KUNIT_ASSERT_EQ(test, ret, 0);
927927

@@ -960,13 +960,13 @@ static void drm_test_check_tmds_char_rate_rgb_8bpc(struct kunit *test)
960960
ARRAY_SIZE(test_edid_hdmi_1080p_rgb_max_200mhz));
961961
KUNIT_ASSERT_GT(test, ret, 0);
962962

963-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
964-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
965-
966963
preferred = find_preferred_mode(conn);
967964
KUNIT_ASSERT_NOT_NULL(test, preferred);
968965
KUNIT_ASSERT_FALSE(test, preferred->flags & DRM_MODE_FLAG_DBLCLK);
969966

967+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
968+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
969+
970970
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
971971
KUNIT_ASSERT_EQ(test, ret, 0);
972972

@@ -1007,13 +1007,13 @@ static void drm_test_check_tmds_char_rate_rgb_10bpc(struct kunit *test)
10071007
ARRAY_SIZE(test_edid_hdmi_1080p_rgb_yuv_dc_max_340mhz));
10081008
KUNIT_ASSERT_GT(test, ret, 0);
10091009

1010-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1011-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1012-
10131010
preferred = find_preferred_mode(conn);
10141011
KUNIT_ASSERT_NOT_NULL(test, preferred);
10151012
KUNIT_ASSERT_FALSE(test, preferred->flags & DRM_MODE_FLAG_DBLCLK);
10161013

1014+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1015+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1016+
10171017
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
10181018
KUNIT_ASSERT_EQ(test, ret, 0);
10191019

@@ -1054,13 +1054,13 @@ static void drm_test_check_tmds_char_rate_rgb_12bpc(struct kunit *test)
10541054
ARRAY_SIZE(test_edid_hdmi_1080p_rgb_yuv_dc_max_340mhz));
10551055
KUNIT_ASSERT_GT(test, ret, 0);
10561056

1057-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1058-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1059-
10601057
preferred = find_preferred_mode(conn);
10611058
KUNIT_ASSERT_NOT_NULL(test, preferred);
10621059
KUNIT_ASSERT_FALSE(test, preferred->flags & DRM_MODE_FLAG_DBLCLK);
10631060

1061+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1062+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1063+
10641064
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
10651065
KUNIT_ASSERT_EQ(test, ret, 0);
10661066

@@ -1101,12 +1101,12 @@ static void drm_test_check_hdmi_funcs_reject_rate(struct kunit *test)
11011101
crtc = priv->crtc;
11021102
conn = &priv->connector;
11031103

1104-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1105-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1106-
11071104
preferred = find_preferred_mode(conn);
11081105
KUNIT_ASSERT_NOT_NULL(test, preferred);
11091106

1107+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1108+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1109+
11101110
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
11111111
KUNIT_ASSERT_EQ(test, ret, 0);
11121112

@@ -1166,9 +1166,6 @@ static void drm_test_check_max_tmds_rate_bpc_fallback(struct kunit *test)
11661166
KUNIT_ASSERT_TRUE(test, info->is_hdmi);
11671167
KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0);
11681168

1169-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1170-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1171-
11721169
preferred = find_preferred_mode(conn);
11731170
KUNIT_ASSERT_NOT_NULL(test, preferred);
11741171
KUNIT_ASSERT_FALSE(test, preferred->flags & DRM_MODE_FLAG_DBLCLK);
@@ -1179,6 +1176,9 @@ static void drm_test_check_max_tmds_rate_bpc_fallback(struct kunit *test)
11791176
rate = drm_hdmi_compute_mode_clock(preferred, 10, HDMI_COLORSPACE_RGB);
11801177
KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000);
11811178

1179+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1180+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1181+
11821182
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
11831183
KUNIT_EXPECT_EQ(test, ret, 0);
11841184

@@ -1235,9 +1235,6 @@ static void drm_test_check_max_tmds_rate_format_fallback(struct kunit *test)
12351235
KUNIT_ASSERT_TRUE(test, info->is_hdmi);
12361236
KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0);
12371237

1238-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1239-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1240-
12411238
preferred = find_preferred_mode(conn);
12421239
KUNIT_ASSERT_NOT_NULL(test, preferred);
12431240
KUNIT_ASSERT_FALSE(test, preferred->flags & DRM_MODE_FLAG_DBLCLK);
@@ -1251,6 +1248,9 @@ static void drm_test_check_max_tmds_rate_format_fallback(struct kunit *test)
12511248
rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_YUV422);
12521249
KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000);
12531250

1251+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1252+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1253+
12541254
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
12551255
KUNIT_EXPECT_EQ(test, ret, 0);
12561256

@@ -1297,9 +1297,6 @@ static void drm_test_check_output_bpc_format_vic_1(struct kunit *test)
12971297
KUNIT_ASSERT_TRUE(test, info->is_hdmi);
12981298
KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0);
12991299

1300-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1301-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1302-
13031300
mode = drm_kunit_display_mode_from_cea_vic(test, drm, 1);
13041301
KUNIT_ASSERT_NOT_NULL(test, mode);
13051302

@@ -1313,6 +1310,9 @@ static void drm_test_check_output_bpc_format_vic_1(struct kunit *test)
13131310
rate = mode->clock * 1500;
13141311
KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000);
13151312

1313+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1314+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1315+
13161316
crtc = priv->crtc;
13171317
ret = light_up_connector(test, drm, crtc, conn, mode, ctx);
13181318
KUNIT_EXPECT_EQ(test, ret, 0);
@@ -1358,9 +1358,6 @@ static void drm_test_check_output_bpc_format_driver_rgb_only(struct kunit *test)
13581358
KUNIT_ASSERT_TRUE(test, info->is_hdmi);
13591359
KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0);
13601360

1361-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1362-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1363-
13641361
preferred = find_preferred_mode(conn);
13651362
KUNIT_ASSERT_NOT_NULL(test, preferred);
13661363

@@ -1379,6 +1376,9 @@ static void drm_test_check_output_bpc_format_driver_rgb_only(struct kunit *test)
13791376
rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_YUV422);
13801377
KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000);
13811378

1379+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1380+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1381+
13821382
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
13831383
KUNIT_EXPECT_EQ(test, ret, 0);
13841384

@@ -1425,9 +1425,6 @@ static void drm_test_check_output_bpc_format_display_rgb_only(struct kunit *test
14251425
KUNIT_ASSERT_TRUE(test, info->is_hdmi);
14261426
KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0);
14271427

1428-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1429-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1430-
14311428
preferred = find_preferred_mode(conn);
14321429
KUNIT_ASSERT_NOT_NULL(test, preferred);
14331430

@@ -1446,6 +1443,9 @@ static void drm_test_check_output_bpc_format_display_rgb_only(struct kunit *test
14461443
rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_YUV422);
14471444
KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000);
14481445

1446+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1447+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1448+
14491449
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
14501450
KUNIT_EXPECT_EQ(test, ret, 0);
14511451

@@ -1491,9 +1491,6 @@ static void drm_test_check_output_bpc_format_driver_8bpc_only(struct kunit *test
14911491
KUNIT_ASSERT_TRUE(test, info->is_hdmi);
14921492
KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0);
14931493

1494-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1495-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1496-
14971494
preferred = find_preferred_mode(conn);
14981495
KUNIT_ASSERT_NOT_NULL(test, preferred);
14991496

@@ -1504,6 +1501,9 @@ static void drm_test_check_output_bpc_format_driver_8bpc_only(struct kunit *test
15041501
rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_RGB);
15051502
KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000);
15061503

1504+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1505+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1506+
15071507
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
15081508
KUNIT_EXPECT_EQ(test, ret, 0);
15091509

@@ -1551,9 +1551,6 @@ static void drm_test_check_output_bpc_format_display_8bpc_only(struct kunit *tes
15511551
KUNIT_ASSERT_TRUE(test, info->is_hdmi);
15521552
KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0);
15531553

1554-
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1555-
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1556-
15571554
preferred = find_preferred_mode(conn);
15581555
KUNIT_ASSERT_NOT_NULL(test, preferred);
15591556

@@ -1564,6 +1561,9 @@ static void drm_test_check_output_bpc_format_display_8bpc_only(struct kunit *tes
15641561
rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_RGB);
15651562
KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000);
15661563

1564+
ctx = drm_kunit_helper_acquire_ctx_alloc(test);
1565+
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
1566+
15671567
ret = light_up_connector(test, drm, crtc, conn, preferred, ctx);
15681568
KUNIT_EXPECT_EQ(test, ret, 0);
15691569

0 commit comments

Comments
 (0)