Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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 <simona.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20250129-test-kunit-v2-4-fe59c43805d5@kernel.org
Signed-off-by: Maxime Ripard <mripard@kernel.org>

+57 -57
+57 -57
drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c
··· 293 293 crtc = priv->crtc; 294 294 conn = &priv->connector; 295 295 296 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 297 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 298 - 299 296 preferred = find_preferred_mode(conn); 300 297 KUNIT_ASSERT_NOT_NULL(test, preferred); 298 + 299 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 300 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 301 301 302 302 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 303 303 KUNIT_ASSERT_EQ(test, ret, 0); ··· 357 357 crtc = priv->crtc; 358 358 conn = &priv->connector; 359 359 360 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 361 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 362 - 363 360 preferred = find_preferred_mode(conn); 364 361 KUNIT_ASSERT_NOT_NULL(test, preferred); 362 + 363 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 364 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 365 365 366 366 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 367 367 KUNIT_ASSERT_EQ(test, ret, 0); ··· 422 422 conn = &priv->connector; 423 423 KUNIT_ASSERT_TRUE(test, conn->display_info.is_hdmi); 424 424 425 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 426 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 427 - 428 425 preferred = find_preferred_mode(conn); 429 426 KUNIT_ASSERT_NOT_NULL(test, preferred); 430 427 KUNIT_ASSERT_NE(test, drm_match_cea_mode(preferred), 1); 428 + 429 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 430 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 431 431 432 432 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 433 433 KUNIT_ASSERT_EQ(test, ret, 0); ··· 533 533 conn = &priv->connector; 534 534 KUNIT_ASSERT_TRUE(test, conn->display_info.is_hdmi); 535 535 536 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 537 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 538 - 539 536 preferred = find_preferred_mode(conn); 540 537 KUNIT_ASSERT_NOT_NULL(test, preferred); 541 538 KUNIT_ASSERT_NE(test, drm_match_cea_mode(preferred), 1); 539 + 540 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 541 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 542 542 543 543 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 544 544 KUNIT_ASSERT_EQ(test, ret, 0); ··· 648 648 conn = &priv->connector; 649 649 KUNIT_ASSERT_TRUE(test, conn->display_info.is_hdmi); 650 650 651 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 652 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 653 - 654 651 preferred = find_preferred_mode(conn); 655 652 KUNIT_ASSERT_NOT_NULL(test, preferred); 656 653 KUNIT_ASSERT_NE(test, drm_match_cea_mode(preferred), 1); 654 + 655 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 656 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 657 657 658 658 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 659 659 KUNIT_ASSERT_EQ(test, ret, 0); ··· 768 768 ARRAY_SIZE(test_edid_hdmi_1080p_rgb_yuv_dc_max_200mhz)); 769 769 KUNIT_ASSERT_GT(test, ret, 0); 770 770 771 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 772 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 773 - 774 771 preferred = find_preferred_mode(conn); 775 772 KUNIT_ASSERT_NOT_NULL(test, preferred); 773 + 774 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 775 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 776 776 777 777 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 778 778 KUNIT_ASSERT_EQ(test, ret, 0); ··· 842 842 ARRAY_SIZE(test_edid_hdmi_1080p_rgb_yuv_dc_max_200mhz)); 843 843 KUNIT_ASSERT_GT(test, ret, 0); 844 844 845 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 846 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 847 - 848 845 preferred = find_preferred_mode(conn); 849 846 KUNIT_ASSERT_NOT_NULL(test, preferred); 847 + 848 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 849 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 850 850 851 851 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 852 852 KUNIT_ASSERT_EQ(test, ret, 0); ··· 916 916 info = &conn->display_info; 917 917 KUNIT_ASSERT_FALSE(test, info->is_hdmi); 918 918 919 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 920 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 921 - 922 919 preferred = find_preferred_mode(conn); 923 920 KUNIT_ASSERT_NOT_NULL(test, preferred); 921 + 922 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 923 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 924 924 925 925 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 926 926 KUNIT_ASSERT_EQ(test, ret, 0); ··· 960 960 ARRAY_SIZE(test_edid_hdmi_1080p_rgb_max_200mhz)); 961 961 KUNIT_ASSERT_GT(test, ret, 0); 962 962 963 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 964 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 965 - 966 963 preferred = find_preferred_mode(conn); 967 964 KUNIT_ASSERT_NOT_NULL(test, preferred); 968 965 KUNIT_ASSERT_FALSE(test, preferred->flags & DRM_MODE_FLAG_DBLCLK); 966 + 967 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 968 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 969 969 970 970 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 971 971 KUNIT_ASSERT_EQ(test, ret, 0); ··· 1007 1007 ARRAY_SIZE(test_edid_hdmi_1080p_rgb_yuv_dc_max_340mhz)); 1008 1008 KUNIT_ASSERT_GT(test, ret, 0); 1009 1009 1010 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1011 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1012 - 1013 1010 preferred = find_preferred_mode(conn); 1014 1011 KUNIT_ASSERT_NOT_NULL(test, preferred); 1015 1012 KUNIT_ASSERT_FALSE(test, preferred->flags & DRM_MODE_FLAG_DBLCLK); 1013 + 1014 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1015 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1016 1016 1017 1017 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 1018 1018 KUNIT_ASSERT_EQ(test, ret, 0); ··· 1054 1054 ARRAY_SIZE(test_edid_hdmi_1080p_rgb_yuv_dc_max_340mhz)); 1055 1055 KUNIT_ASSERT_GT(test, ret, 0); 1056 1056 1057 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1058 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1059 - 1060 1057 preferred = find_preferred_mode(conn); 1061 1058 KUNIT_ASSERT_NOT_NULL(test, preferred); 1062 1059 KUNIT_ASSERT_FALSE(test, preferred->flags & DRM_MODE_FLAG_DBLCLK); 1060 + 1061 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1062 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1063 1063 1064 1064 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 1065 1065 KUNIT_ASSERT_EQ(test, ret, 0); ··· 1101 1101 crtc = priv->crtc; 1102 1102 conn = &priv->connector; 1103 1103 1104 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1105 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1106 - 1107 1104 preferred = find_preferred_mode(conn); 1108 1105 KUNIT_ASSERT_NOT_NULL(test, preferred); 1106 + 1107 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1108 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1109 1109 1110 1110 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 1111 1111 KUNIT_ASSERT_EQ(test, ret, 0); ··· 1166 1166 KUNIT_ASSERT_TRUE(test, info->is_hdmi); 1167 1167 KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0); 1168 1168 1169 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1170 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1171 - 1172 1169 preferred = find_preferred_mode(conn); 1173 1170 KUNIT_ASSERT_NOT_NULL(test, preferred); 1174 1171 KUNIT_ASSERT_FALSE(test, preferred->flags & DRM_MODE_FLAG_DBLCLK); ··· 1175 1178 1176 1179 rate = drm_hdmi_compute_mode_clock(preferred, 10, HDMI_COLORSPACE_RGB); 1177 1180 KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000); 1181 + 1182 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1183 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1178 1184 1179 1185 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 1180 1186 KUNIT_EXPECT_EQ(test, ret, 0); ··· 1235 1235 KUNIT_ASSERT_TRUE(test, info->is_hdmi); 1236 1236 KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0); 1237 1237 1238 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1239 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1240 - 1241 1238 preferred = find_preferred_mode(conn); 1242 1239 KUNIT_ASSERT_NOT_NULL(test, preferred); 1243 1240 KUNIT_ASSERT_FALSE(test, preferred->flags & DRM_MODE_FLAG_DBLCLK); ··· 1247 1250 1248 1251 rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_YUV422); 1249 1252 KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000); 1253 + 1254 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1255 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1250 1256 1251 1257 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 1252 1258 KUNIT_EXPECT_EQ(test, ret, 0); ··· 1297 1297 KUNIT_ASSERT_TRUE(test, info->is_hdmi); 1298 1298 KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0); 1299 1299 1300 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1301 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1302 - 1303 1300 mode = drm_kunit_display_mode_from_cea_vic(test, drm, 1); 1304 1301 KUNIT_ASSERT_NOT_NULL(test, mode); 1305 1302 ··· 1309 1312 */ 1310 1313 rate = mode->clock * 1500; 1311 1314 KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000); 1315 + 1316 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1317 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1312 1318 1313 1319 crtc = priv->crtc; 1314 1320 ret = light_up_connector(test, drm, crtc, conn, mode, ctx); ··· 1358 1358 KUNIT_ASSERT_TRUE(test, info->is_hdmi); 1359 1359 KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0); 1360 1360 1361 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1362 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1363 - 1364 1361 preferred = find_preferred_mode(conn); 1365 1362 KUNIT_ASSERT_NOT_NULL(test, preferred); 1366 1363 ··· 1375 1378 1376 1379 rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_YUV422); 1377 1380 KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000); 1381 + 1382 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1383 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1378 1384 1379 1385 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 1380 1386 KUNIT_EXPECT_EQ(test, ret, 0); ··· 1425 1425 KUNIT_ASSERT_TRUE(test, info->is_hdmi); 1426 1426 KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0); 1427 1427 1428 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1429 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1430 - 1431 1428 preferred = find_preferred_mode(conn); 1432 1429 KUNIT_ASSERT_NOT_NULL(test, preferred); 1433 1430 ··· 1442 1445 1443 1446 rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_YUV422); 1444 1447 KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000); 1448 + 1449 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1450 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1445 1451 1446 1452 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 1447 1453 KUNIT_EXPECT_EQ(test, ret, 0); ··· 1491 1491 KUNIT_ASSERT_TRUE(test, info->is_hdmi); 1492 1492 KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0); 1493 1493 1494 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1495 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1496 - 1497 1494 preferred = find_preferred_mode(conn); 1498 1495 KUNIT_ASSERT_NOT_NULL(test, preferred); 1499 1496 ··· 1500 1503 */ 1501 1504 rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_RGB); 1502 1505 KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000); 1506 + 1507 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1508 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1503 1509 1504 1510 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 1505 1511 KUNIT_EXPECT_EQ(test, ret, 0); ··· 1551 1551 KUNIT_ASSERT_TRUE(test, info->is_hdmi); 1552 1552 KUNIT_ASSERT_GT(test, info->max_tmds_clock, 0); 1553 1553 1554 - ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1555 - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1556 - 1557 1554 preferred = find_preferred_mode(conn); 1558 1555 KUNIT_ASSERT_NOT_NULL(test, preferred); 1559 1556 ··· 1560 1563 */ 1561 1564 rate = drm_hdmi_compute_mode_clock(preferred, 12, HDMI_COLORSPACE_RGB); 1562 1565 KUNIT_ASSERT_LT(test, rate, info->max_tmds_clock * 1000); 1566 + 1567 + ctx = drm_kunit_helper_acquire_ctx_alloc(test); 1568 + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx); 1563 1569 1564 1570 ret = light_up_connector(test, drm, crtc, conn, preferred, ctx); 1565 1571 KUNIT_EXPECT_EQ(test, ret, 0);