FAILED: patch "[PATCH] drm/amdgpu: fix autosuspend cleanup during removal" failed to apply to 5.10-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.10-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.10.y
git checkout FETCH_HEAD
git cherry-pick -x ef5fcf2a6c320676bf8be2dadac93d9023b468b7
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026090919-washstand-timothy-3b64@gregkh' --subject-prefix 'PATCH 5.10.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From ef5fcf2a6c320676bf8be2dadac93d9023b468b7 Mon Sep 17 00:00:00 2001
From: Guangshuo Li <[email protected]>
Date: Sat, 8 Aug 2026 20:09:34 +0800
Subject: [PATCH] drm/amdgpu: fix autosuspend cleanup during removal
amdgpu_pci_probe() calls pm_runtime_use_autosuspend(), but amdgpu_pci_remove() does not call the matching pm_runtime_dont_use_autosuspend().
If the autosuspend delay is set to a negative value while autosuspend is enabled, the runtime PM core increments usage_count to prevent runtime suspend. Without calling pm_runtime_dont_use_autosuspend() during teardown, this reference is not dropped and usage_count remains unbalanced.
The documentation for pm_runtime_use_autosuspend() also notes that it is important to undo it with pm_runtime_dont_use_autosuspend() at driver exit time, unless runtime PM was initially enabled with devm_pm_runtime_enable().
Add the missing pm_runtime_dont_use_autosuspend() call to the remove path.
This issue was found by manual code inspection.
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +1 -0
@@ -2557,6 +2557,7 @@ amdgpu_pci_remove(struct pci_dev *pdev)if (adev->pm.rpm_mode !=AMDGPU_RUNPM_NONE ) {pm_runtime_get_sync (dev->dev);pm_runtime_forbid (dev->dev); +pm_runtime_dont_use_autosuspend (dev->dev); }amdgpu_driver_unload_kms (dev);
Sasha Levin
maintainerPATCH 1/3 drm/amdgpu: make audio dev's D-state transition PMFW-aware
From: Evan Quan <[email protected]>
[ Upstream commit 415e51bdcfa0e724172f66ce12d8ef7819fdd1c7 ]
To correctly kick into BACO state, the audio dev's D-state transition(D0->D3) needs to be PMFW-aware. So, if the audio dev entered D3 state prior to our driver, we need to bring it back to D0 state and make sure there will be a D-state transition on runpm suspend.
Stable-dep-of: ef5fcf2a6c32 ("drm/amdgpu: fix autosuspend cleanup during removal")
--- drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 42 +++++++++++++++++++++++++ 1 file changed, 42 insertions(+)
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +42 -0
@@ -122,6 +122,22 @@ void amdgpu_register_gpu_instance(struct amdgpu_device *adev)mutex_unlock (&mgpu_info.mutex); } +static void amdgpu_get_audio_func (struct amdgpu_device *adev) +{ +struct pci_dev *p =NULL ; + + p =pci_get_domain_bus_and_slot (pci_domain_nr (adev->pdev->bus), + adev->pdev->bus->number,1 ); +if (p) { +pm_runtime_get_sync (&p->dev); + +pm_runtime_mark_last_busy (&p->dev); +pm_runtime_put_autosuspend (&p->dev); + +pci_dev_put (p); + } +} +/** * amdgpu_driver_load_kms - Main load function for KMS. *
@@ -202,9 +218,35 @@ int amdgpu_driver_load_kms(struct amdgpu_device *adev, unsigned long flags)dev_pm_set_driver_flags (dev->dev,DPM_FLAG_NO_DIRECT_COMPLETE );pm_runtime_use_autosuspend (dev->dev);pm_runtime_set_autosuspend_delay (dev->dev,5000 ); +pm_runtime_allow (dev->dev); +pm_runtime_mark_last_busy (dev->dev);pm_runtime_put_autosuspend (dev->dev); + +/* +* For runpm implemented via BACO, PMFW will handle the +* timing for BACO in and out: +* - put ASIC into BACO state only when both video and +* audio functions are in D3 state. +* - pull ASIC out of BACO state when either video or +* audio function is in D0 state. +* Also, at startup, PMFW assumes both functions are in +* D0 state. +* +* So if snd driver was loaded prior to amdgpu driver +* and audio function was put into D3 state, there will +* be no PMFW-aware D-state transition(D0->D3) on runpm +* suspend. Thus the BACO will be not correctly kicked in. +* +* Via amdgpu_get_audio_func(), the audio dev is put +* into D0 state. Then there will be a PMFW-aware D-state +* transition(D0->D3) on runpm suspend. +*/ +if (amdgpu_device_supports_baco (dev) && + !(adev->flags &AMD_IS_APU ) && + (adev->asic_type >=CHIP_NAVI10 )) +amdgpu_get_audio_func (adev); } out:
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/3 drm/amdgpu: move runtime pm init after drm and fbdev init
From: Alex Deucher <[email protected]>
[ Upstream commit d0d66b8c66d04363eff3a5b09da4074fc1dfc758 ]
Seems more logical to enable runtime pm at the end of the init sequence so we don't end up entering runtime suspend before init is finished.
[5.10 backport: Move the existing runtime PM initialization and teardown into the PCI probe/remove paths. Keep the 5.10 BOCO/ATPX condition and DPM_FLAG_NO_DIRECT_COMPLETE policy; amdgpu_device_supports_px() and the newer SmartShift hooks are not present in this tree. Relocate the existing audio helper unchanged, without introducing any new functions. Remove the load-error PM put paired with the get that now only runs during removal. This prepares the remove path for ef5fcf2a6c32.]
Stable-dep-of: ef5fcf2a6c32 ("drm/amdgpu: fix autosuspend cleanup during removal")
--- drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 61 +++++++++++++++++++++++ drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 65 +------------------------ 2 files changed, 62 insertions(+), 64 deletions(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +61 -0
@@ -1103,6 +1103,22 @@ MODULE_DEVICE_TABLE(pci, pciidlist);static struct drm_driver kms_driver; +static void amdgpu_get_audio_func (struct amdgpu_device *adev) +{ +struct pci_dev *p =NULL ; + + p =pci_get_domain_bus_and_slot (pci_domain_nr (adev->pdev->bus), + adev->pdev->bus->number,1 ); +if (p) { +pm_runtime_get_sync (&p->dev); + +pm_runtime_mark_last_busy (&p->dev); +pm_runtime_put_autosuspend (&p->dev); + +pci_dev_put (p); + } +} +static int amdgpu_pci_probe (struct pci_dev *pdev,const struct pci_device_id *ent) {
@@ -1218,6 +1234,44 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,if (ret)DRM_ERROR ("Creating debugfs files failed (%d).\n" , ret); +if (adev->runpm) { +/* only need to skip on ATPX */ +if (amdgpu_device_supports_boco (ddev) && + !amdgpu_is_atpx_hybrid ()) +dev_pm_set_driver_flags (ddev->dev,DPM_FLAG_NO_DIRECT_COMPLETE ); +pm_runtime_use_autosuspend (ddev->dev); +pm_runtime_set_autosuspend_delay (ddev->dev,5000 ); + +pm_runtime_allow (ddev->dev); + +pm_runtime_mark_last_busy (ddev->dev); +pm_runtime_put_autosuspend (ddev->dev); + +/* +* For runpm implemented via BACO, PMFW will handle the +* timing for BACO in and out: +* - put ASIC into BACO state only when both video and +* audio functions are in D3 state. +* - pull ASIC out of BACO state when either video or +* audio function is in D0 state. +* Also, at startup, PMFW assumes both functions are in +* D0 state. +* +* So if snd driver was loaded prior to amdgpu driver +* and audio function was put into D3 state, there will +* be no PMFW-aware D-state transition(D0->D3) on runpm +* suspend. Thus the BACO will be not correctly kicked in. +* +* Via amdgpu_get_audio_func(), the audio dev is put +* into D0 state. Then there will be a PMFW-aware D-state +* transition(D0->D3) on runpm suspend. +*/ +if (amdgpu_device_supports_baco (ddev) && + !(adev->flags &AMD_IS_APU ) && + (adev->asic_type >=CHIP_NAVI10 )) +amdgpu_get_audio_func (adev); + } +return 0 ; err_pci:
@@ -1229,12 +1283,19 @@ static void amdgpu_pci_remove(struct pci_dev *pdev) {struct drm_device *dev =pci_get_drvdata (pdev); +struct amdgpu_device *adev =drm_to_adev (dev);#ifdef MODULE if (THIS_MODULE->state != MODULE_STATE_GOING)#endif DRM_ERROR ("Hotplug removal is not supported\n" );drm_dev_unplug (dev); + +if (adev->runpm) { +pm_runtime_get_sync (dev->dev); +pm_runtime_forbid (dev->dev); + } +amdgpu_driver_unload_kms (dev);pci_disable_device (pdev);pci_set_drvdata (pdev,NULL );
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +1 -64
85 lines not on this page · raw message
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 3/3 drm/amdgpu: fix autosuspend cleanup during removal
In reply to Sasha LevinFrom: Guangshuo Li <[email protected]>
[ Upstream commit ef5fcf2a6c320676bf8be2dadac93d9023b468b7 ]
amdgpu_pci_probe() calls pm_runtime_use_autosuspend(), but amdgpu_pci_remove() does not call the matching pm_runtime_dont_use_autosuspend().
If the autosuspend delay is set to a negative value while autosuspend is enabled, the runtime PM core increments usage_count to prevent runtime suspend. Without calling pm_runtime_dont_use_autosuspend() during teardown, this reference is not dropped and usage_count remains unbalanced.
The documentation for pm_runtime_use_autosuspend() also notes that it is important to undo it with pm_runtime_dont_use_autosuspend() at driver exit time, unless runtime PM was initially enabled with devm_pm_runtime_enable().
Add the missing pm_runtime_dont_use_autosuspend() call to the remove path.
This issue was found by manual code inspection.
--- drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 1 + 1 file changed, 1 insertion(+)
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +1 -0
@@ -1294,6 +1294,7 @@ amdgpu_pci_remove(struct pci_dev *pdev)if (adev->runpm) {pm_runtime_get_sync (dev->dev);pm_runtime_forbid (dev->dev); +pm_runtime_dont_use_autosuspend (dev->dev); }amdgpu_driver_unload_kms (dev);
Signature · 1 line
2.53.0