On Fri, Jul 18, 2025 at 08:11:31PM +1000, Jonathan Gray wrote:
> On Sat, Jun 21, 2025 at 07:00:56PM +0200, Matthieu Herrb wrote:
> > On Wed, Jun 04, 2025 at 08:39:19AM +0100, Laurence Tratt wrote:
> > > As of somewhere in the last 10-14 days or so, my amd64 machine has stopped
> > > reliably suspending (for reference: it's reliably suspended for the past
> > > 9-10 months). Unfortunately I haven't worked out *what* the sequence of
> > > events that causes this is, so bisecting has proven impossible (I
> > > tried...). When `zzz` is unsuccessful, X disappears, the machine drops to
> > > the console (i.e. displaying "Login:" or whatever was there last), and 
> > > then
> > > is stuck there indefinitely: it doesn't get as far as "Syncing disks". The
> > > machine's fans spin up after a while, so presumably something is stuck in 
> > > a
> > > busy loop.
> > 
> > Hi,
> > 
> > I'm seeing something similar on my X395 since some weeks. I *think*
> > failure to suspend happens only after I've played a few large (HD) video
> > with mpv, maybe in chrome too. I've not tried to figure out a
> > reproducer.
> > 
> > When it happens, and the machine sits a the login prompt, I can still
> > interact with it for a couple of minutes before it freezes: type
> > commands, enter ddb,... I cannot switch back to X (either instant
> > freeze or panic) nor retry zzz. halt -p sometimes works, sometimes
> > unlock the pending supend (so the machine suspends, and powers itself
> > off shortly after resume).
> > 
> > Unfortunatly I've no idea what kind of resources to look for that
> > would be blocking the suspend path. Any clues of stuff I can run on
> > the console or in ddb next time this happens ?
> 
> I suggested Laurence try a revert of 6.12.31's
> 'Revert "drm/amd: Stop evicting resources on APUs in suspend"'
> And after a week or so of testing he hasn't had a problem.
> 
> Perhaps it helps in your case as well?  A T495 with the same
> APU as the X395 (Picasso) suspends and resumes fine without this.

This patch should be equivalent to reverting the revert.
It is contained to a function that does not exist in linux.

Laurence has been running with a diff close to this.

Index: sys/dev/pci/drm/amd/amdgpu/amdgpu_drv.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/amd/amdgpu/amdgpu_drv.c,v
diff -u -p -r1.63 amdgpu_drv.c
--- sys/dev/pci/drm/amd/amdgpu/amdgpu_drv.c     5 Jul 2025 23:44:49 -0000       
1.63
+++ sys/dev/pci/drm/amd/amdgpu/amdgpu_drv.c     19 Aug 2025 03:10:58 -0000
@@ -3888,6 +3888,14 @@ amdgpu_activate(struct device *self, int
        switch (act) {
        case DVACT_QUIESCE:
                rv = config_activate_children(self, act);
+
+               if (acpi_softc && acpi_softc->sc_state != ACPI_STATE_S4) {
+                       if (amdgpu_acpi_is_s0ix_active(adev))
+                               adev->in_s0ix = true;
+                       else if (amdgpu_acpi_is_s3_active(adev))
+                                adev->in_s3 = true;
+               }
+
                amdgpu_pmops_prepare(self);
                if (acpi_softc && acpi_softc->sc_state == ACPI_STATE_S4) {
                        adev->in_s4 = true;

Reply via email to