Skip to content

Commit fe27e70

Browse files
committed
drm/tests: hdmi: Handle drm_kunit_helper_enable_crtc_connector() returning EDEADLK
Fedora/CentOS/RHEL CI is reporting intermittent failures while running the KUnit tests present in drm_hdmi_state_helper_test.c [1]. While the specific test causing the failure change between runs, all of them are caused by drm_kunit_helper_enable_crtc_connector() returning -EDEADLK. The error trace always follow this structure: # <test name>: ASSERTION FAILED at # drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c:<line> Expected ret == 0, but ret == -35 (0xffffffffffffffdd) As documented, if the drm_kunit_helper_enable_crtc_connector() function returns -EDEADLK (-35), the entire atomic sequence must be restarted. Handle this error code for all function calls. Closes: https://datawarehouse.cki-project.org/issue/4039 [1] Fixes: 6a5c0ad ("drm/tests: hdmi_state_helpers: Switch to new helper") Reviewed-by: Maxime Ripard <mripard@kernel.org> Signed-off-by: José Expósito <jose.exposito89@gmail.com> Link: https://patch.msgid.link/20251104102258.10026-1-jose.exposito89@gmail.com
1 parent 6cb31fb commit fe27e70

1 file changed

Lines changed: 143 additions & 0 deletions

File tree

drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,10 +257,16 @@ static void drm_test_check_broadcast_rgb_crtc_mode_changed(struct kunit *test)
257257

258258
drm_modeset_acquire_init(&ctx, 0);
259259

260+
retry_conn_enable:
260261
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
261262
crtc, conn,
262263
preferred,
263264
&ctx);
265+
if (ret == -EDEADLK) {
266+
ret = drm_modeset_backoff(&ctx);
267+
if (!ret)
268+
goto retry_conn_enable;
269+
}
264270
KUNIT_ASSERT_EQ(test, ret, 0);
265271

266272
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
@@ -326,10 +332,16 @@ static void drm_test_check_broadcast_rgb_crtc_mode_not_changed(struct kunit *tes
326332

327333
drm_modeset_acquire_init(&ctx, 0);
328334

335+
retry_conn_enable:
329336
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
330337
crtc, conn,
331338
preferred,
332339
&ctx);
340+
if (ret == -EDEADLK) {
341+
ret = drm_modeset_backoff(&ctx);
342+
if (!ret)
343+
goto retry_conn_enable;
344+
}
333345
KUNIT_ASSERT_EQ(test, ret, 0);
334346

335347
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
@@ -397,10 +409,16 @@ static void drm_test_check_broadcast_rgb_auto_cea_mode(struct kunit *test)
397409

398410
drm_modeset_acquire_init(&ctx, 0);
399411

412+
retry_conn_enable:
400413
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
401414
crtc, conn,
402415
preferred,
403416
&ctx);
417+
if (ret == -EDEADLK) {
418+
ret = drm_modeset_backoff(&ctx);
419+
if (!ret)
420+
goto retry_conn_enable;
421+
}
404422
KUNIT_ASSERT_EQ(test, ret, 0);
405423

406424
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
@@ -457,10 +475,17 @@ static void drm_test_check_broadcast_rgb_auto_cea_mode_vic_1(struct kunit *test)
457475
KUNIT_ASSERT_NOT_NULL(test, mode);
458476

459477
crtc = priv->crtc;
478+
479+
retry_conn_enable:
460480
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
461481
crtc, conn,
462482
mode,
463483
&ctx);
484+
if (ret == -EDEADLK) {
485+
ret = drm_modeset_backoff(&ctx);
486+
if (!ret)
487+
goto retry_conn_enable;
488+
}
464489
KUNIT_ASSERT_EQ(test, ret, 0);
465490

466491
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
@@ -518,10 +543,16 @@ static void drm_test_check_broadcast_rgb_full_cea_mode(struct kunit *test)
518543

519544
drm_modeset_acquire_init(&ctx, 0);
520545

