From nobody Sat Jul 25 00:42:04 2026 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B88A04DD6F5 for ; Tue, 21 Jul 2026 15:22:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784647374; cv=none; b=dSfrM4Ui0ISV7cRQQz1mliRdCNYA/ymCQagv9pyPETewI2wvC5XCSFcETWC8eAcS5JLCqZBSv6OI2/c47ycH0feuuaYuiCQfPOPcQK8Pskyegzcbovt02/OaaCcnMB3eizRCYcPnCCD42Ni7AtiloL+LdKAjvUMF4l0ypkGztXA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784647374; c=relaxed/simple; bh=vymvzdq6k/6TlyDR7YkwC0qyXhOrNERQdYig/qlY66I=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=gxGC3lm8DxNNA0ThbH4Xdr0MR0f+reA+gTqTjfuxCVspXxBOPQft7lRUz4l3DAIucvm6KpMmJylhxr3QTLzSsZ8zLXi6Y6u7dYdYa8FREkASQL0X8af4NT0DV/BbR7y44HZd2XNh8j717Ezqym54gSS8JzHTd92sOwQA0WKLLCg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=TwUzUAge; arc=none smtp.client-ip=209.85.214.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TwUzUAge" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-2cab973140bso140844125ad.3 for ; Tue, 21 Jul 2026 08:22:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784647372; x=1785252172; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=9eXHmL2FrSSPACEJW/ZdN2+RZSdHtJBbjO91JeCFP0A=; b=TwUzUAgevKGXxz6jo86T8Cm5ePzayIHClVUrAkEQnLrTEE6t2QpFUigyy9zARqtfA9 L97vknLXEnlDFOZjn2xcA498vqZ2FYI8IE5V+b/VGo/8HN4K5dmywc0cJVJ2XV9ef8t/ Ug4oZAV+inktHs/bOnJneYpiVKadPxcsVRqQSGaJt0y9YFUVD2MGlckPRc6tLpsWu3pt qiAyOOZovtpC9bTCXhTqVXTSQ7i5zxLr+KXAUcYym4QXRRJ/S9T7LZQ9i5F1DZ7mczgg jpnEQ9qe6LbFzlzO96xrYQs2CqwJq+SN+6jO8f0vuY3p8PkdtNF81dlRFQ37Gpe3Fc5e DSqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784647372; x=1785252172; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9eXHmL2FrSSPACEJW/ZdN2+RZSdHtJBbjO91JeCFP0A=; b=bj0C4VvPMJtOs7xDU4aI4RPEosxTn3x5WeCToMEne7KKQJSgITOvcrkOBgpM0Rl36v e9KmV+yhkSC7biSepiio8PsmS9fIO8u/Bh339rLe11vDgrEbjaXesRVn9rXW2Vp9fLjh jPe+yE8qVPPUX/JoddpATNmulnTarU2pMEyS3Yv0mnIQmTz46MZtbqxvRRaiC6NN+0SB KknCAHEwePuU8sikrcZfN6ICSpMuZT2Xd6amDvWbWQrgJW8GGBUi/LJokeTMTBo+ACcY g7RK2Yl6/HvaqOWiZQL5RU43aUTOfFYvmC/8K//Wf41ZGQ3xr/rYDbHTQ+YgzQJ5J4mY IjNQ== X-Forwarded-Encrypted: i=1; AHgh+RoQhG3zgfTy60Nm/Y0DovL8LSu0S6oY2zuGcH4/SHej225Gb3GYH2AdUg363uZHyV+JgFTU7WiFJRCGeUs=@vger.kernel.org X-Gm-Message-State: AOJu0Ywgh9zt79t8f8QuoHHNlZ3amDqtcdjsqFTscoiuQmEiwcWFoKTm bKi/ci+jEdiWICFj3vTeCWv6Z8DnWX83jLH+a8DtvVcLlpfMWQwgq/g= X-Gm-Gg: AR+sD13TRNxJ5FZdVVJIjRqG4kud1V/4FAMA8hedPwajTQnjeIWQLKwvAWRUErYPHY2 7yO5t0QIB6EcwCcAWn2cQCOo+LkeoUgIt1qjbwCksYj4Q4tsWDBhqUxpoPGSCL/L52lFtF9QhhY GiLkcnWQsrCZwZ0M/coMhieMhbwIQ+AuUPDfFBm/QU0yOcMTpBs0GAe+VHqYgybaO1d5VW2KLHA p2l4ynW7mGr7XTrOGyG/fuwGf7v4EXBCpfLuFBhMBf2z23rM9QC2Ql1j43SLD4jPlzGml6Bjmyt h4aEMPOCAoUKw9yb7TxK/GdfAvrSXRQy4aPCK2FiwPyG+3qm7JsN4vkskQPzRcDtuaHelAL0imF oPgpjCnKpTztiagcw/eWsRo6LDcTYmJR1EjChA20XDq9cxEwEo/X0FtJMEaFcXeAi/DlH6lvvur qzlXBkLPULOLSe7MiSgIuffZdLrI75MJTtzGro5ikVpEb/4qm+FH8hzGm8yMv6pEQK1ki6PZd+u uPVjLEHNUQkW1AoCBBIqJJK1c7BA4tBu6Eeb+zT X-Received: by 2002:a17:90b:1c02:b0:38e:2aa8:60d0 with SMTP id 98e67ed59e1d1-38e4b586067mr20371153a91.37.1784647371935; Tue, 21 Jul 2026 08:22:51 -0700 (PDT) Received: from localhost.localdomain ([14.5.152.27]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38e60cc2ad5sm1402904a91.4.2026.07.21.08.22.47 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 21 Jul 2026 08:22:51 -0700 (PDT) From: Myeonghun Pak To: Chun-Kuang Hu , Philipp Zabel Cc: David Airlie , Simona Vetter , Matthias Brugger , AngeloGioacchino Del Regno , dri-devel@lists.freedesktop.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Myeonghun Pak , Ijae Kim Subject: [PATCH] drm/mediatek: ovl_adaptor: balance component registrations Date: Wed, 22 Jul 2026 00:22:42 +0900 Message-Id: <20260721152242.47138-1-mhun512@gmail.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The OVL adaptor registers both an aggregate driver for its child devices and a component for the main DRM aggregate. Probe currently ignores an error from registering the child aggregate and leaves that aggregate registered if registering the DRM component fails. The remove callback also leaves the DRM component registered. These imbalances can leave component framework entries referring to a device whose probe failed or whose driver has been detached. The aggregate unbind callback also fails to undo component_bind_all(), leaving its child components marked as bound when the aggregate is removed. Check the aggregate registration result, unwind it when the component registration fails, and unregister the component before the aggregate on remove. Keep runtime PM enabled until both framework registrations have been removed, and unbind all child components from the aggregate unbind callback. Fixes: 453c3364632a ("drm/mediatek: Add ovl_adaptor support for MT8195") Cc: stable@vger.kernel.org # 6.4+ Co-developed-by: Ijae Kim Signed-off-by: Ijae Kim Signed-off-by: Myeonghun Pak --- drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c b/drivers/gpu/= drm/mediatek/mtk_disp_ovl_adaptor.c index c0af3e3b5..6a259872b 100644 --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl_adaptor.c @@ -625,6 +625,7 @@ static void mtk_disp_ovl_adaptor_master_unbind(struct d= evice *dev) struct mtk_disp_ovl_adaptor *priv =3D dev_get_drvdata(dev); =20 priv->children_bound =3D false; + component_unbind_all(dev, priv->mmsys_dev); } =20 static const struct component_master_ops mtk_disp_ovl_adaptor_master_ops = =3D { @@ -651,12 +652,15 @@ static int mtk_disp_ovl_adaptor_probe(struct platform= _device *pdev) =20 priv->mmsys_dev =3D pdev->dev.platform_data; =20 - component_master_add_with_match(dev, &mtk_disp_ovl_adaptor_master_ops, ma= tch); + ret =3D component_master_add_with_match(dev, &mtk_disp_ovl_adaptor_master= _ops, match); + if (ret) + return dev_err_probe(dev, ret, "Failed to add component master\n"); =20 pm_runtime_enable(dev); =20 ret =3D component_add(dev, &mtk_disp_ovl_adaptor_comp_ops); if (ret !=3D 0) { + component_master_del(dev, &mtk_disp_ovl_adaptor_master_ops); pm_runtime_disable(dev); return dev_err_probe(dev, ret, "Failed to add component\n"); } @@ -666,6 +670,7 @@ static int mtk_disp_ovl_adaptor_probe(struct platform_d= evice *pdev) =20 static void mtk_disp_ovl_adaptor_remove(struct platform_device *pdev) { + component_del(&pdev->dev, &mtk_disp_ovl_adaptor_comp_ops); component_master_del(&pdev->dev, &mtk_disp_ovl_adaptor_master_ops); pm_runtime_disable(&pdev->dev); } --=20 2.51.0