FAILED: patch "[PATCH] drm/ingenic: Register devm action to cleanup encoders" failed to apply to 5.12-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 5.12-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From e488b1023a4a4eab15b905871cf8e81f00336ed7 Mon Sep 17 00:00:00 2001
From: Paul Cercueil <[email protected]>
Date: Sat, 27 Mar 2021 11:57:42 +0000
Subject: [PATCH] drm/ingenic: Register devm action to cleanup encoders
Since the encoders have been devm-allocated, they will be freed way before drm_mode_config_cleanup() is called. To avoid use-after-free conditions, we then must ensure that drm_encoder_cleanup() is called before the encoders are freed.
v2: Use the new __drmm_simple_encoder_alloc() function
v3: Use the new drmm_plain_simple_encoder_alloc() macro
v4: Use drmm_plain_encoder_alloc() macro
drivers/gpu/drm/ingenic/ingenic-drm-drv.c +7 -10
@@ -24,6 +24,7 @@#include <drm/drm_crtc.h> #include <drm/drm_crtc_helper.h> #include <drm/drm_drv.h> +#include <drm/drm_encoder.h> #include <drm/drm_gem_cma_helper.h> #include <drm/drm_fb_cma_helper.h> #include <drm/drm_fb_helper.h>
@@ -37,7 +38,6 @@#include <drm/drm_plane.h> #include <drm/drm_plane_helper.h> #include <drm/drm_probe_helper.h> -#include <drm/drm_simple_kms_helper.h> #include <drm/drm_vblank.h> struct ingenic_dma_hwdesc {
@@ -1024,20 +1024,17 @@ static int ingenic_drm_bind(struct device *dev, bool has_components) bridge =devm_drm_panel_bridge_add_typed (dev, panel,DRM_MODE_CONNECTOR_DPI ); - encoder =devm_kzalloc (dev,sizeof (*encoder),GFP_KERNEL ); -if (!encoder) -return -ENOMEM ; + encoder =drmm_plain_encoder_alloc (drm,NULL ,DRM_MODE_ENCODER_DPI ,NULL ); +if (IS_ERR (encoder)) { + ret =PTR_ERR (encoder); +dev_err (dev,"Failed to init encoder: %d\n" , ret); +return ret; + } encoder->possible_crtcs =1 ;drm_encoder_helper_add (encoder, &ingenic_drm_encoder_helper_funcs); - ret =drm_simple_encoder_init (drm, encoder,DRM_MODE_ENCODER_DPI ); -if (ret) { -dev_err (dev,"Failed to init encoder: %d\n" , ret); -return ret; - } - ret =drm_bridge_attach (encoder, bridge,NULL ,0 );if (ret) {dev_err (dev,"Unable to attach bridge\n" );