FAILED: patch "[PATCH] drm/amd/display: check dc_state_create_copy() for NULL in" failed to apply to 5.15-stable tree
[email protected]
maintainerThe patch below does not apply to the 5.15-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]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x 015e72cde567d2450e282c2790773463156b2d0a
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026100558-hardness-compare-fb18@gregkh' --subject-prefix 'PATCH 5.15.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 015e72cde567d2450e282c2790773463156b2d0a Mon Sep 17 00:00:00 2001
From: Jiangshan Yi <[email protected]>
Date: Fri, 4 Sep 2026 17:18:17 +0800
Subject: [PATCH] drm/amd/display: check dc_state_create_copy() for NULL in
dm_suspend
dc_state_create_copy() can return NULL on allocation failure. dm_suspend() only conditionally skips dm_gpureset_toggle_interrupts() and continues execution, returning success. dm_resume() then dereferences the NULL cached_dc_state in link_enc_cfg_copy() and the following dc_state->stream_count loop, crashing during GPU reset recovery.
Return -ENOMEM immediately if the copy fails, so the caller aborts suspend instead of leaving a NULL cached state for resume.
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +7 -2
@@ -1582,9 +1582,14 @@ static int dm_suspend(struct amdgpu_ip_block *ip_block)dc_allow_idle_optimizations (adev->dm.dc, false); dm->cached_dc_state =dc_state_create_copy (dm->dc->current_state); +if (!dm->cached_dc_state) { +drm_err (adev_to_drm (adev), +"Failed to allocate cached DC state during suspend\n" ); +mutex_unlock (&dm->dc_lock); +return -ENOMEM ; + } -if (dm->cached_dc_state) -dm_gpureset_toggle_interrupts (adev, dm->cached_dc_state, false); +dm_gpureset_toggle_interrupts (adev, dm->cached_dc_state, false); res =amdgpu_dm_commit_zero_streams (dm->dc);if (res !=DC_OK ) {
Sasha Levin
maintainerPATCH 1/1 drm/amd/display: check dc_state_create_copy() for NULL in dm_suspend
From: Jiangshan Yi <[email protected]>
[ Upstream commit 015e72cde567d2450e282c2790773463156b2d0a ]
dc_state_create_copy() can return NULL on allocation failure. dm_suspend() only conditionally skips dm_gpureset_toggle_interrupts() and continues execution, returning success. dm_resume() then dereferences the NULL cached_dc_state in link_enc_cfg_copy() and the following dc_state->stream_count loop, crashing during GPU reset recovery.
Return -ENOMEM immediately if the copy fails, so the caller aborts suspend instead of leaving a NULL cached state for resume.
--- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +7 -2
@@ -2440,9 +2440,14 @@ static int dm_suspend(void *handle)#endif dm->cached_dc_state =dc_copy_state (dm->dc->current_state); +if (!dm->cached_dc_state) { +drm_err (adev_to_drm (adev), +"Failed to allocate cached DC state during suspend\n" ); +mutex_unlock (&dm->dc_lock); +return -ENOMEM ; + } -if (dm->cached_dc_state) -dm_gpureset_toggle_interrupts (adev, dm->cached_dc_state, false); +dm_gpureset_toggle_interrupts (adev, dm->cached_dc_state, false);amdgpu_dm_commit_zero_streams (dm->dc);
Signature · 1 line
2.53.0