release 6.14.6
This commit is contained in:
87
debian/patches/patchset-pf/fixes/0013-drm-amdgpu-fix-pm-notifier-handling.patch
vendored
Normal file
87
debian/patches/patchset-pf/fixes/0013-drm-amdgpu-fix-pm-notifier-handling.patch
vendored
Normal file
@@ -0,0 +1,87 @@
|
||||
From e9ee1b0a41166033eda14d11823826b79ce5131b Mon Sep 17 00:00:00 2001
|
||||
From: Alex Deucher <alexander.deucher@amd.com>
|
||||
Date: Thu, 1 May 2025 13:46:46 -0400
|
||||
Subject: drm/amdgpu: fix pm notifier handling
|
||||
|
||||
Set the s3/s0ix and s4 flags in the pm notifier so that we can skip
|
||||
the resource evictions properly in pm prepare based on whether
|
||||
we are suspending or hibernating. Drop the eviction as processes
|
||||
are not frozen at this time, we we can end up getting stuck trying
|
||||
to evict VRAM while applications continue to submit work which
|
||||
causes the buffers to get pulled back into VRAM.
|
||||
|
||||
v2: Move suspend flags out of pm notifier (Mario)
|
||||
|
||||
Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4178
|
||||
Fixes: 2965e6355dcd ("drm/amd: Add Suspend/Hibernate notification callback support")
|
||||
Cc: Mario Limonciello <mario.limonciello@amd.com>
|
||||
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
---
|
||||
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 18 +++++-------------
|
||||
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 10 +---------
|
||||
2 files changed, 6 insertions(+), 22 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
|
||||
@@ -4819,28 +4819,20 @@ static int amdgpu_device_evict_resources
|
||||
* @data: data
|
||||
*
|
||||
* This function is called when the system is about to suspend or hibernate.
|
||||
- * It is used to evict resources from the device before the system goes to
|
||||
- * sleep while there is still access to swap.
|
||||
+ * It is used to set the appropriate flags so that eviction can be optimized
|
||||
+ * in the pm prepare callback.
|
||||
*/
|
||||
static int amdgpu_device_pm_notifier(struct notifier_block *nb, unsigned long mode,
|
||||
void *data)
|
||||
{
|
||||
struct amdgpu_device *adev = container_of(nb, struct amdgpu_device, pm_nb);
|
||||
- int r;
|
||||
|
||||
switch (mode) {
|
||||
case PM_HIBERNATION_PREPARE:
|
||||
adev->in_s4 = true;
|
||||
- fallthrough;
|
||||
- case PM_SUSPEND_PREPARE:
|
||||
- r = amdgpu_device_evict_resources(adev);
|
||||
- /*
|
||||
- * This is considered non-fatal at this time because
|
||||
- * amdgpu_device_prepare() will also fatally evict resources.
|
||||
- * See https://gitlab.freedesktop.org/drm/amd/-/issues/3781
|
||||
- */
|
||||
- if (r)
|
||||
- drm_warn(adev_to_drm(adev), "Failed to evict resources, freeze active processes if problems occur: %d\n", r);
|
||||
+ break;
|
||||
+ case PM_POST_HIBERNATION:
|
||||
+ adev->in_s4 = false;
|
||||
break;
|
||||
}
|
||||
|
||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
||||
@@ -2592,13 +2592,8 @@ static int amdgpu_pmops_freeze(struct de
|
||||
static int amdgpu_pmops_thaw(struct device *dev)
|
||||
{
|
||||
struct drm_device *drm_dev = dev_get_drvdata(dev);
|
||||
- struct amdgpu_device *adev = drm_to_adev(drm_dev);
|
||||
- int r;
|
||||
|
||||
- r = amdgpu_device_resume(drm_dev, true);
|
||||
- adev->in_s4 = false;
|
||||
-
|
||||
- return r;
|
||||
+ return amdgpu_device_resume(drm_dev, true);
|
||||
}
|
||||
|
||||
static int amdgpu_pmops_poweroff(struct device *dev)
|
||||
@@ -2611,9 +2606,6 @@ static int amdgpu_pmops_poweroff(struct
|
||||
static int amdgpu_pmops_restore(struct device *dev)
|
||||
{
|
||||
struct drm_device *drm_dev = dev_get_drvdata(dev);
|
||||
- struct amdgpu_device *adev = drm_to_adev(drm_dev);
|
||||
-
|
||||
- adev->in_s4 = false;
|
||||
|
||||
return amdgpu_device_resume(drm_dev, true);
|
||||
}
|
Reference in New Issue
Block a user