]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/tests: hdmi: Fix WW_MUTEX_SLOWPATH failures
authorMaxime Ripard <mripard@kernel.org>
Wed, 29 Jan 2025 14:21:53 +0000 (15:21 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Feb 2025 13:01:19 +0000 (14:01 +0100)
[ Upstream commit fb97bc2e47f694f79d6358d981ae0428db8e8088 ]

The light_up_connector helper function in the HDMI infrastructure unit
tests uses drm_atomic_set_crtc_for_connector(), but fails when it
returns an error.

This function can return EDEADLK though if the sequence needs to be
restarted, and WW_MUTEX_SLOWPATH is meant to test that we handle it
properly.

Let's handle EDEADLK and restart the sequence in our tests as well.

Fixes: eb66d34d793e ("drm/tests: Add output bpc tests")
Reported-by: Dave Airlie <airlied@gmail.com>
Closes: https://lore.kernel.org/r/CAPM=9tzJ4-ERDxvuwrCyUPY0=+P44orhp1kLWVGL7MCfpQjMEQ@mail.gmail.com/
Link: https://lore.kernel.org/r/20241031091558.2435850-1-mripard@kernel.org
Reviewed-by: Simona Vetter <simona.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20250129-test-kunit-v2-1-fe59c43805d5@kernel.org
Signed-off-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c

index 4ba869e0e794c7c27a62c880bb6a57b48d34e042..cbd9584af32995b8e4c466933193c244c212bd84 100644 (file)
@@ -70,10 +70,17 @@ static int light_up_connector(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, connector);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state);
 
        ret = drm_atomic_set_crtc_for_connector(conn_state, crtc);
+       if (ret == -EDEADLK) {
+               drm_atomic_state_clear(state);
+               ret = drm_modeset_backoff(ctx);
+               if (!ret)
+                       goto retry;
+       }
        KUNIT_EXPECT_EQ(test, ret, 0);
 
        crtc_state = drm_atomic_get_crtc_state(state, crtc);