546+
retry_conn_enable:
521547
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
522548
crtc, conn,
523549
preferred,
524550
&ctx);
551+
if (ret == -EDEADLK) {
552+
ret = drm_modeset_backoff(&ctx);
553+
if (!ret)
554+
goto retry_conn_enable;
555+
}
525556
KUNIT_ASSERT_EQ(test, ret, 0);
526557

527558
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
@@ -580,10 +611,17 @@ static void drm_test_check_broadcast_rgb_full_cea_mode_vic_1(struct kunit *test)
580611
KUNIT_ASSERT_NOT_NULL(test, mode);
581612

582613
crtc = priv->crtc;
614+
615+
retry_conn_enable:
583616
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
584617
crtc, conn,
585618
mode,
586619
&ctx);
620+
if (ret == -EDEADLK) {
621+
ret = drm_modeset_backoff(&ctx);
622+
if (!ret)
623+
goto retry_conn_enable;
624+
}
587625
KUNIT_ASSERT_EQ(test, ret, 0);
588626

589627
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
@@ -643,10 +681,16 @@ static void drm_test_check_broadcast_rgb_limited_cea_mode(struct kunit *test)
643681

644682
drm_modeset_acquire_init(&ctx, 0);
645683

684+
retry_conn_enable:
646685
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
647686
crtc, conn,
648687
preferred,
649688
&ctx);
689+
if (ret == -EDEADLK) {
690+
ret = drm_modeset_backoff(&ctx);
691+
if (!ret)
692+
goto retry_conn_enable;
693+
}
650694
KUNIT_ASSERT_EQ(test, ret, 0);
651695

652696
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
@@ -705,10 +749,17 @@ static void drm_test_check_broadcast_rgb_limited_cea_mode_vic_1(struct kunit *te
705749
KUNIT_ASSERT_NOT_NULL(test, mode);
706750

707751
crtc = priv->crtc;
752+
753+
retry_conn_enable:
708754
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
709755
crtc, conn,
710756
mode,
711757
&ctx);
758+
if (ret == -EDEADLK) {
759+
ret = drm_modeset_backoff(&ctx);
760+
if (!ret)
761+
goto retry_conn_enable;
762+
}
712763
KUNIT_ASSERT_EQ(test, ret, 0);
713764

714765
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
@@ -870,10 +921,16 @@ static void drm_test_check_output_bpc_crtc_mode_changed(struct kunit *test)
870921

871922
drm_modeset_acquire_init(&ctx, 0);
872923

924+
retry_conn_enable:
873925
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
874926
crtc, conn,
875927
preferred,
876928
&ctx);
929+
if (ret == -EDEADLK) {
930+
ret = drm_modeset_backoff(&ctx);
931+
if (!ret)
932+
goto retry_conn_enable;
933+
}
877934
KUNIT_ASSERT_EQ(test, ret, 0);
878935

879936
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
@@ -946,10 +1003,16 @@ static void drm_test_check_output_bpc_crtc_mode_not_changed(struct kunit *test)
9461003

9471004
drm_modeset_acquire_init(&ctx, 0);
9481005

1006+
retry_conn_enable:
9491007
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
9501008
crtc, conn,
9511009
preferred,
9521010
&ctx);
1011+
if (ret == -EDEADLK) {
1012+
ret = drm_modeset_backoff(&ctx);
1013+
if (!ret)
1014+
goto retry_conn_enable;
1015+
}
9531016
KUNIT_ASSERT_EQ(test, ret, 0);
9541017

9551018
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);
@@ -1022,10 +1085,16 @@ static void drm_test_check_output_bpc_dvi(struct kunit *test)
10221085

10231086
drm_modeset_acquire_init(&ctx, 0);
10241087

1088+
retry_conn_enable:
10251089
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
10261090
crtc, conn,
10271091
preferred,
10281092
&ctx);
1093+
if (ret == -EDEADLK) {
1094+
ret = drm_modeset_backoff(&ctx);
1095+
if (!ret)
1096+
goto retry_conn_enable;
1097+
}
10291098
KUNIT_ASSERT_EQ(test, ret, 0);
10301099

