| Message ID | 20260424-drm-mode-config-init-v3-17-8b68d9db0d8b@kernel.org (mailing list archive) |
|---|---|
| State | New |
| Headers |
Return-Path: <linux-sunxi+bounces-22953-sunxi=pue.re@lists.linux.dev> X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from sin.lore.kernel.org (sin.lore.kernel.org [104.64.211.4]) by mxe881.netcup.net (Postfix) with ESMTPS id 01A501C0067 for <noreply@patchwork.local>; Fri, 24 Apr 2026 12:23:41 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=kernel.org; spf=pass (sender IP is 104.64.211.4) smtp.mailfrom=linux-sunxi+bounces-22953-noreply=patchwork.local@lists.linux.dev smtp.helo=sin.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 104.64.211.4 as permitted sender) client-ip=104.64.211.4; envelope-from=linux-sunxi+bounces-22953-noreply=patchwork.local@lists.linux.dev; helo=sin.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by sin.lore.kernel.org (Postfix) with ESMTP id 0984A301DE73 for <noreply@patchwork.local>; Fri, 24 Apr 2026 10:20:26 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B695837C929; Fri, 24 Apr 2026 10:19:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="CzeJKGyL" X-Original-To: linux-sunxi@lists.linux.dev 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 91C0F37B3F4; Fri, 24 Apr 2026 10:19:49 +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=1777025989; cv=none; b=XMTGSM0OCw+iNVBrbhTdckLdHINDgOOlD98n4rGjEnN5T559vwM2yqjorF8mrs7gH00JswXIErsSf9RXANzJlPZAdavitMo2+2UtCmmRvbEBR/q1YqyQd/93EI6SJPl26jDB+xoTH2zFd9SPJdeqvATStCk48aquDMC0DM2Wqus= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777025989; c=relaxed/simple; bh=r8iCVvbjhwlTQWPJs/wShGMSU9DSc+CbT8to6voKBbo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JXk8q+dKqE2eaDo8O4sVVo/KelaZl5yLszxdVYCBx+LxniKwoqUBWEOegKT1ibtbedvPlaBpqVKmB3xHO1bOd53UdhyXYnjdhu86MwRsUURuWnKFe+QyBsEMUsHMMqaUgE2MzCOEvelIaMu7IaZ55DYfEFrYBzfyKgREJgpM9VA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CzeJKGyL; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 99B2FC2BCB5; Fri, 24 Apr 2026 10:19:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1777025989; bh=r8iCVvbjhwlTQWPJs/wShGMSU9DSc+CbT8to6voKBbo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=CzeJKGyLvp3ygJdwmcdqShuI9sq2JW8uAHYHgS2qnM36/R5O71KrPv/Kp9E2PJat1 7bKI/AxkZ4pyeoLV3aLNducPlSArv3WUTBDLZEuNw/7D01pZzvYJlF6ZarCsBpniAa KwkJx5lMFgWOtf6n5ZsXPgWLOeR6lByqp5ajN17ZeO8h7s4vNaMO4uqb18AMQKOCl9 55OxcjT/iMNfk0d/OV235Q2CWjo7l13gJO3vmeC4++c9KXaW0ZmKc9W6y5qhrWF37K DafKiNIN5VU9fUoUhYymxmt3R4X6biPL1vjaMGkqXtnBTPoi5gmw7ekGGjsiYRMEfT 3jNi4UOg4EHSg== From: Maxime Ripard <mripard@kernel.org> Date: Fri, 24 Apr 2026 12:18:57 +0200 Subject: [PATCH v3 17/20] drm/drv: Switch skeleton to drm_mode_config_create_initial_state() Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: <linux-sunxi.lists.linux.dev> List-Subscribe: <mailto:linux-sunxi+subscribe@lists.linux.dev> List-Unsubscribe: <mailto:linux-sunxi+unsubscribe@lists.linux.dev> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260424-drm-mode-config-init-v3-17-8b68d9db0d8b@kernel.org> References: <20260424-drm-mode-config-init-v3-0-8b68d9db0d8b@kernel.org> In-Reply-To: <20260424-drm-mode-config-init-v3-0-8b68d9db0d8b@kernel.org> To: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>, Thomas Zimmermann <tzimmermann@suse.de>, David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>, Jonathan Corbet <corbet@lwn.net>, Shuah Khan <skhan@linuxfoundation.org>, Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>, Jyri Sarha <jyri.sarha@iki.fi>, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>, Andrzej Hajda <andrzej.hajda@intel.com>, Neil Armstrong <neil.armstrong@linaro.org>, Robert Foss <rfoss@kernel.org>, Laurent Pinchart <Laurent.pinchart@ideasonboard.com>, Jonas Karlman <jonas@kwiboo.se>, Jernej Skrabec <jernej.skrabec@gmail.com>, Simon Ser <contact@emersion.fr>, Harry Wentland <harry.wentland@amd.com>, Melissa Wen <mwen@igalia.com>, Sebastian Wick <sebastian.wick@redhat.com>, Alex Hung <alex.hung@amd.com>, Jani Nikula <jani.nikula@linux.intel.com>, Rodrigo Vivi <rodrigo.vivi@intel.com>, Joonas Lahtinen <joonas.lahtinen@linux.intel.com>, Tvrtko Ursulin <tursulin@ursulin.net>, Chen-Yu Tsai <wens@kernel.org>, Samuel Holland <samuel@sholland.org>, Dave Stevenson <dave.stevenson@raspberrypi.com>, =?utf-8?q?Ma=C3=ADra_Canal?= <mcanal@igalia.com>, Raspberry Pi Kernel Maintenance <kernel-list@raspberrypi.com> Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Stone <daniels@collabora.com>, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, Maxime Ripard <mripard@kernel.org> X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=997; i=mripard@kernel.org; h=from:subject:message-id; bh=r8iCVvbjhwlTQWPJs/wShGMSU9DSc+CbT8to6voKBbo=; b=owGbwMvMwCmsHn9OcpHtvjLG02pJDJmvnSeknyrNYUr5c2HnJdlZ7CEKcZPOMrq8v5mStf2Nw aYfy2v3dUxlYRDmZJAVU2R5IhN2enn74ioH+5U/YOawMoEMYeDiFICJeMcy1vB992561CWyULg1 +/Hr2wnrjVKjVXvMi88VONy8KeeyeUfK1bAfbMtTDivFPKhaWtgpzljNNif92JaKfAnpk/kXJ8x KFGaKbozo3fmxxOD3addsnWNParbLzH+xpsWu0nB/XtRWBQUA X-Developer-Key: i=mripard@kernel.org; a=openpgp; fpr=BE5675C37E818C8B5764241C254BCFC56BF6CE8D X-MORS-Enabled: yes X-MORS-DOMAIN: patchwork.local X-MORS-HOSTING: hosting172546 X-MORS-USER: hosting172546 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= |
| Series |
drm/atomic: Rework initial state allocation
|
|
Commit Message
Maxime Ripard
April 24, 2026, 10:18 a.m. UTC
The driver skeleton currently recommends calling
drm_mode_config_reset() at probe time to create the initial state.
Now that drm_mode_config_create_initial_state() exists to handle
initial state allocation without hardware side effects, update the
skeleton to recommend it instead.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/drm_drv.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
Comments
On Fri, Apr 24, 2026 at 12:18:57PM +0200, Maxime Ripard wrote: > The driver skeleton currently recommends calling > drm_mode_config_reset() at probe time to create the initial state. > > Now that drm_mode_config_create_initial_state() exists to handle > initial state allocation without hardware side effects, update the > skeleton to recommend it instead. > > Signed-off-by: Maxime Ripard <mripard@kernel.org> > --- > drivers/gpu/drm/drm_drv.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c > index 985c283cf59f..f537556b06a8 100644 > --- a/drivers/gpu/drm/drm_drv.c > +++ b/drivers/gpu/drm/drm_drv.c > @@ -340,11 +340,13 @@ void drm_minor_release(struct drm_minor *minor) > * > * // Further setup, display pipeline etc > * > * platform_set_drvdata(pdev, drm); > * > - * drm_mode_config_reset(drm); > + * ret = drm_mode_config_create_initial_state(drm); > + * if (ret) > + * return ret; There's one point I'm still not sure to understand properly. The skeleton example (and the tidss driver, which you convert to the new API in this series) both call drm_mode_config_helper_resume(). This in turn calls drm_atomic_helper_resume(), and drm_mode_config_reset(). For drivers that implement .atomic_create_state() instead of .reset() (such as tidss, after its conversion in this series), drm_mode_config_reset() will call the drm_mode_config_*_create_state() helpers, which allocate and initialize a new state (through .atomic_create_state()), and store that new state in the object's ->state field. Won't this leak the state previously stored there ? > * > * ret = drm_dev_register(drm); > * if (ret) > * return ret; > *
On Mon, May 04, 2026 at 09:02:16PM +0300, Laurent Pinchart wrote: > On Fri, Apr 24, 2026 at 12:18:57PM +0200, Maxime Ripard wrote: > > The driver skeleton currently recommends calling > > drm_mode_config_reset() at probe time to create the initial state. > > > > Now that drm_mode_config_create_initial_state() exists to handle > > initial state allocation without hardware side effects, update the > > skeleton to recommend it instead. > > > > Signed-off-by: Maxime Ripard <mripard@kernel.org> > > --- > > drivers/gpu/drm/drm_drv.c | 4 +++- > > 1 file changed, 3 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c > > index 985c283cf59f..f537556b06a8 100644 > > --- a/drivers/gpu/drm/drm_drv.c > > +++ b/drivers/gpu/drm/drm_drv.c > > @@ -340,11 +340,13 @@ void drm_minor_release(struct drm_minor *minor) > > * > > * // Further setup, display pipeline etc > > * > > * platform_set_drvdata(pdev, drm); > > * > > - * drm_mode_config_reset(drm); > > + * ret = drm_mode_config_create_initial_state(drm); > > + * if (ret) > > + * return ret; > > There's one point I'm still not sure to understand properly. The > skeleton example (and the tidss driver, which you convert to the new API > in this series) both call drm_mode_config_helper_resume(). This in turn > calls drm_atomic_helper_resume(), and drm_mode_config_reset(). For > drivers that implement .atomic_create_state() instead of .reset() (such > as tidss, after its conversion in this series), drm_mode_config_reset() > will call the drm_mode_config_*_create_state() helpers, which allocate > and initialize a new state (through .atomic_create_state()), and store > that new state in the object's ->state field. Won't this leak the state > previously stored there ? Thanks for spotting this, you're totally right! I'll fix it in the next version Maxime
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index 985c283cf59f..f537556b06a8 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c @@ -340,11 +340,13 @@ void drm_minor_release(struct drm_minor *minor) * * // Further setup, display pipeline etc * * platform_set_drvdata(pdev, drm); * - * drm_mode_config_reset(drm); + * ret = drm_mode_config_create_initial_state(drm); + * if (ret) + * return ret; * * ret = drm_dev_register(drm); * if (ret) * return ret; *