FAILED: patch "[PATCH] drm/amdgpu: fix rmmio iounmap skipped on device removal" failed to apply to 6.6-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 6.6-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-6.6.y
git checkout FETCH_HEAD
git cherry-pick -x 5155002b03b24ba3ef91c5c313b8cf0171b24904
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026092242-mantis-dragonfly-bdca@gregkh' --subject-prefix 'PATCH 6.6.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 5155002b03b24ba3ef91c5c313b8cf0171b24904 Mon Sep 17 00:00:00 2001
From: Chengjun Yao <[email protected]>
Date: Tue, 8 Sep 2026 10:15:43 +0800
Subject: [PATCH] drm/amdgpu: fix rmmio iounmap skipped on device removal
amdgpu_pci_remove() calls drm_dev_unplug() before fini_sw(), so drm_dev_enter() is already false there and the iounmap() guarded by it is skipped. This .remove path runs on both hot-unplug and plain rmmod, so the register BAR ioremap mapping leaks one instance per unload.
Unmap rmmio unconditionally (guard only on non-NULL) and drop the now unused idx.
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +2 -4
@@ -4335,7 +4335,7 @@ void amdgpu_device_fini_hw(struct amdgpu_device *adev)void amdgpu_device_fini_sw (struct amdgpu_device *adev) { -int i, idx; +int i;bool px;amdgpu_device_ip_fini (adev);
@@ -4377,11 +4377,9 @@ void amdgpu_device_fini_sw(struct amdgpu_device *adev)if ((adev->pdev->class >>8 ) ==PCI_CLASS_DISPLAY_VGA )vga_client_unregister (adev->pdev); -if (drm_dev_enter (adev_to_drm (adev), &idx)) { - +if (adev->rmmio) {iounmap (adev->rmmio); adev->rmmio =NULL ; -drm_dev_exit (idx); }if (IS_ENABLED (CONFIG_PERF_EVENTS ))
Sasha Levin
maintainerPATCH 1/3 drm/amdgpu: set the VM pointer to NULL in amdgpu_job_prepare
From: Christian König <[email protected]>
[ Upstream commit 26c95e838e6301b0230430ec2fadeabfcb07aeda ]
As soon as the prepare phase is completed the VM might be released, better set it to NULL.
Stable-dep-of: 5155002b03b2 ("drm/amdgpu: fix rmmio iounmap skipped on device removal")
--- drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/gpu/drm/amd/amdgpu/amdgpu_job.c +7 -0
@@ -271,6 +271,13 @@ amdgpu_job_prepare_job(struct drm_sched_job *sched_job,DRM_ERROR ("Error getting VM ID (%d)\n" , r); goto error; } +/* +* The VM structure might be released after the VMID is +* assigned, we had multiple problems with people trying to use +* the VM pointer so better set it to NULL. +*/ +if (!fence) + job->vm =NULL ; }return fence;
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/3 drm/amdgpu: fix warning of drm_mm_clean
From: ZhenGuo Yin <[email protected]>
[ Upstream commit e7afa85a0d0eba5bf2c0a446ff622ebdbc9812d6 ]
Kernel doorbell BOs needs to be freed before ttm_fini.
Stable backport adaptation:
The 6.6 tree already allocates kernel doorbell BOs, but has no seq64 teardown. Move the existing doorbell cleanup immediately after the IB pool cleanup and before the GMC sw_fini callback tears down TTM.
Prepare the local declaration for target 5155002b03b24ba3ef91c5c313b8cf0171b24904, which removes idx from "int i, idx". Use i for the existing switcheroo unregistration predicate so it remains used before and after that patch, without changing the decision or adding any functions.
Stable-dep-of: 5155002b03b2 ("drm/amdgpu: fix rmmio iounmap skipped on device removal")
--- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +4 -3
@@ -2930,6 +2930,7 @@ static int amdgpu_device_ip_fini(struct amdgpu_device *adev)amdgpu_device_wb_fini (adev);amdgpu_device_mem_scratch_fini (adev);amdgpu_ib_pool_fini (adev); +amdgpu_doorbell_fini (adev); } r = adev->ip_blocks[i].version->funcs->sw_fini ((void *)adev);
@@ -4146,7 +4147,7 @@ void amdgpu_device_fini_hw(struct amdgpu_device *adev)void amdgpu_device_fini_sw (struct amdgpu_device *adev) { -int idx; +int i, idx;bool px;amdgpu_device_ip_fini (adev);
@@ -4169,7 +4170,8 @@ void amdgpu_device_fini_sw(struct amdgpu_device *adev) px =amdgpu_device_supports_px (adev_to_drm (adev)); -if (amdgpu_device_should_register_switcheroo (adev, px)) + i =amdgpu_device_should_register_switcheroo (adev, px); +if (i)vga_switcheroo_unregister_client (adev->pdev);if (px)
@@ -4182,7 +4184,6 @@ void amdgpu_device_fini_sw(struct amdgpu_device *adev)iounmap (adev->rmmio); adev->rmmio =NULL ; -amdgpu_doorbell_fini (adev);drm_dev_exit (idx); }
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 3/3 drm/amdgpu: fix rmmio iounmap skipped on device removal
In reply to Sasha LevinFrom: Chengjun Yao <[email protected]>
[ Upstream commit 5155002b03b24ba3ef91c5c313b8cf0171b24904 ]
amdgpu_pci_remove() calls drm_dev_unplug() before fini_sw(), so drm_dev_enter() is already false there and the iounmap() guarded by it is skipped. This .remove path runs on both hot-unplug and plain rmmod, so the register BAR ioremap mapping leaks one instance per unload.
Unmap rmmio unconditionally (guard only on non-NULL) and drop the now unused idx.
--- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +2 -4
@@ -4147,7 +4147,7 @@ void amdgpu_device_fini_hw(struct amdgpu_device *adev)void amdgpu_device_fini_sw (struct amdgpu_device *adev) { -int i, idx; +int i;bool px;amdgpu_device_ip_fini (adev);
@@ -4180,11 +4180,9 @@ void amdgpu_device_fini_sw(struct amdgpu_device *adev)if ((adev->pdev->class >>8 ) ==PCI_CLASS_DISPLAY_VGA )vga_client_unregister (adev->pdev); -if (drm_dev_enter (adev_to_drm (adev), &idx)) { - +if (adev->rmmio) {iounmap (adev->rmmio); adev->rmmio =NULL ; -drm_dev_exit (idx); }if (IS_ENABLED (CONFIG_PERF_EVENTS ))
Signature · 1 line
2.53.0