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 C13693B6361 for ; Thu, 9 Apr 2026 09:56:13 +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=1775728576; cv=none; b=NfzhqhEhtK2bkGBBCtDUpp07kM8dv/oP6WkplfKQQXud+yk+qV1LWsOR8xMyqdYDA1Tz5oQCK2/zUWt3thOHP2qlOy3hQvT4NBFZRMJ+qyCarVbpPw6MHWCva7PTLSSrBMMXY/mQqgSowhY8qyUr1H2Q7LdT+4/UVRzUQRHPQNk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775728576; c=relaxed/simple; bh=waEBpsdfNEJ/cvfv0sT+CaHj2Kqk7NOnH41X3LWQ75s=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=knjNFSaLY2OWisgNuu1bDiTrWSx/BrH6Il/JUXdcKS62yoDQNuQSGcyQU0Opdn+pk3aGsbTIFgW35Wl4PdJaZisnXtpu2AOLQ8qUoIAZ4oQOGy2cqaGV+BDB9KdIsinIhMewgXl/rN0ME/Ihs4DllHk4Snk1MjnAh1xDNH0HTqg= 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=VWbdV3u2; 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="VWbdV3u2" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id A47694E429A4; Thu, 9 Apr 2026 09:56:06 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 7A2BF5FDEB; Thu, 9 Apr 2026 09:56:06 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 63136104501F4; Thu, 9 Apr 2026 11:56:03 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1775728565; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:content-language:in-reply-to:references; bh=v+A3qNJqOEnafW1jXfD7En7I8x7btIPnWkfLN1JElUg=; b=VWbdV3u2OC6lWMAhbE6VWZ7TMtaCu3BJ+zYRu1nKNEBHi8PCy8jbSMG9n6Ac3RHD7xDl2i UyFRfVAXppmoffCWBhrx7wVC6kMAFSHnxwmMyn1p+QUz96k4bYV5OfL9Ohjj7SuJZXuEmU 4vEx8LqTEJo2T5IYBSa+TCNkRXQ8/D9rCWHyFphHH6oEVy/2eYh/Y2DroWnPBuaerKEbVj fzsHzV9UHGRe6jSQXI9aS+gHXQY8UPLkqJqUnWOxIHGWaDpQtvQAIyBuNGMd+yHka/kY1Y vqun6xNQujLLs5SwfHHDhAl/6Q7pi8LKNZjCqnQ2JcsF8uSHOt7w7t549hx4yA== Message-ID: Date: Thu, 9 Apr 2026 11:56:03 +0200 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v5 1/7] drm/encoder: add mutex to protect the bridge chain To: Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec Cc: Hui Pu , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Ian Ray References: <20260324-drm-bridge-alloc-encoder-chain-mutex-v5-0-8bf786c5c7e6@bootlin.com> <20260324-drm-bridge-alloc-encoder-chain-mutex-v5-1-8bf786c5c7e6@bootlin.com> Content-Language: en-US From: Louis Chauvet In-Reply-To: <20260324-drm-bridge-alloc-encoder-chain-mutex-v5-1-8bf786c5c7e6@bootlin.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Last-TLS-Session-Version: TLSv1.3 On 3/24/26 9:58 AM, Luca Ceresoli wrote: > The per-encoder bridge chain is currently assumed to be static once it is > fully initialized. Work is in progress to add hot-pluggable bridges, > breaking that assumption. > > With bridge removal, the encoder chain can change without notice, removing > tail bridges. This can be problematic while iterating over the chain. > > Add a mutex to be taken whenever looping or changing the encoder chain. > > Reviewed-by: Maxime Ripard > Signed-off-by: Luca Ceresoli Reviewed-by: Louis Chauvet > --- > > Changes in v3: > - Removed the drm_encoder_chain_[un]lock() wrappers > > Changes in v2: > - Added documentation to new APIs > --- > drivers/gpu/drm/drm_encoder.c | 2 ++ > include/drm/drm_encoder.h | 4 ++++ > 2 files changed, 6 insertions(+) > > diff --git a/drivers/gpu/drm/drm_encoder.c b/drivers/gpu/drm/drm_encoder.c > index 8f2bc6a28482..3261f142baea 100644 > --- a/drivers/gpu/drm/drm_encoder.c > +++ b/drivers/gpu/drm/drm_encoder.c > @@ -129,6 +129,7 @@ static int __drm_encoder_init(struct drm_device *dev, > } > > INIT_LIST_HEAD(&encoder->bridge_chain); > + mutex_init(&encoder->bridge_chain_mutex); > list_add_tail(&encoder->head, &dev->mode_config.encoder_list); > encoder->index = dev->mode_config.num_encoder++; > > @@ -202,6 +203,7 @@ void drm_encoder_cleanup(struct drm_encoder *encoder) > kfree(encoder->name); > list_del(&encoder->head); > dev->mode_config.num_encoder--; > + mutex_destroy(&encoder->bridge_chain_mutex); > > memset(encoder, 0, sizeof(*encoder)); > } > diff --git a/include/drm/drm_encoder.h b/include/drm/drm_encoder.h > index 977a9381c8ba..eded7c34481a 100644 > --- a/include/drm/drm_encoder.h > +++ b/include/drm/drm_encoder.h > @@ -25,6 +25,7 @@ > > #include > #include > +#include > #include > #include > #include > @@ -189,6 +190,9 @@ struct drm_encoder { > */ > struct list_head bridge_chain; > > + /** @bridge_chain_mutex: protect bridge_chain from changes while iterating */ > + struct mutex bridge_chain_mutex; > + > const struct drm_encoder_funcs *funcs; > const struct drm_encoder_helper_funcs *helper_private; > >