From: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
To: Rob Clark <robin.clark@oss.qualcomm.com>,
Dmitry Baryshkov <lumag@kernel.org>,
Abhinav Kumar <abhinav.kumar@linux.dev>,
Jessica Zhang <jesszhan0024@gmail.com>,
Sean Paul <sean@poorly.run>,
Marijn Suijten <marijn.suijten@somainline.org>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>
Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org,
freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: [PATCH v3 11/14] drm/msm/dpu: clean up the self-refresh helpers on teardown
Date: Sat, 24 Oct 2026 02:19:44 +0300 [thread overview]
Message-ID: <20261024-msm-kms-destroy-fixes-v3-11-66a30120a5ea@oss.qualcomm.com> (raw)
In-Reply-To: <20261024-msm-kms-destroy-fixes-v3-0-66a30120a5ea@oss.qualcomm.com>
Unbinding the display driver on MSM8996 with DPU oopses about a second
later:
Unable to handle kernel NULL pointer dereference at virtual address 0000000000000870
pc : drm_atomic_commit_alloc+0x10/0x9c
lr : drm_self_refresh_helper_entry_work+0x5c/0x1dc
dpu_crtc_init() sets up the self-refresh helper for each CRTC, but
nothing ever calls drm_self_refresh_helper_cleanup(). Every modeset
commit, including the one which shuts the display down on unbind, queues
the delayed entry work of the helper, which then runs after the CRTC
and the DRM device have been freed, and its data is leaked.
Clean the helpers up when tearing down the DPU hardware, which cancels
the pending work while the KMS is still intact. Doing it from a managed
action instead would not be enough: the DRM device, and its managed
resources with it, outlives the unbind as long as userspace holds it
open.
Fixes: 1122697810e5 ("drm/msm/disp/dpu: add PSR support for eDP interface in dpu driver")
Assisted-by: LLM
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
---
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
index 65ba8fa697e9..934ba47b2dae 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
@@ -17,6 +17,7 @@
#include <drm/drm_crtc.h>
#include <drm/drm_file.h>
#include <drm/drm_framebuffer.h>
+#include <drm/drm_self_refresh_helper.h>
#include <drm/drm_vblank.h>
#include <drm/drm_writeback.h>
@@ -885,8 +886,18 @@ static int _dpu_kms_drm_obj_init(struct dpu_kms *dpu_kms)
return 0;
}
+static void dpu_kms_self_refresh_cleanup(struct dpu_kms *dpu_kms)
+{
+ struct drm_crtc *crtc;
+
+ drm_for_each_crtc(crtc, dpu_kms->dev)
+ drm_self_refresh_helper_cleanup(crtc);
+}
+
static void _dpu_kms_hw_destroy(struct dpu_kms *dpu_kms)
{
+ dpu_kms_self_refresh_cleanup(dpu_kms);
+
dpu_kms->hw_intr = NULL;
/* safe to call these more than once during shutdown */
--
2.47.3
next prev parent reply other threads:[~2026-10-23 23:20 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-23 23:19 [PATCH v3 00/14] drm/msm: fix the error handling of the KMS init Dmitry Baryshkov
2026-10-23 23:19 ` [PATCH v3 01/14] drm/msm: fail the snapshot init when its worker cannot be created Dmitry Baryshkov
2026-10-26 9:21 ` Konrad Dybcio
2026-10-23 23:19 ` [PATCH v3 02/14] drm/msm/mdp5: forget the hardware blocks of a previous bind Dmitry Baryshkov
2026-10-26 9:22 ` Konrad Dybcio
2026-10-23 23:19 ` [PATCH v3 03/14] drm/msm: unwind msm_drm_kms_init() on failure Dmitry Baryshkov
2026-10-26 9:26 ` Konrad Dybcio
2026-10-23 23:19 ` [PATCH v3 04/14] drm/msm: order the display snapshot sources around its worker Dmitry Baryshkov
2026-10-23 23:19 ` [PATCH v3 05/14] drm/msm: clean up after a failed msm_kms_init() Dmitry Baryshkov
2026-10-26 9:30 ` Konrad Dybcio
2026-10-23 23:19 ` [PATCH v3 06/14] drm/msm: let the kms drivers clean up a failed kms_init() Dmitry Baryshkov
2026-10-26 9:33 ` Konrad Dybcio
2026-10-23 23:19 ` [PATCH v3 07/14] drm/msm/mdp5: unwind a failed mdp5_kms_init() Dmitry Baryshkov
2026-10-26 9:39 ` Konrad Dybcio
2026-10-23 23:19 ` [PATCH v3 08/14] drm/msm/mdp4: unwind a failed mdp4_kms_init() Dmitry Baryshkov
2026-10-26 9:40 ` Konrad Dybcio
2026-10-23 23:19 ` [PATCH v3 09/14] drm/msm/dpu: don't tear down a failed hw_init twice Dmitry Baryshkov
2026-10-26 9:41 ` Konrad Dybcio
2026-10-23 23:19 ` [PATCH v3 10/14] drm/msm: tear down only a successfully initialised KMS Dmitry Baryshkov
2026-10-26 9:42 ` Konrad Dybcio
2026-10-23 23:19 ` Dmitry Baryshkov [this message]
2026-10-26 9:42 ` [PATCH v3 11/14] drm/msm/dpu: clean up the self-refresh helpers on teardown Konrad Dybcio
2026-10-23 23:19 ` [PATCH v3 12/14] drm/msm/dpu: unwind a failed dpu_kms_hw_init() step by step Dmitry Baryshkov
2026-10-26 9:44 ` Konrad Dybcio
2026-10-23 23:19 ` [PATCH v3 13/14] drm/msm/mdp4: disable the vdd regulator on teardown Dmitry Baryshkov
2026-10-26 9:44 ` Konrad Dybcio
2026-10-23 23:19 ` [PATCH v3 14/14] drm/msm: drop the runtime PM flags from the KMS teardown Dmitry Baryshkov
2026-10-26 9:45 ` Konrad Dybcio
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261024-msm-kms-destroy-fixes-v3-11-66a30120a5ea@oss.qualcomm.com \
--to=dmitry.baryshkov@oss.qualcomm.com \
--cc=abhinav.kumar@linux.dev \
--cc=airlied@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=freedreno@lists.freedesktop.org \
--cc=jesszhan0024@gmail.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lumag@kernel.org \
--cc=marijn.suijten@somainline.org \
--cc=robin.clark@oss.qualcomm.com \
--cc=sean@poorly.run \
--cc=simona@ffwll.ch \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®