10311100
conn_state = conn->state;
@@ -1069,10 +1138,16 @@ static void drm_test_check_tmds_char_rate_rgb_8bpc(struct kunit *test)
10691138

10701139
drm_modeset_acquire_init(&ctx, 0);
10711140

1141+
retry_conn_enable:
10721142
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
10731143
crtc, conn,
10741144
preferred,
10751145
&ctx);
1146+
if (ret == -EDEADLK) {
1147+
ret = drm_modeset_backoff(&ctx);
1148+
if (!ret)
1149+
goto retry_conn_enable;
1150+
}
10761151
KUNIT_ASSERT_EQ(test, ret, 0);
10771152

10781153
conn_state = conn->state;
@@ -1118,10 +1193,16 @@ static void drm_test_check_tmds_char_rate_rgb_10bpc(struct kunit *test)
11181193

11191194
drm_modeset_acquire_init(&ctx, 0);
11201195

1196+
retry_conn_enable:
11211197
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
11221198
crtc, conn,
11231199
preferred,
11241200
&ctx);
1201+
if (ret == -EDEADLK) {
1202+
ret = drm_modeset_backoff(&ctx);
1203+
if (!ret)
1204+
goto retry_conn_enable;
1205+
}
11251206
KUNIT_ASSERT_EQ(test, ret, 0);
11261207

11271208
conn_state = conn->state;
@@ -1167,10 +1248,16 @@ static void drm_test_check_tmds_char_rate_rgb_12bpc(struct kunit *test)
11671248

11681249
drm_modeset_acquire_init(&ctx, 0);
11691250

1251+
retry_conn_enable:
11701252
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
11711253
crtc, conn,
11721254
preferred,
11731255
&ctx);
1256+
if (ret == -EDEADLK) {
1257+
ret = drm_modeset_backoff(&ctx);
1258+
if (!ret)
1259+
goto retry_conn_enable;
1260+
}
11741261
KUNIT_ASSERT_EQ(test, ret, 0);
11751262

11761263
conn_state = conn->state;
@@ -1218,10 +1305,16 @@ static void drm_test_check_hdmi_funcs_reject_rate(struct kunit *test)
12181305

12191306
drm_modeset_acquire_init(&ctx, 0);
12201307

1308+
retry_conn_enable:
12211309
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
12221310
crtc, conn,
12231311
preferred,
12241312
&ctx);
1313+
if (ret == -EDEADLK) {
1314+
ret = drm_modeset_backoff(&ctx);
1315+
if (!ret)
1316+
goto retry_conn_enable;
1317+
}
12251318
KUNIT_ASSERT_EQ(test, ret, 0);
12261319

12271320
/* You shouldn't be doing that at home. */
@@ -1292,10 +1385,16 @@ static void drm_test_check_max_tmds_rate_bpc_fallback_rgb(struct kunit *test)
12921385

12931386
drm_modeset_acquire_init(&ctx, 0);
12941387

1388+
retry_conn_enable:
12951389
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
12961390
crtc, conn,
12971391
preferred,
12981392
&ctx);
1393+
if (ret == -EDEADLK) {
1394+
ret = drm_modeset_backoff(&ctx);
1395+
if (!ret)
1396+
goto retry_conn_enable;
1397+
}
12991398
KUNIT_EXPECT_EQ(test, ret, 0);
13001399

13011400
conn_state = conn->state;
@@ -1440,10 +1539,16 @@ static void drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422(struct kunit
14401539

14411540
drm_modeset_acquire_init(&ctx, 0);
14421541

1542+
retry_conn_enable:
14431543
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
14441544
crtc, conn,
14451545
preferred,
14461546
&ctx);
1547+
if (ret == -EDEADLK) {
1548+
ret = drm_modeset_backoff(&ctx);
1549+
if (!ret)
1550+
goto retry_conn_enable;
1551+
}
14471552
KUNIT_EXPECT_EQ(test, ret, 0);
14481553

14491554
conn_state = conn->state;
@@ -1669,10 +1774,17 @@ static void drm_test_check_output_bpc_format_vic_1(struct kunit *test)
16691774
drm_modeset_acquire_init(&ctx, 0);
16701775

