From nobody Wed Dec 17 10:41:20 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5EF9520E018 for ; Tue, 18 Mar 2025 14:17:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742307467; cv=none; b=s2Bl1uVrifGFrJm65NH7xlLksW5cmR2ZU74d03sgy10vMqxWUNtKIBCp6W/xxp9PRM0PX1R5swapcsOga5N+aVgKLCvh3NMpcoNRIHFvUX9RgyJ97jH1y9Y1dfhpAgbGy+sdCizqwnMJR9uFyUe5fxfrUf0Ak2r/e/Z83jsEcRA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742307467; c=relaxed/simple; bh=oLlD/CohJAeZ7/DwzuOA47geT3BKc+DVQr/5GRHd5pY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ne6WIhCBD6gMH6wrhNQ4Ta5NrfRa3sBJJjIkvDF2zjhriOyKZnUDaWXh/hybAnKIHZDHRyRjyGcoilDQYidz26MjSJNGX8txm6GMBq3UmrORb46UsiWnd01cRH8o+4f+GjjvXMSUyboydItx1Dz5wkjcE4y6lzEk9IxzKVxuS44= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=R+mSoWHx; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="R+mSoWHx" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5AFCFC4CEEE; Tue, 18 Mar 2025 14:17:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742307465; bh=oLlD/CohJAeZ7/DwzuOA47geT3BKc+DVQr/5GRHd5pY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=R+mSoWHxO+jVje18cTg9V/eN2SExL8ZuuXAGCO/bt2+3zz65JWyvL/CrC/HyTyw/E 23qMvclArnrRPtM18Nt5eD+DKptVZAg186EsJC7C+bu6N4TyMqoMyhd95ipfpOsmMW q0/7ahbPh1/b47C/8qSTOOAmsXLdE1jhLEPZDZcg5R9o0MQwQNvtV0MOPanaBsKbaW OmpXCHYeK2M4Bia5DtGQ4LsizpVGoaceg6/uPxVp9uQDzDFMHq3pUUZScvbiMluCxR WsO5knW12HpZmGcIEGLwCAGiig7y70ZbyT/OcAOLsAOFWTdA4H5UhrgGubIbBI/vro /17IijKhF0W3g== From: Maxime Ripard Date: Tue, 18 Mar 2025 15:17:37 +0100 Subject: [PATCH 1/4] drm/vc4: tests: Use return instead of assert Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250318-drm-vc4-kunit-failures-v1-1-779864d9ab37@kernel.org> References: <20250318-drm-vc4-kunit-failures-v1-0-779864d9ab37@kernel.org> In-Reply-To: <20250318-drm-vc4-kunit-failures-v1-0-779864d9ab37@kernel.org> To: Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance , Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3316; i=mripard@kernel.org; h=from:subject:message-id; bh=oLlD/CohJAeZ7/DwzuOA47geT3BKc+DVQr/5GRHd5pY=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDOk3G5q2Wq9l8tjd8LeI5/+pH28bPyzyfPtVsyHOXODi6 k/On26ad0xlYRDmZJAVU2R5IhN2enn74ioH+5U/YOawMoEMYeDiFICJPJNnrJVxvpr5a1FHSH1n gunZiXfabHveHfVyk05uEBY4aLlY//0B02f5CzJ96kqPisbX/Z+ZwVhnVneo5M9n3V9WESbHEhm 0BKWmO2+UPvyHO7XHw4H1kbfl3E2XC34eqnnzJSd+hb7Nns0A X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D 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 Reviewed-by: Ma=C3=ADra Canal --- 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..f0ddc223c1f839e8a14f37fdcbb= 72e7b2c836aa1 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; =20 encoder =3D vc4_find_encoder_by_type(drm, type); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, encoder); + if (!encoder) + return -ENODEV; =20 crtc =3D vc4_find_crtc_for_encoder(test, drm, encoder); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, crtc); + if (!crtc) + return -ENODEV; =20 output =3D encoder_to_vc4_dummy_output(encoder); conn =3D &output->connector; conn_state =3D 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); =20 ret =3D drm_atomic_set_crtc_for_connector(conn_state, crtc); - KUNIT_EXPECT_EQ(test, ret, 0); + if (ret) + return ret; =20 crtc_state =3D 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); =20 ret =3D drm_atomic_set_mode_for_crtc(crtc_state, &default_mode); - KUNIT_EXPECT_EQ(test, ret, 0); + if (ret) + return ret; =20 crtc_state->active =3D true; =20 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; =20 encoder =3D vc4_find_encoder_by_type(drm, type); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, encoder); + if (!encoder) + return -ENODEV; =20 crtc =3D vc4_find_crtc_for_encoder(test, drm, encoder); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, crtc); + if (!crtc) + return -ENODEV; =20 crtc_state =3D 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); =20 crtc_state->active =3D false; =20 ret =3D drm_atomic_set_mode_for_crtc(crtc_state, NULL); - KUNIT_ASSERT_EQ(test, ret, 0); + if (ret) + return ret; =20 output =3D encoder_to_vc4_dummy_output(encoder); conn =3D &output->connector; conn_state =3D 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); =20 ret =3D drm_atomic_set_crtc_for_connector(conn_state, NULL); - KUNIT_ASSERT_EQ(test, ret, 0); + if (ret) + return ret; =20 return 0; } --=20 2.48.1 From nobody Wed Dec 17 10:41:20 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5205120E316 for ; Tue, 18 Mar 2025 14:17:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742307469; cv=none; b=HBwakYafA1oijnwsS3JaH4JRBOGoEb6bSkBntVV2Fbi4wqfYBnwG8v+RPIummBi4JAhGaD9TiVVrrp48ywAB5NESl+HafmHdZWxt4r80FcBcQUker0NecbJ0xfJnmpXRvhHWFLEQRTXOzXDOwNf4BgjolSf+HytR2xL8cp7is/k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742307469; c=relaxed/simple; bh=HFNgZYKkW843dsEsmC3CFnAVtqRf7rRG/r1OkrdhDR4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FkNxLdo3o/0Ih1UjjKxCp6HjFAghHHm2eiFlh7/7ZgLm+fCFhZND/jwkQbqefMwVz50E/tz6rzI3hwFv2GVALy5ua6fDauXh2cchvSXcCtxEKbvlFBkBpKYqgoycYPXlDBRkRgDRWJxdMM+ql7jxeHTZWaSbAH1l9poolgZflPo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=uJVeVSH7; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="uJVeVSH7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 599F8C4CEEE; Tue, 18 Mar 2025 14:17:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742307468; bh=HFNgZYKkW843dsEsmC3CFnAVtqRf7rRG/r1OkrdhDR4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=uJVeVSH7iH7kPPO8QKLot3q2csVbAZGXzE0a0I7WmtH3A68tDgiID1+VarIm9Kwl0 SGyfBwvQXTsF2oSXQkqvbn+ldFDHjEsq3cGr3lbcfhkCYimkSIxlD44oWX7Ii7UCaj fvzaH6hj5VR3gukBBOehaXscptaVYmeuNheg312bwp3JO9vUUZ1LQWn4hHoY+kXMvo HH7oIJvsmWgSKSgI03ANVsUH3ncVBFeXyshPaKvi5/Ze8UJkpYP+R1DqZiD3pExu9O ld+kYUrIjQkCgk+I2eT+zxO6Cye7nUKHHKM3QUL8TM9CltjkG/VuZRNqP26o57o3zC 42yyJg3UOSwHg== From: Maxime Ripard Date: Tue, 18 Mar 2025 15:17:38 +0100 Subject: [PATCH 2/4] drm/vc4: tests: Document output handling functions Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250318-drm-vc4-kunit-failures-v1-2-779864d9ab37@kernel.org> References: <20250318-drm-vc4-kunit-failures-v1-0-779864d9ab37@kernel.org> In-Reply-To: <20250318-drm-vc4-kunit-failures-v1-0-779864d9ab37@kernel.org> To: Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance , Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2282; i=mripard@kernel.org; h=from:subject:message-id; bh=HFNgZYKkW843dsEsmC3CFnAVtqRf7rRG/r1OkrdhDR4=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDOk3G5pYVin01MlXHv53+oeS+ImaYpWFFxce7tbj/OSzi qtBpexsx1QWBmFOBlkxRZYnMmGnl7cvrnKwX/kDZg4rE8gQBi5OAZhIrRJjfUaYZW38Lwahq6+a Ht3muXaYdeMs/4hLx+JjZY/5/v967gpXfhynpPytOZkzZ83d/8T7EmPDlaVWs+5Jpb97tPBYg9c Kc//P91/N974R2bbh0+sdNUay8ytrXeIzJnx9sF9TrIJFjX8tAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D vc4_mock_atomic_add_output() and vc4_mock_atomic_del_output() public but aren't documented. Let's provide the documentation. In particular, special care should be taken to deal with EDEADLK. Signed-off-by: Maxime Ripard --- drivers/gpu/drm/vc4/tests/vc4_mock_output.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/gpu/drm/vc4/tests/vc4_mock_output.c b/drivers/gpu/drm/= vc4/tests/vc4_mock_output.c index f0ddc223c1f839e8a14f37fdcbb72e7b2c836aa1..577d9a9563696791632aec614c3= 81a214886bf27 100644 --- a/drivers/gpu/drm/vc4/tests/vc4_mock_output.c +++ b/drivers/gpu/drm/vc4/tests/vc4_mock_output.c @@ -59,10 +59,23 @@ struct vc4_dummy_output *vc4_dummy_output(struct kunit = *test, =20 static const struct drm_display_mode default_mode =3D { DRM_SIMPLE_MODE(640, 480, 64, 48) }; =20 +/** + * vc4_mock_atomic_add_output() - Enables an output in a state + * @test: The test context object + * @state: Atomic state to enable the output in. + * @type: Type of the output encoder + * + * Adds an output CRTC and connector to a state, and enables them. + * + * Returns: + * 0 on success, a negative error code on failure. If the error is + * EDEADLK, the entire atomic sequence must be restarted. All other + * errors are fatal. + */ int vc4_mock_atomic_add_output(struct kunit *test, struct drm_atomic_state *state, enum vc4_encoder_type type) { struct drm_device *drm =3D state->dev; @@ -103,10 +116,23 @@ int vc4_mock_atomic_add_output(struct kunit *test, crtc_state->active =3D true; =20 return 0; } =20 +/** + * vc4_mock_atomic_del_output() - Disables an output in a state + * @test: The test context object + * @state: Atomic state to disable the output in. + * @type: Type of the output encoder + * + * Adds an output CRTC and connector to a state, and disables them. + * + * Returns: + * 0 on success, a negative error code on failure. If the error is + * EDEADLK, the entire atomic sequence must be restarted. All other + * errors are fatal. + */ int vc4_mock_atomic_del_output(struct kunit *test, struct drm_atomic_state *state, enum vc4_encoder_type type) { struct drm_device *drm =3D state->dev; --=20 2.48.1 From nobody Wed Dec 17 10:41:20 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 030BF20D51C for ; Tue, 18 Mar 2025 14:17:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742307472; cv=none; b=vGIdtRv43XHzUEQLBBuuLXYuj757iOBpyEUAsPiZJFh7l/OZH8TZoecM11Jq3ho8s5+BH6Y35pzkAaLvBlbVDubKbi/ZC5dK8xL8cvY3rKDSJcUekS7MkiYyQsAARqpXp7XgpGmyRM+BOGfcOmCcCOoaFenxXWqFdB46xmF7uMQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742307472; c=relaxed/simple; bh=Prf+J8pljFFHYbYN80B3nf3AAv7dZSnSo25RANF9Ijk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LLWF8HcOQhMcR2BnHT5UpZSq0HjOfz5MSy8RylFAHtZ5td3HOtJbXDz9otL4acw46VNksd69K5siqEKyExBgUcJPCGMP90zgBK1pWqcV2mnut9YE5uOADm27QsN+Uk0vIq8Slq4ofRbqjihKq5n/qihLqgQI/xnlvTJyIuidmQo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=dugLojLy; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="dugLojLy" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 30A21C4CEEE; Tue, 18 Mar 2025 14:17:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742307471; bh=Prf+J8pljFFHYbYN80B3nf3AAv7dZSnSo25RANF9Ijk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=dugLojLyfQ0/vMMS2aIMtaRWBUM9THTPLiqmrukx0XADzbcP+q2yFe4TlQ6BnjRir JRKZEKWc0/GZyl+Ee55QbZkIK+ul5yHZ3zOj2TTh8kq+8mvC1hUQH1emqD4UdJOP1a u1DLlYez2AFw0pkXkRax9cdUmmmTBpuWsge9KNnDxbVujSpFfdkmvilU1RdeGSsoEu VDSZssMiOuVqjYopB7ki6UxBWXLvmQI8sI4ZvpHWKYZ4XlOByTdDAsU+6LuxzKcjjg UxzTvY52j+UBbsaTNKhhHvLwo1KEhwksBDcofISUD6Zjo58UI57iUAwFvBJ3rPQgTD D7O3CJsFeSLnQ== From: Maxime Ripard Date: Tue, 18 Mar 2025 15:17:39 +0100 Subject: [PATCH 3/4] drm/vc4: tests: Stop allocating the state in test init Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250318-drm-vc4-kunit-failures-v1-3-779864d9ab37@kernel.org> References: <20250318-drm-vc4-kunit-failures-v1-0-779864d9ab37@kernel.org> In-Reply-To: <20250318-drm-vc4-kunit-failures-v1-0-779864d9ab37@kernel.org> To: Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance , Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4561; i=mripard@kernel.org; h=from:subject:message-id; bh=Prf+J8pljFFHYbYN80B3nf3AAv7dZSnSo25RANF9Ijk=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDOk3G5rY0nTKchS/SZzRdTryWedr/eGHmqFPDt8KO8991 7Kq09ShYyoLgzAng6yYIssTmbDTy9sXVznYr/wBM4eVCWQIAxenAExkugVjw8dr+jfTcvJSexg+ /z+7Mkr3UvXPxyf3ZOo8WFAmxG9loj2vV6DRXiNI+7h3Vtsx0U9bGRvOSd6rMOMzci8UvufMqNX td//w5u7MxVuYI1OrjqxIPPzRKnTyTJaHl5puRh+fIMO5cBoA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D The vc4-pv-muxing-combinations and vc5-pv-muxing-combinations test suites use a common test init function which, in part, allocates the drm atomic state the test will use. That allocation relies on drm_kunit_helper_atomic_state_alloc(), and thus requires a struct drm_modeset_acquire_ctx. This context will then be stored in the allocated state->acquire_ctx field. However, the context is local to the test init function, and is cleared as soon as drm_kunit_helper_atomic_state_alloc() is done. We thus end up with an dangling pointer to a cleared context in state->acquire_ctx for our test to consumes. We should really allocate the context and the state in the test functions, so we can also control when we're done with it. Fixes: 30188df0c387 ("drm/tests: Drop drm_kunit_helper_acquire_ctx_alloc()") Signed-off-by: Maxime Ripard Reviewed-by: Ma=C3=ADra Canal --- drivers/gpu/drm/vc4/tests/vc4_test_pv_muxing.c | 41 +++++++++++++++++-----= ---- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/vc4/tests/vc4_test_pv_muxing.c b/drivers/gpu/d= rm/vc4/tests/vc4_test_pv_muxing.c index 992e8f5c5c6ea8d92338a8fe739fa1115ff85338..52c04ef33206bf4f9e21e3c8b7c= ea932824a67fa 100644 --- a/drivers/gpu/drm/vc4/tests/vc4_test_pv_muxing.c +++ b/drivers/gpu/drm/vc4/tests/vc4_test_pv_muxing.c @@ -18,11 +18,10 @@ =20 #include "vc4_mock.h" =20 struct pv_muxing_priv { struct vc4_dev *vc4; - struct drm_atomic_state *state; }; =20 static bool check_fifo_conflict(struct kunit *test, const struct drm_atomic_state *state) { @@ -675,14 +674,23 @@ KUNIT_ARRAY_PARAM(vc5_test_pv_muxing_invalid, =20 static void drm_vc4_test_pv_muxing(struct kunit *test) { const struct pv_muxing_param *params =3D test->param_value; const struct pv_muxing_priv *priv =3D test->priv; - struct drm_atomic_state *state =3D priv->state; + struct drm_modeset_acquire_ctx ctx; + struct drm_atomic_state *state; + struct drm_device *drm; + struct vc4_dev *vc4; unsigned int i; int ret; =20 + drm_modeset_acquire_init(&ctx, 0); + + vc4 =3D priv->vc4; + drm =3D &vc4->base; + state =3D drm_kunit_helper_atomic_state_alloc(test, drm, &ctx); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state); for (i =3D 0; i < params->nencoders; i++) { enum vc4_encoder_type enc_type =3D params->encoders[i]; =20 ret =3D vc4_mock_atomic_add_output(test, state, enc_type); KUNIT_ASSERT_EQ(test, ret, 0); @@ -698,56 +706,61 @@ static void drm_vc4_test_pv_muxing(struct kunit *test) enum vc4_encoder_type enc_type =3D params->encoders[i]; =20 KUNIT_EXPECT_TRUE(test, check_channel_for_encoder(test, state, enc_type, params->check_fn)); } + + drm_modeset_drop_locks(&ctx); + drm_modeset_acquire_fini(&ctx); } =20 static void drm_vc4_test_pv_muxing_invalid(struct kunit *test) { const struct pv_muxing_param *params =3D test->param_value; const struct pv_muxing_priv *priv =3D test->priv; - struct drm_atomic_state *state =3D priv->state; + struct drm_modeset_acquire_ctx ctx; + struct drm_atomic_state *state; + struct drm_device *drm; + struct vc4_dev *vc4; unsigned int i; int ret; =20 + drm_modeset_acquire_init(&ctx, 0); + + vc4 =3D priv->vc4; + drm =3D &vc4->base; + state =3D drm_kunit_helper_atomic_state_alloc(test, drm, &ctx); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state); + for (i =3D 0; i < params->nencoders; i++) { enum vc4_encoder_type enc_type =3D params->encoders[i]; =20 ret =3D vc4_mock_atomic_add_output(test, state, enc_type); KUNIT_ASSERT_EQ(test, ret, 0); } =20 ret =3D drm_atomic_check_only(state); KUNIT_EXPECT_LT(test, ret, 0); + + drm_modeset_drop_locks(&ctx); + drm_modeset_acquire_fini(&ctx); } =20 static int vc4_pv_muxing_test_init(struct kunit *test) { const struct pv_muxing_param *params =3D test->param_value; - struct drm_modeset_acquire_ctx ctx; struct pv_muxing_priv *priv; - struct drm_device *drm; struct vc4_dev *vc4; =20 priv =3D kunit_kzalloc(test, sizeof(*priv), GFP_KERNEL); KUNIT_ASSERT_NOT_NULL(test, priv); test->priv =3D priv; =20 vc4 =3D params->mock_fn(test); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, vc4); priv->vc4 =3D vc4; =20 - drm_modeset_acquire_init(&ctx, 0); - - drm =3D &vc4->base; - priv->state =3D drm_kunit_helper_atomic_state_alloc(test, drm, &ctx); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, priv->state); - - drm_modeset_drop_locks(&ctx); - drm_modeset_acquire_fini(&ctx); - return 0; } =20 static struct kunit_case vc4_pv_muxing_tests[] =3D { KUNIT_CASE_PARAM(drm_vc4_test_pv_muxing, --=20 2.48.1 From nobody Wed Dec 17 10:41:20 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9C64E20E70B for ; Tue, 18 Mar 2025 14:17:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742307474; cv=none; b=TZRd6vy4nOwALvaQhsF21Vaf+OspVdm5C3OIcR48l1ztYuW/kh2glW0xx2P8RwRoxiLlYyhmHABk+JtMJ4E+shSkyy6Vsa88LyUn9vah3jd0mXhiLvZQPbUOcIYsqnSmaYTNc7Xkuk8D//NCPniQTJFsyk3FHqbqpcieSpEfVqI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742307474; c=relaxed/simple; bh=Qse+YpYm1YMkR9UE3SKy6BavWvSqQlpvnDsgaxildas=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=O9jf2HkOaZgZJTxRB+TFaQNHyWMdN56euLkkoTDgJU57w/Y6uZ01fYgjCP/Rq2BRwF598sgZ087m03hAP27AUscrNkNujriBcAt2F5kN1dNI2fb6IapXDNlTug73TaBZsraNk7tNVNQSPbMp1SOoqaJhqsKMklnIoWbAHckT5cQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=tOcIvueU; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="tOcIvueU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CDAF5C4CEEE; Tue, 18 Mar 2025 14:17:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742307474; bh=Qse+YpYm1YMkR9UE3SKy6BavWvSqQlpvnDsgaxildas=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=tOcIvueUgOEJxFr9+nGMRNUA7zNlNutA1Dh32HyaZQRSl8v0BpwARLovQmDZqU/EW N7z5vxkxESfQocNDRjqBQo90m0A8GBjOaArI1S2Oib4ISCI6iHOoGBRREmzPtI3/xU FjLUwW8TQqHEBAsuspQV7L37XjPGau7/yzO3tLG8SgGosAfhnnGg4PKWTzDbAUabOG rJV7ZcBjZRyxcMUdRkCEwjeZQjXt5cuXodUcPEVjjWdwbGWynFExDM0Y19+iMqePl3 1UlehcexXnMXfjUgm3xXamVQtbE5ZUiZb9mer+u+MVMRuK+kyluGD2lruspIkyo/3e DH9+banXXoDOA== From: Maxime Ripard Date: Tue, 18 Mar 2025 15:17:40 +0100 Subject: [PATCH 4/4] drm/vc4: tests: Retry pv-muxing tests when EDEADLK Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250318-drm-vc4-kunit-failures-v1-4-779864d9ab37@kernel.org> References: <20250318-drm-vc4-kunit-failures-v1-0-779864d9ab37@kernel.org> In-Reply-To: <20250318-drm-vc4-kunit-failures-v1-0-779864d9ab37@kernel.org> To: Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance , Maarten Lankhorst , Thomas Zimmermann , David Airlie , Simona Vetter Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Maxime Ripard X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6791; i=mripard@kernel.org; h=from:subject:message-id; bh=Qse+YpYm1YMkR9UE3SKy6BavWvSqQlpvnDsgaxildas=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDOk3G5q/2ngGhdZ+u2l560t2WsaM7d5h0Wa/7Jdtl/X6s DZ++ZJLHVNZGIQ5GWTFFFmeyISdXt6+uMrBfuUPmDmsTCBDGLg4BWAiRy8yNtzoWOv2J0B4jUyz ZmQxs6VMf/Jkz5fmEk1XIo8Krcu5lxARcOvcLr2JYtZc0ded90kvZmz42CfLm/b/Y9+/r+smfJG 7/2hx8fUHT7QOxW+9af5+Ul6v14rWLK+qnxN4pjBfa+c7enAWAA== X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D Some functions used by the HVS->PV muxing tests can return with EDEADLK, meaning the entire sequence should be restarted. It's not a fatal error and we should treat it as a recoverable error, and recover, instead of failing the test like we currently do. Fixes: 76ec18dc5afa ("drm/vc4: tests: Add unit test suite for the PV muxing= ") Signed-off-by: Maxime Ripard --- drivers/gpu/drm/vc4/tests/vc4_test_pv_muxing.c | 44 ++++++++++++++++++++++= ++++ 1 file changed, 44 insertions(+) diff --git a/drivers/gpu/drm/vc4/tests/vc4_test_pv_muxing.c b/drivers/gpu/d= rm/vc4/tests/vc4_test_pv_muxing.c index 52c04ef33206bf4f9e21e3c8b7cea932824a67fa..94e05bddb630a79aab189d9bc16= f09a9d84ce396 100644 --- a/drivers/gpu/drm/vc4/tests/vc4_test_pv_muxing.c +++ b/drivers/gpu/drm/vc4/tests/vc4_test_pv_muxing.c @@ -685,20 +685,26 @@ static void drm_vc4_test_pv_muxing(struct kunit *test) =20 drm_modeset_acquire_init(&ctx, 0); =20 vc4 =3D priv->vc4; drm =3D &vc4->base; + +retry: state =3D drm_kunit_helper_atomic_state_alloc(test, drm, &ctx); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state); for (i =3D 0; i < params->nencoders; i++) { enum vc4_encoder_type enc_type =3D params->encoders[i]; =20 ret =3D vc4_mock_atomic_add_output(test, state, enc_type); + if (ret =3D=3D -EDEADLK) + goto retry; KUNIT_ASSERT_EQ(test, ret, 0); } =20 ret =3D drm_atomic_check_only(state); + if (ret =3D=3D -EDEADLK) + goto retry; KUNIT_EXPECT_EQ(test, ret, 0); =20 KUNIT_EXPECT_TRUE(test, check_fifo_conflict(test, state)); =20 @@ -726,21 +732,27 @@ static void drm_vc4_test_pv_muxing_invalid(struct kun= it *test) =20 drm_modeset_acquire_init(&ctx, 0); =20 vc4 =3D priv->vc4; drm =3D &vc4->base; + +retry: state =3D drm_kunit_helper_atomic_state_alloc(test, drm, &ctx); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state); =20 for (i =3D 0; i < params->nencoders; i++) { enum vc4_encoder_type enc_type =3D params->encoders[i]; =20 ret =3D vc4_mock_atomic_add_output(test, state, enc_type); + if (ret =3D=3D -EDEADLK) + goto retry; KUNIT_ASSERT_EQ(test, ret, 0); } =20 ret =3D drm_atomic_check_only(state); + if (ret =3D=3D -EDEADLK) + goto retry; KUNIT_EXPECT_LT(test, ret, 0); =20 drm_modeset_drop_locks(&ctx); drm_modeset_acquire_fini(&ctx); } @@ -811,17 +823,22 @@ static void drm_test_vc5_pv_muxing_bugs_subsequent_cr= tc_enable(struct kunit *tes KUNIT_ASSERT_NOT_ERR_OR_NULL(test, vc4); =20 drm_modeset_acquire_init(&ctx, 0); =20 drm =3D &vc4->base; +retry_first: state =3D drm_kunit_helper_atomic_state_alloc(test, drm, &ctx); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state); =20 ret =3D vc4_mock_atomic_add_output(test, state, VC4_ENCODER_TYPE_HDMI0); + if (ret =3D=3D -EDEADLK) + goto retry_first; KUNIT_ASSERT_EQ(test, ret, 0); =20 ret =3D drm_atomic_check_only(state); + if (ret =3D=3D -EDEADLK) + goto retry_first; KUNIT_ASSERT_EQ(test, ret, 0); =20 new_hvs_state =3D vc4_hvs_get_new_global_state(state); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, new_hvs_state); =20 @@ -834,17 +851,22 @@ static void drm_test_vc5_pv_muxing_bugs_subsequent_cr= tc_enable(struct kunit *tes KUNIT_ASSERT_TRUE(test, new_hvs_state->fifo_state[hdmi0_channel].in_use); =20 ret =3D drm_atomic_helper_swap_state(state, false); KUNIT_ASSERT_EQ(test, ret, 0); =20 +retry_second: state =3D drm_kunit_helper_atomic_state_alloc(test, drm, &ctx); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state); =20 ret =3D vc4_mock_atomic_add_output(test, state, VC4_ENCODER_TYPE_HDMI1); + if (ret =3D=3D -EDEADLK) + goto retry_second; KUNIT_ASSERT_EQ(test, ret, 0); =20 ret =3D drm_atomic_check_only(state); + if (ret =3D=3D -EDEADLK) + goto retry_second; KUNIT_ASSERT_EQ(test, ret, 0); =20 new_hvs_state =3D vc4_hvs_get_new_global_state(state); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, new_hvs_state); =20 @@ -885,20 +907,27 @@ static void drm_test_vc5_pv_muxing_bugs_stable_fifo(s= truct kunit *test) KUNIT_ASSERT_NOT_ERR_OR_NULL(test, vc4); =20 drm_modeset_acquire_init(&ctx, 0); =20 drm =3D &vc4->base; +retry_first: state =3D drm_kunit_helper_atomic_state_alloc(test, drm, &ctx); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state); =20 ret =3D vc4_mock_atomic_add_output(test, state, VC4_ENCODER_TYPE_HDMI0); + if (ret =3D=3D -EDEADLK) + goto retry_first; KUNIT_ASSERT_EQ(test, ret, 0); =20 ret =3D vc4_mock_atomic_add_output(test, state, VC4_ENCODER_TYPE_HDMI1); + if (ret =3D=3D -EDEADLK) + goto retry_first; KUNIT_ASSERT_EQ(test, ret, 0); =20 ret =3D drm_atomic_check_only(state); + if (ret =3D=3D -EDEADLK) + goto retry_first; KUNIT_ASSERT_EQ(test, ret, 0); =20 new_hvs_state =3D vc4_hvs_get_new_global_state(state); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, new_hvs_state); =20 @@ -919,17 +948,22 @@ static void drm_test_vc5_pv_muxing_bugs_stable_fifo(s= truct kunit *test) KUNIT_ASSERT_TRUE(test, new_hvs_state->fifo_state[old_hdmi1_channel].in_u= se); =20 ret =3D drm_atomic_helper_swap_state(state, false); KUNIT_ASSERT_EQ(test, ret, 0); =20 +retry_second: state =3D drm_kunit_helper_atomic_state_alloc(test, drm, &ctx); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state); =20 ret =3D vc4_mock_atomic_del_output(test, state, VC4_ENCODER_TYPE_HDMI0); + if (ret =3D=3D -EDEADLK) + goto retry_second; KUNIT_ASSERT_EQ(test, ret, 0); =20 ret =3D drm_atomic_check_only(state); + if (ret =3D=3D -EDEADLK) + goto retry_second; KUNIT_ASSERT_EQ(test, ret, 0); =20 new_hvs_state =3D vc4_hvs_get_new_global_state(state); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, new_hvs_state); =20 @@ -979,29 +1013,39 @@ drm_test_vc5_pv_muxing_bugs_subsequent_crtc_enable_t= oo_many_crtc_state(struct ku KUNIT_ASSERT_NOT_ERR_OR_NULL(test, vc4); =20 drm_modeset_acquire_init(&ctx, 0); =20 drm =3D &vc4->base; +retry_first: state =3D drm_kunit_helper_atomic_state_alloc(test, drm, &ctx); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state); =20 ret =3D vc4_mock_atomic_add_output(test, state, VC4_ENCODER_TYPE_HDMI0); + if (ret =3D=3D -EDEADLK) + goto retry_first; KUNIT_ASSERT_EQ(test, ret, 0); =20 ret =3D drm_atomic_check_only(state); + if (ret =3D=3D -EDEADLK) + goto retry_first; KUNIT_ASSERT_EQ(test, ret, 0); =20 ret =3D drm_atomic_helper_swap_state(state, false); KUNIT_ASSERT_EQ(test, ret, 0); =20 +retry_second: state =3D drm_kunit_helper_atomic_state_alloc(test, drm, &ctx); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, state); =20 ret =3D vc4_mock_atomic_add_output(test, state, VC4_ENCODER_TYPE_HDMI1); + if (ret =3D=3D -EDEADLK) + goto retry_second; KUNIT_ASSERT_EQ(test, ret, 0); =20 ret =3D drm_atomic_check_only(state); + if (ret =3D=3D -EDEADLK) + goto retry_second; KUNIT_ASSERT_EQ(test, ret, 0); =20 new_vc4_crtc_state =3D get_vc4_crtc_state_for_encoder(test, state, VC4_ENCODER_TYPE_HDMI0); KUNIT_EXPECT_NULL(test, new_vc4_crtc_state); --=20 2.48.1