From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtpout-03.galae.net (smtpout-03.galae.net [185.246.85.4]) (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 8C75751599B for ; Thu, 1 Oct 2026 12:43:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.85.4 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790858621; cv=none; b=JRkOZ0vRdTZjj2r471dM6uJEE23HuvhZb+S7OqcVDRl+Qrc6wc77sbCOGRziFHThDb9WxwJ2b2h7EWGOCIaQuxanwCX0ycEQDPPqbf/PNxFhQ2bmGOAOvmTSBGX0c5aHzrTE/zxyz0aK8+GFFuAru/6cDS/zwoaAWFRQgzXnHLE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1790858621; c=relaxed/simple; bh=r3TI9KPUK17eZCTob/LZckRstb9YetdRFljX0HRVLOE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qDUxUkQw5IHB4qHYf4nf9eM/9ZkNchEaNOmN1/pQcErNECrLyNf/5JDYbmTAKbXr9q6vzw6MCOW7EuYNppO+BXCFoDtvjeU9Rr+3tVckQgMxCM3JTAAmxTGZwyounU94Uw1u07bE8eLZQkf77ds1WCfJW2jIqQJeQ/bh+WaSx7o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=KsKKfvxN; arc=none smtp.client-ip=185.246.85.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="KsKKfvxN" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 1C7FD4E416CC; Thu, 1 Oct 2026 12:43:38 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id E207160341; Thu, 1 Oct 2026 12:43:37 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 568A5103280FE; Thu, 1 Oct 2026 14:43:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1790858615; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=zRPs2WrC0muI/wJzxFtAO5Vdp4gXV01r6InSF3JVrI4=; b=KsKKfvxNAhJdVk4znvFhN6vpq9lGoMCcqrZWePNRFyPQFGqLMZTCPIxOtNm4IHXp0OYGOl P65GhfDnpDwVwNOW+4xBqdQJ8S4PgOw8NmBuCJ+hxf80gzeYX0qXkLQd//0lSCwehdOf6o VaDwwS66n5At2i2t5CBP8eBfsVEv4VXbiOvXruxPHXYzL3YIM+1JwKUzdg4UNEyP70kuVG SNDCoiRJW0rWJYIov4CbrhtwCpzKz9VqLDICopd3ZcmoDrqCB5oOgtxx4Z4Y2OSEbxNnC0 NlLa7DDCkyuORYQEc+TrftGArcoffVo+oWpnZe2Q38yfpFOo+s7rWg0eDL680A== From: Luca Ceresoli Date: Thu, 01 Oct 2026 14:42:31 +0200 Subject: [PATCH RFC v2 09/24] drm/bridge: initialize chain_node list head on detach and attach errors 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: 7bit Message-Id: <20261001-drm-bridge-hotplug-v2-9-8e34986dcb68@bootlin.com> References: <20261001-drm-bridge-hotplug-v2-0-8e34986dcb68@bootlin.com> In-Reply-To: <20261001-drm-bridge-hotplug-v2-0-8e34986dcb68@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Inki Dae , Jagan Teki , Marek Szyprowski , Jessica Zhang , Douglas Anderson , Marek Vasut , Stefan Agner , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: Hui Pu , Ian Ray , Luca Ceresoli , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org X-Mailer: b4 0.16.0 X-Last-TLS-Session-Version: TLSv1.3 When a bridge is detached it is removed from the encoder bridge_chain list, but the bridge::chain_node list head is not cleared. This is going to be problematic with the upcoming hotplug bridge support because if a bridge is detached from the encoder chain but not yet removed, when later detaching it the encoder code may think it is still attached, thus trying to detach it twice. Avoid this by clearing the list head on detach, so there's a clear and simple way to know when a bridge is not attached anymore. Do the same in the error management code in drm_bridge_attach(), so that chain_node is always empty [as in list_empty()] when it is not (yet|anymore) in the bridge chain. Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/drm_bridge.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index cd0c246f7e99..2a112ed69e20 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -663,7 +663,7 @@ int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, bridge->dev = NULL; bridge->encoder = NULL; mutex_lock(&encoder->bridge_chain_mutex); - list_del(&bridge->chain_node); + list_del_init(&bridge->chain_node); mutex_unlock(&encoder->bridge_chain_mutex); if (ret != -EPROBE_DEFER) @@ -693,7 +693,7 @@ void drm_bridge_detach(struct drm_bridge *bridge) if (bridge->funcs->detach) bridge->funcs->detach(bridge); - list_del(&bridge->chain_node); + list_del_init(&bridge->chain_node); bridge->dev = NULL; drm_bridge_put(bridge); } -- 2.55.0