Message ID | 20250318-drm-vc4-kunit-failures-v1-1-779864d9ab37@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/vc4: tests: Fix locking failures | expand |
Hi Maxime, On 18/03/25 11:17, Maxime Ripard wrote: > The vc4_mock_atomic_add_output() and vc4_mock_atomic_del_output() assert > that the functions they are calling didn't fail. Since some of them can > return EDEADLK, we can't properly deal with it. > > Since both functions are expected to return an int, and all caller check > the return value, let's just properly propagate the errors when they > occur. > > Fixes: f759f5b53f1c ("drm/vc4: tests: Introduce a mocking infrastructure") > Fixes: 76ec18dc5afa ("drm/vc4: tests: Add unit test suite for the PV muxing") > Signed-off-by: Maxime Ripard <mripard@kernel.org> Reviewed-by: Maíra Canal <mcanal@igalia.com> Best Regards, - Maíra > --- > drivers/gpu/drm/vc4/tests/vc4_mock_output.c | 36 +++++++++++++++++++---------- > 1 file changed, 24 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/vc4/tests/vc4_mock_output.c b/drivers/gpu/drm/vc4/tests/vc4_mock_output.c > index e70d7c3076acf168782c48301f3b3dfb9be21f22..f0ddc223c1f839e8a14f37fdcbb72e7b2c836aa1 100644 > --- a/drivers/gpu/drm/vc4/tests/vc4_mock_output.c > +++ b/drivers/gpu/drm/vc4/tests/vc4_mock_output.c > @@ -73,28 +73,34 @@ int vc4_mock_atomic_add_output(struct kunit *test, > struct drm_encoder *encoder; > struct drm_crtc *crtc; > int ret; > > encoder = vc4_find_encoder_by_type(drm, type); > - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, encoder); > + if (!encoder) > + return -ENODEV; > > crtc = vc4_find_crtc_for_encoder(test, drm, encoder); > - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, crtc); > + if (!crtc) > + return -ENODEV; > > output = encoder_to_vc4_dummy_output(encoder); > conn = &output->connector; > conn_state = drm_atomic_get_connector_state(state, conn); > - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state); > + if (IS_ERR(conn_state)) > + return PTR_ERR(conn_state); > > ret = drm_atomic_set_crtc_for_connector(conn_state, crtc); > - KUNIT_EXPECT_EQ(test, ret, 0); > + if (ret) > + return ret; > > crtc_state = drm_atomic_get_crtc_state(state, crtc); > - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, crtc_state); > + if (IS_ERR(crtc_state)) > + return PTR_ERR(crtc_state); > > ret = drm_atomic_set_mode_for_crtc(crtc_state, &default_mode); > - KUNIT_EXPECT_EQ(test, ret, 0); > + if (ret) > + return ret; > > crtc_state->active = true; > > return 0; > } > @@ -111,28 +117,34 @@ int vc4_mock_atomic_del_output(struct kunit *test, > struct drm_encoder *encoder; > struct drm_crtc *crtc; > int ret; > > encoder = vc4_find_encoder_by_type(drm, type); > - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, encoder); > + if (!encoder) > + return -ENODEV; > > crtc = vc4_find_crtc_for_encoder(test, drm, encoder); > - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, crtc); > + if (!crtc) > + return -ENODEV; > > crtc_state = drm_atomic_get_crtc_state(state, crtc); > - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, crtc_state); > + if (IS_ERR(crtc_state)) > + return PTR_ERR(crtc_state); > > crtc_state->active = false; > > ret = drm_atomic_set_mode_for_crtc(crtc_state, NULL); > - KUNIT_ASSERT_EQ(test, ret, 0); > + if (ret) > + return ret; > > output = encoder_to_vc4_dummy_output(encoder); > conn = &output->connector; > conn_state = drm_atomic_get_connector_state(state, conn); > - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state); > + if (IS_ERR(conn_state)) > + return PTR_ERR(conn_state); > > ret = drm_atomic_set_crtc_for_connector(conn_state, NULL); > - KUNIT_ASSERT_EQ(test, ret, 0); > + if (ret) > + return ret; > > return 0; > } >
diff --git a/drivers/gpu/drm/vc4/tests/vc4_mock_output.c b/drivers/gpu/drm/vc4/tests/vc4_mock_output.c index e70d7c3076acf168782c48301f3b3dfb9be21f22..f0ddc223c1f839e8a14f37fdcbb72e7b2c836aa1 100644 --- a/drivers/gpu/drm/vc4/tests/vc4_mock_output.c +++ b/drivers/gpu/drm/vc4/tests/vc4_mock_output.c @@ -73,28 +73,34 @@ int vc4_mock_atomic_add_output(struct kunit *test, struct drm_encoder *encoder; struct drm_crtc *crtc; int ret; encoder = vc4_find_encoder_by_type(drm, type); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, encoder); + if (!encoder) + return -ENODEV; crtc = vc4_find_crtc_for_encoder(test, drm, encoder); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, crtc); + if (!crtc) + return -ENODEV; output = encoder_to_vc4_dummy_output(encoder); conn = &output->connector; conn_state = drm_atomic_get_connector_state(state, conn); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state); + if (IS_ERR(conn_state)) + return PTR_ERR(conn_state); ret = drm_atomic_set_crtc_for_connector(conn_state, crtc); - KUNIT_EXPECT_EQ(test, ret, 0); + if (ret) + return ret; crtc_state = drm_atomic_get_crtc_state(state, crtc); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, crtc_state); + if (IS_ERR(crtc_state)) + return PTR_ERR(crtc_state); ret = drm_atomic_set_mode_for_crtc(crtc_state, &default_mode); - KUNIT_EXPECT_EQ(test, ret, 0); + if (ret) + return ret; crtc_state->active = true; return 0; } @@ -111,28 +117,34 @@ int vc4_mock_atomic_del_output(struct kunit *test, struct drm_encoder *encoder; struct drm_crtc *crtc; int ret; encoder = vc4_find_encoder_by_type(drm, type); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, encoder); + if (!encoder) + return -ENODEV; crtc = vc4_find_crtc_for_encoder(test, drm, encoder); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, crtc); + if (!crtc) + return -ENODEV; crtc_state = drm_atomic_get_crtc_state(state, crtc); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, crtc_state); + if (IS_ERR(crtc_state)) + return PTR_ERR(crtc_state); crtc_state->active = false; ret = drm_atomic_set_mode_for_crtc(crtc_state, NULL); - KUNIT_ASSERT_EQ(test, ret, 0); + if (ret) + return ret; output = encoder_to_vc4_dummy_output(encoder); conn = &output->connector; conn_state = drm_atomic_get_connector_state(state, conn); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, conn_state); + if (IS_ERR(conn_state)) + return PTR_ERR(conn_state); ret = drm_atomic_set_crtc_for_connector(conn_state, NULL); - KUNIT_ASSERT_EQ(test, ret, 0); + if (ret) + return ret; return 0; }
The vc4_mock_atomic_add_output() and vc4_mock_atomic_del_output() assert that the functions they are calling didn't fail. Since some of them can return EDEADLK, we can't properly deal with it. Since both functions are expected to return an int, and all caller check the return value, let's just properly propagate the errors when they occur. Fixes: f759f5b53f1c ("drm/vc4: tests: Introduce a mocking infrastructure") Fixes: 76ec18dc5afa ("drm/vc4: tests: Add unit test suite for the PV muxing") Signed-off-by: Maxime Ripard <mripard@kernel.org> --- drivers/gpu/drm/vc4/tests/vc4_mock_output.c | 36 +++++++++++++++++++---------- 1 file changed, 24 insertions(+), 12 deletions(-)