16711776
crtc = priv->crtc;
1777+
1778+
retry_conn_enable:
16721779
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
16731780
crtc, conn,
16741781
mode,
16751782
&ctx);
1783+
if (ret == -EDEADLK) {
1784+
ret = drm_modeset_backoff(&ctx);
1785+
if (!ret)
1786+
goto retry_conn_enable;
1787+
}
16761788
KUNIT_EXPECT_EQ(test, ret, 0);
16771789

16781790
conn_state = conn->state;
@@ -1736,10 +1848,16 @@ static void drm_test_check_output_bpc_format_driver_rgb_only(struct kunit *test)
17361848

17371849
drm_modeset_acquire_init(&ctx, 0);
17381850

1851+
retry_conn_enable:
17391852
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
17401853
crtc, conn,
17411854
preferred,
17421855
&ctx);
1856+
if (ret == -EDEADLK) {
1857+
ret = drm_modeset_backoff(&ctx);
1858+
if (!ret)
1859+
goto retry_conn_enable;
1860+
}
17431861
KUNIT_EXPECT_EQ(test, ret, 0);
17441862

17451863
conn_state = conn->state;
@@ -1805,10 +1923,16 @@ static void drm_test_check_output_bpc_format_display_rgb_only(struct kunit *test
18051923

18061924
drm_modeset_acquire_init(&ctx, 0);
18071925

1926+
retry_conn_enable:
18081927
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
18091928
crtc, conn,
18101929
preferred,
18111930
&ctx);
1931+
if (ret == -EDEADLK) {
1932+
ret = drm_modeset_backoff(&ctx);
1933+
if (!ret)
1934+
goto retry_conn_enable;
1935+
}
18121936
KUNIT_EXPECT_EQ(test, ret, 0);
18131937

18141938
conn_state = conn->state;
@@ -1865,10 +1989,16 @@ static void drm_test_check_output_bpc_format_driver_8bpc_only(struct kunit *test
18651989

18661990
drm_modeset_acquire_init(&ctx, 0);
18671991

1992+
retry_conn_enable:
18681993
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
18691994
crtc, conn,
18701995
preferred,
18711996
&ctx);
1997+
if (ret == -EDEADLK) {
1998+
ret = drm_modeset_backoff(&ctx);
1999+
if (!ret)
2000+
goto retry_conn_enable;
2001+
}
18722002
KUNIT_EXPECT_EQ(test, ret, 0);
18732003

18742004
conn_state = conn->state;
@@ -1927,10 +2057,16 @@ static void drm_test_check_output_bpc_format_display_8bpc_only(struct kunit *tes
19272057

19282058
drm_modeset_acquire_init(&ctx, 0);
19292059

2060+
retry_conn_enable:
19302061
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
19312062
crtc, conn,
19322063
preferred,
19332064
&ctx);
2065+
if (ret == -EDEADLK) {
2066+
ret = drm_modeset_backoff(&ctx);
2067+
if (!ret)
2068+
goto retry_conn_enable;
2069+
}
19342070
KUNIT_EXPECT_EQ(test, ret, 0);
19352071

19362072
conn_state = conn->state;
@@ -1970,10 +2106,17 @@ static void drm_test_check_disable_connector(struct kunit *test)
19702106

19712107
drm = &priv->drm;
19722108
crtc = priv->crtc;
2109+
2110+
retry_conn_enable:
19732111
ret = drm_kunit_helper_enable_crtc_connector(test, drm,
19742112
crtc, conn,
19752113
preferred,
19762114
&ctx);
2115+
if (ret == -EDEADLK) {
2116+
ret = drm_modeset_backoff(&ctx);
2117+
if (!ret)
2118+
goto retry_conn_enable;
2119+
}
19772120
KUNIT_ASSERT_EQ(test, ret, 0);
19782121

19792122
state = drm_kunit_helper_atomic_state_alloc(test, drm, &ctx);

0 commit comments

Comments
 (0)