* [PATCH RESEND 00/83] drm: Switch drivers to drm_mode_config_create_initial_state
@ 2026-11-05 15:29 Maxime Ripard
2026-11-05 15:29 ` [PATCH RESEND 47/83] drm/sun4i: Switch " Maxime Ripard
0 siblings, 1 reply; 4+ messages in thread
From: Maxime Ripard @ 2026-11-05 15:29 UTC (permalink / raw)
To: David Airlie, Maarten Lankhorst, Simona Vetter, Thomas Zimmermann
Cc: Maxime Ripard, dri-devel, Janne Grunau, Sasha Finkelstein, asahi,
Christian König, Alex Deucher, amd-gfx, Aun-Ali Zaidi,
Liviu Dudau, Russell King, Andrew Jeffery, Joel Stanley,
Dave Airlie, Jocelyn Falempe, Alexandre Belloni, Claudiu Beznea,
Dharma Balasubiramani, Manikandan Muralidharan, Nicolas Ferre,
Alim Akhtar, Inki Dae, Krzysztof Kozlowski, Kyungmin Park,
Peter Griffin, Seung-Woo Kim, linux-samsung-soc, Alison Wang,
Stefan Agner, Ruben Wauters, Tian Tao, Xinwei Kong, Yongbang Shi,
John Stultz, Sumit Semwal, Xinliang Liu, Yongqin Liu, Dexuan Cui,
Long Li, Saurabh Sengar, linux-hyperv, Fabio Estevam, Frank Li,
Liu Ying, Pengutronix Kernel Team, Sascha Hauer, imx,
Laurentiu Palcu, Lucas Stach, Philipp Zabel, Paul Cercueil,
linux-mips, Anitha Chrisanthus, Paul Kocialkowski, Huacai Chen,
Icenowy Zheng, Jianmin Lv, Mingcong Bai, Qianhai Wu, Xi Ruoyao,
Linus Walleij, AngeloGioacchino Del Regno, Chun-Kuang Hu,
Matthias Brugger, Jerome Brunet, Kevin Hilman,
Martin Blumenstingl, linux-amlogic, Abhinav Kumar,
Dmitry Baryshkov, Jessica Zhang, Marijn Suijten, Rob Clark,
Sean Paul, freedreno, linux-arm-msm, Marek Vasut,
Danilo Krummrich, Lyude Paul, nouveau, Tomi Valkeinen,
Gerd Hoffmann, spice-devel, virtualization, Geert Uytterhoeven,
Kieran Bingham, Laurent Pinchart, Magnus Damm, Tomi Valkeinen,
linux-renesas-soc, Biju Das, Heiko Stübner, Sandy Huang,
linux-rockchip, Marcus Folkesson, David Lechner, Iker Pedrosa,
Javier Martinez Canillas, Baolin Wang, Chunyan Zhang, Orson Zhai,
Alain Volmat, Raphael Gallais-Pou, Alexandre Torgue,
Maxime Coquelin, Philippe Cornu, Raphael Gallais-Pou,
Yannick Fertre, Chen-Yu Tsai, Samuel Holland, linux-sunxi,
Jonathan Hunter, Mikko Perttunen, Thierry Reding, linux-tegra,
Jyri Sarha, Alexey Brodkin, Hans de Goede, Kamlesh Gurudasani,
Alex Lanzano, LiangCheng Wang, Maíra Canal, Dave Stevenson,
Raspberry Pi Kernel Maintenance, Chia-I Wu, Dmitry Osipenko,
Gurchetan Singh, Haneen Mohammed, Louis Chauvet, Melissa Wen,
Broadcom internal kernel review list, Zack Rusin,
Oleksandr Andrushchenko, Michal Simek, Aditya Garg, Andy Yan
drm_mode_config_reset() has a dual role: it creates the initial KMS
state at probe time, and resets hardware and software state during
suspend/resume cycles. However, the two roles need different
behaviors, notably for objects like drm_private_obj that must persist
across suspend/resume and are excluded from drm_mode_config_reset()
by design.
Previous series introduced drm_mode_config_create_initial_state() to
handle only the initial state creation at probe time, including
drm_private_obj. Unlike drm_mode_config_reset(), it returns an error
code, allowing drivers to properly handle allocation failures.
This series switches all drivers calling drm_mode_config_reset() at
probe time to drm_mode_config_create_initial_state(). The conversion
was done using a Coccinelle semantic patch.
This is part, and the final piece, of a larger transition to remove the
overloaded reset semantics from the KMS subsystem, following similar
series for planes, CRTCs, connectors, and bridges.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Maxime Ripard (83):
drm/adp: Switch to drm_mode_config_create_initial_state
drm/amdgpu: Switch to drm_mode_config_create_initial_state
drm/appletbdrm: Switch to drm_mode_config_create_initial_state
drm/komeda: Switch to drm_mode_config_create_initial_state
drm/hdlcd: Switch to drm_mode_config_create_initial_state
drm/malidp: Switch to drm_mode_config_create_initial_state
drm/armada: Switch to drm_mode_config_create_initial_state
drm/aspeed: Switch to drm_mode_config_create_initial_state
drm/ast: Switch to drm_mode_config_create_initial_state
drm/atmel-hlcdc: Switch to drm_mode_config_create_initial_state
drm/exynos: Switch to drm_mode_config_create_initial_state
drm/fsl-dcu: Switch to drm_mode_config_create_initial_state
drm/gud: Switch to drm_mode_config_create_initial_state
drm/hisilicon/hibmc: Switch to drm_mode_config_create_initial_state
drm/hisilicon/kirin: Switch to drm_mode_config_create_initial_state
drm/hyperv: Switch to drm_mode_config_create_initial_state
drm/imx/dc: Switch to drm_mode_config_create_initial_state
drm/imx/dcss: Switch to drm_mode_config_create_initial_state
drm/imx/ipuv3: Switch to drm_mode_config_create_initial_state
drm/ingenic: Switch to drm_mode_config_create_initial_state
drm/kmb: Switch to drm_mode_config_create_initial_state
drm/logicvc: Switch to drm_mode_config_create_initial_state
drm/loongson: Switch to drm_mode_config_create_initial_state
drm/mcde: Switch to drm_mode_config_create_initial_state
drm/mediatek: Switch to drm_mode_config_create_initial_state
drm/meson: Switch to drm_mode_config_create_initial_state
drm/mgag200: Switch to drm_mode_config_create_initial_state
drm/msm: Switch to drm_mode_config_create_initial_state
drm/lcdif: Switch to drm_mode_config_create_initial_state
drm/mxsfb: Switch to drm_mode_config_create_initial_state
drm/nouveau: Switch to drm_mode_config_create_initial_state
drm/omap: Switch to drm_mode_config_create_initial_state
drm/pl111: Switch to drm_mode_config_create_initial_state
drm/qxl: Switch to drm_mode_config_create_initial_state
drm/rcar-du: Switch to drm_mode_config_create_initial_state
drm/rz-du: Switch to drm_mode_config_create_initial_state
drm/shmobile: Switch to drm_mode_config_create_initial_state
drm/rockchip: Switch to drm_mode_config_create_initial_state
drm/st7571: Switch to drm_mode_config_create_initial_state
drm/st7586: Switch to drm_mode_config_create_initial_state
drm/st7735r: Switch to drm_mode_config_create_initial_state
drm/st7920: Switch to drm_mode_config_create_initial_state
drm/ssd130x: Switch to drm_mode_config_create_initial_state
drm/sprd: Switch to drm_mode_config_create_initial_state
drm/sti: Switch to drm_mode_config_create_initial_state
drm/stm: Switch to drm_mode_config_create_initial_state
drm/sun4i: Switch to drm_mode_config_create_initial_state
drm/corebootdrm: Switch to drm_mode_config_create_initial_state
drm/efidrm: Switch to drm_mode_config_create_initial_state
drm/ofdrm: Switch to drm_mode_config_create_initial_state
drm/simpledrm: Switch to drm_mode_config_create_initial_state
drm/vesadrm: Switch to drm_mode_config_create_initial_state
drm/tegra: Switch to drm_mode_config_create_initial_state
drm/tests: drm_atomic_state_test: Switch to drm_mode_config_create_initial_state
drm/tests: drm_atomic_test: Switch to drm_mode_config_create_initial_state
drm/tests: drm_bridge_test: Switch to drm_mode_config_create_initial_state
drm/tests: drm_hdmi_state_helper_test: Switch to drm_mode_config_create_initial_state
drm/tidss: Switch to drm_mode_config_create_initial_state
drm/tilcdc: Switch to drm_mode_config_create_initial_state
drm/arcpgu: Switch to drm_mode_config_create_initial_state
drm/bochs: Switch to drm_mode_config_create_initial_state
drm/cirrus-qemu: Switch to drm_mode_config_create_initial_state
drm/gm12u320: Switch to drm_mode_config_create_initial_state
drm/hx8357d: Switch to drm_mode_config_create_initial_state
drm/ili9163: Switch to drm_mode_config_create_initial_state
drm/ili9225: Switch to drm_mode_config_create_initial_state
drm/ili9341: Switch to drm_mode_config_create_initial_state
drm/ili9486: Switch to drm_mode_config_create_initial_state
drm/mi0283qt: Switch to drm_mode_config_create_initial_state
drm/panel-mipi-dbi: Switch to drm_mode_config_create_initial_state
drm/pixpaper: Switch to drm_mode_config_create_initial_state
drm/repaper: Switch to drm_mode_config_create_initial_state
drm/sharp-memory: Switch to drm_mode_config_create_initial_state
drm/tve200: Switch to drm_mode_config_create_initial_state
drm/udl: Switch to drm_mode_config_create_initial_state
drm/vboxvideo: Switch to drm_mode_config_create_initial_state
drm/vc4: Switch to drm_mode_config_create_initial_state
drm/verisilicon: Switch to drm_mode_config_create_initial_state
drm/virtio: Switch to drm_mode_config_create_initial_state
drm/vkms: Switch to drm_mode_config_create_initial_state
drm/vmwgfx: Switch to drm_mode_config_create_initial_state
drm/xen: Switch to drm_mode_config_create_initial_state
drm/xlnx: Switch to drm_mode_config_create_initial_state
drivers/gpu/drm/adp/adp_drv.c | 4 +---
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c | 4 +++-
.../amd/display/amdgpu_dm/tests/amdgpu_dm_connector_test.c | 3 ++-
.../amd/display/amdgpu_dm/tests/amdgpu_dm_mst_types_test.c | 4 +++-
drivers/gpu/drm/arm/display/komeda/komeda_kms.c | 4 +++-
drivers/gpu/drm/arm/hdlcd_drv.c | 4 +++-
drivers/gpu/drm/arm/malidp_drv.c | 4 +++-
drivers/gpu/drm/armada/armada_drv.c | 4 +++-
drivers/gpu/drm/aspeed/aspeed_gfx_drv.c | 4 +---
drivers/gpu/drm/ast/ast_mode.c | 4 +++-
drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_dc.c | 4 +++-
drivers/gpu/drm/exynos/exynos_drm_drv.c | 4 +++-
drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_kms.c | 4 +++-
drivers/gpu/drm/gud/gud_drv.c | 4 +++-
drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 6 ++++--
drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c | 6 ++++--
drivers/gpu/drm/hyperv/hyperv_drm_modeset.c | 4 +---
drivers/gpu/drm/imx/dc/dc-kms.c | 4 +++-
drivers/gpu/drm/imx/dcss/dcss-kms.c | 4 +++-
drivers/gpu/drm/imx/ipuv3/imx-drm-core.c | 4 +++-
drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 4 +++-
drivers/gpu/drm/kmb/kmb_drv.c | 3 +--
drivers/gpu/drm/logicvc/logicvc_mode.c | 4 +++-
drivers/gpu/drm/loongson/lsdc_drv.c | 4 +++-
drivers/gpu/drm/mcde/mcde_drv.c | 4 +++-
drivers/gpu/drm/mediatek/mtk_drm_drv.c | 8 +++++++-
drivers/gpu/drm/meson/meson_drv.c | 4 +++-
drivers/gpu/drm/mgag200/mgag200_g200.c | 4 +++-
drivers/gpu/drm/mgag200/mgag200_g200eh.c | 4 +++-
drivers/gpu/drm/mgag200/mgag200_g200eh3.c | 4 +++-
drivers/gpu/drm/mgag200/mgag200_g200eh5.c | 4 +++-
drivers/gpu/drm/mgag200/mgag200_g200er.c | 4 +++-
drivers/gpu/drm/mgag200/mgag200_g200ev.c | 4 +++-
drivers/gpu/drm/mgag200/mgag200_g200ew3.c | 4 +++-
drivers/gpu/drm/mgag200/mgag200_g200se.c | 4 +++-
drivers/gpu/drm/mgag200/mgag200_g200wb.c | 4 +++-
drivers/gpu/drm/msm/msm_kms.c | 4 +++-
drivers/gpu/drm/mxsfb/lcdif_drv.c | 4 +++-
drivers/gpu/drm/mxsfb/mxsfb_drv.c | 4 +++-
drivers/gpu/drm/nouveau/nouveau_display.c | 4 +++-
drivers/gpu/drm/omapdrm/omap_drv.c | 4 +++-
drivers/gpu/drm/pl111/pl111_drv.c | 4 +++-
drivers/gpu/drm/qxl/qxl_display.c | 3 +--
drivers/gpu/drm/renesas/rcar-du/rcar_du_kms.c | 4 +++-
drivers/gpu/drm/renesas/rz-du/rzg2l_du_kms.c | 4 +++-
drivers/gpu/drm/renesas/shmobile/shmob_drm_kms.c | 4 +++-
drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 4 +++-
drivers/gpu/drm/sitronix/st7571.c | 4 +++-
drivers/gpu/drm/sitronix/st7586.c | 4 +++-
drivers/gpu/drm/sitronix/st7735r.c | 4 +++-
drivers/gpu/drm/sitronix/st7920.c | 4 +---
drivers/gpu/drm/solomon/ssd130x.c | 4 +---
drivers/gpu/drm/sprd/sprd_drm.c | 6 ++++--
drivers/gpu/drm/sti/sti_drv.c | 6 +++++-
drivers/gpu/drm/stm/drv.c | 4 +++-
drivers/gpu/drm/sun4i/sun4i_framebuffer.c | 4 +++-
drivers/gpu/drm/sysfb/corebootdrm.c | 4 +++-
drivers/gpu/drm/sysfb/efidrm.c | 4 +++-
drivers/gpu/drm/sysfb/ofdrm.c | 4 +++-
drivers/gpu/drm/sysfb/simpledrm.c | 4 +++-
drivers/gpu/drm/sysfb/vesadrm.c | 4 +++-
drivers/gpu/drm/tegra/drm.c | 4 +++-
drivers/gpu/drm/tests/drm_atomic_commit_test.c | 4 +++-
drivers/gpu/drm/tests/drm_atomic_test.c | 4 +++-
drivers/gpu/drm/tests/drm_bridge_test.c | 12 +++++++++---
drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c | 4 +++-
drivers/gpu/drm/tidss/tidss_drv.c | 6 +++++-
drivers/gpu/drm/tilcdc/tilcdc_drv.c | 4 +++-
drivers/gpu/drm/tiny/appletbdrm.c | 4 +---
drivers/gpu/drm/tiny/arcpgu.c | 4 +++-
drivers/gpu/drm/tiny/bochs.c | 4 +---
drivers/gpu/drm/tiny/cirrus-qemu.c | 4 +++-
drivers/gpu/drm/tiny/gm12u320.c | 4 +++-
drivers/gpu/drm/tiny/hx8357d.c | 4 +++-
drivers/gpu/drm/tiny/ili9163.c | 4 +++-
drivers/gpu/drm/tiny/ili9225.c | 4 +++-
drivers/gpu/drm/tiny/ili9341.c | 4 +++-
drivers/gpu/drm/tiny/ili9486.c | 4 +++-
drivers/gpu/drm/tiny/mi0283qt.c | 4 +++-
drivers/gpu/drm/tiny/panel-mipi-dbi.c | 4 +++-
drivers/gpu/drm/tiny/pixpaper.c | 4 +++-
drivers/gpu/drm/tiny/repaper.c | 4 +++-
drivers/gpu/drm/tiny/sharp-memory.c | 4 +++-
drivers/gpu/drm/tve200/tve200_drv.c | 4 +++-
drivers/gpu/drm/udl/udl_modeset.c | 4 +++-
drivers/gpu/drm/vboxvideo/vbox_mode.c | 5 ++++-
drivers/gpu/drm/vc4/vc4_kms.c | 4 +++-
drivers/gpu/drm/verisilicon/vs_drm.c | 4 +++-
drivers/gpu/drm/virtio/virtgpu_display.c | 3 +--
drivers/gpu/drm/vkms/vkms_output.c | 4 +---
drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | 4 +++-
drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 4 +---
drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 4 +---
drivers/gpu/drm/xen/xen_drm_front_kms.c | 4 +++-
drivers/gpu/drm/xlnx/zynqmp_kms.c | 6 ++++--
95 files changed, 277 insertions(+), 124 deletions(-)
---
base-commit: d2a8cee91bfa8616f713c7c8f539a81e8e3554ea
change-id: 20260712-drm-no-more-config-reset-1ea89f56693d
Best regards,
-----BEGIN PGP SIGNATURE-----
iJUEABMJAB0WIQTkHFbLp4ejekA/qfgnX84Zoj2+dgUCauyPHAAKCRAnX84Zoj2+
dkwsAX9NFbbJHCN9xg2CeHNoUE2b74hoQ5+vO2GWUoHj4SnPtC+G3wjjcqEZiRKZ
xMEy+OMBgLIpXnrk4sqLj7r+OWFunhZwYsLromcY/UpASSNAT98Hro2QnIUo8S4f
xStpohEISg==
=9Kfg
-----END PGP SIGNATURE-----
--
Maxime Ripard <mripard@kernel.org>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH RESEND 47/83] drm/sun4i: Switch to drm_mode_config_create_initial_state
2026-11-05 15:29 [PATCH RESEND 00/83] drm: Switch drivers to drm_mode_config_create_initial_state Maxime Ripard
@ 2026-11-05 15:29 ` Maxime Ripard
2026-11-05 15:37 ` Chen-Yu Tsai
2026-11-05 20:24 ` sashiko-bot
0 siblings, 2 replies; 4+ messages in thread
From: Maxime Ripard @ 2026-11-05 15:29 UTC (permalink / raw)
To: David Airlie, Maarten Lankhorst, Simona Vetter, Thomas Zimmermann
Cc: Maxime Ripard, dri-devel, Chen-Yu Tsai, Samuel Holland,
linux-sunxi
drm_mode_config_reset() has a dual role: it creates the initial KMS
state at probe time, and resets hardware and software state during
suspend/resume cycles.
Since the two roles need different behaviors (notably for objects like
drm_private_obj that must persist across suspend/resume),
drm_mode_config_create_initial_state() was introduced to handle only
the initial state creation at probe time.
Switch to drm_mode_config_create_initial_state().
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
Cc: Chen-Yu Tsai <wens@kernel.org>
Cc: Samuel Holland <samuel@sholland.org>
Cc: linux-sunxi@lists.linux.dev
---
drivers/gpu/drm/sun4i/sun4i_framebuffer.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/sun4i/sun4i_framebuffer.c b/drivers/gpu/drm/sun4i/sun4i_framebuffer.c
index fc822bc2c62b..0ce3691dedad 100644
--- a/drivers/gpu/drm/sun4i/sun4i_framebuffer.c
+++ b/drivers/gpu/drm/sun4i/sun4i_framebuffer.c
@@ -11,4 +11,5 @@
#include <drm/drm_blend.h>
#include <drm/drm_gem_framebuffer_helper.h>
+#include <drm/drm_print.h>
#include "sun4i_drv.h"
@@ -27,5 +28,6 @@ static const struct drm_mode_config_helper_funcs sun4i_de_mode_config_helpers =
void sun4i_framebuffer_init(struct drm_device *drm)
{
- drm_mode_config_reset(drm);
+ drm_WARN(drm, drm_mode_config_create_initial_state(drm),
+ "Failed to create state\n");
drm->mode_config.max_width = 8192;
--
2.55.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH RESEND 47/83] drm/sun4i: Switch to drm_mode_config_create_initial_state
2026-11-05 15:29 ` [PATCH RESEND 47/83] drm/sun4i: Switch " Maxime Ripard
@ 2026-11-05 15:37 ` Chen-Yu Tsai
2026-11-05 20:24 ` sashiko-bot
1 sibling, 0 replies; 4+ messages in thread
From: Chen-Yu Tsai @ 2026-11-05 15:37 UTC (permalink / raw)
To: Maxime Ripard
Cc: David Airlie, Maarten Lankhorst, Simona Vetter, Thomas Zimmermann,
dri-devel, Samuel Holland, linux-sunxi
On Thu, Nov 5, 2026 at 11:33 PM Maxime Ripard <mripard@kernel.org> wrote:
>
> drm_mode_config_reset() has a dual role: it creates the initial KMS
> state at probe time, and resets hardware and software state during
> suspend/resume cycles.
>
> Since the two roles need different behaviors (notably for objects like
> drm_private_obj that must persist across suspend/resume),
> drm_mode_config_create_initial_state() was introduced to handle only
> the initial state creation at probe time.
>
> Switch to drm_mode_config_create_initial_state().
>
> Signed-off-by: Maxime Ripard <mripard@kernel.org>
Acked-by: Chen-Yu Tsai <wens@kernel.org>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH RESEND 47/83] drm/sun4i: Switch to drm_mode_config_create_initial_state
2026-11-05 15:29 ` [PATCH RESEND 47/83] drm/sun4i: Switch " Maxime Ripard
2026-11-05 15:37 ` Chen-Yu Tsai
@ 2026-11-05 20:24 ` sashiko-bot
1 sibling, 0 replies; 4+ messages in thread
From: sashiko-bot @ 2026-11-05 20:24 UTC (permalink / raw)
To: Maxime Ripard; +Cc: dri-devel, linux-sunxi
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] drm/sun4i: sun4i_framebuffer_init() ignores state creation failure
--
commit 9bfddf90d8dccabe2d26ebb9b512f7adbc95c198
Author: Maxime Ripard <mripard@kernel.org>
drm/sun4i: Switch to drm_mode_config_create_initial_state
This commit replaces the probe-time drm_mode_config_reset() call in
sun4i_framebuffer_init() with drm_mode_config_create_initial_state() to
create the initial KMS state.
> diff --git a/drivers/gpu/drm/sun4i/sun4i_framebuffer.c b/drivers/gpu/drm/sun4i/sun4i_framebuffer.c
> index fc822bc2c62b5..0ce3691dedade 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_framebuffer.c
> +++ b/drivers/gpu/drm/sun4i/sun4i_framebuffer.c
> @@ -10,6 +10,7 @@
> #include <drm/drm_atomic_helper.h>
> #include <drm/drm_blend.h>
> #include <drm/drm_gem_framebuffer_helper.h>
> +#include <drm/drm_print.h>
>
> #include "sun4i_drv.h"
> #include "sun4i_framebuffer.h"
> @@ -26,7 +27,8 @@ static const struct drm_mode_config_helper_funcs sun4i_de_mode_config_helpers =
>
> void sun4i_framebuffer_init(struct drm_device *drm)
> {
> - drm_mode_config_reset(drm);
> + drm_WARN(drm, drm_mode_config_create_initial_state(drm),
> + "Failed to create state\n");
[Severity: High]
Should sun4i_framebuffer_init() return an int and propagate errors from
drm_mode_config_create_initial_state(drm) back to sun4i_drv_bind()?
When drm_mode_config_create_initial_state(drm) fails to allocate state for a
private object, colorop, plane, CRTC, or connector, it returns early with a
negative errno, leaving that object and all subsequent KMS objects with a
NULL state pointer.
Because sun4i_framebuffer_init() only warns and returns void, its caller
sun4i_drv_bind() in drivers/gpu/drm/sun4i/sun4i_drv.c continues execution:
sun4i_framebuffer_init(drm);
/* Enable connectors polling */
drm_kms_helper_poll_init(drm);
ret = drm_dev_register(drm, 0);
if (ret)
goto finish_poll;
drm_client_setup(drm, NULL);
When drm_client_setup(), a userspace atomic commit, or
drm_atomic_helper_shutdown() duplicates plane state via
sun4i_backend_layer_duplicate_state() in drivers/gpu/drm/sun4i/sun4i_layer.c,
plane->state is dereferenced without a NULL check:
struct sun4i_layer_state *orig = state_to_sun4i_layer_state(plane->state);
struct sun4i_layer_state *copy;
copy = kzalloc_obj(*copy);
if (!copy)
return NULL;
__drm_atomic_helper_plane_duplicate_state(plane, ©->state);
copy->uses_frontend = orig->uses_frontend;
Could this cause a NULL pointer dereference in
__drm_atomic_helper_plane_duplicate_state(), orig->uses_frontend, or during
userspace property queries via drm_atomic_get_property() if
sun4i_drv_bind() does not abort and jump to unbind_all on state creation
failure?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261105-drm-no-more-config-reset-v1-0-1f58d1e33380@kernel.org?part=47
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-11-05 20:24 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-05 15:29 [PATCH RESEND 00/83] drm: Switch drivers to drm_mode_config_create_initial_state Maxime Ripard
2026-11-05 15:29 ` [PATCH RESEND 47/83] drm/sun4i: Switch " Maxime Ripard
2026-11-05 15:37 ` Chen-Yu Tsai
2026-11-05 20:24 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox