On Thu, Jul 31, 2025 at 10:35:49AM -0600, Theo de Raadt wrote:
> > Modified files:
> >     sys/kern       : subr_suspend.c 
> > 
> > Log message:
> > Give the resume_time check in resuming() more headroom.
> > 
> > On the Z13 resume by power button will usually trigger an immediate
> > shutdown after resume. When resume succeeds the headroom provided by
> > resume_time + 10 is between 1 to 3 seconds, which is a bit close.
> > Set the ceiling to resume + 15 to give us more time to finish resuming.
> > 
> > ok kettenis@
> 
> That is surprising.
> 
> Are we setting resume_time too early?

The Z13 problem can also be fixed like this, which should not cause
additional penalty for machines which resume fast:

M  sys/kern/subr_suspend.c  |  9+  1-

1 file changed, 9 insertions(+), 1 deletion(-)

commit - 3b565b6513502b4d00eb2ea3c0e8d1aa648f5db2
commit + 1021d30f8a4ef71b1ea00cea7b67ab4eb76798a9
blob - 3c83a049cb97e4b3026fd9c3b75d3b1eff2d3caa
blob + ae67b7b2e2af564597eb64892603a6080999bcf4
--- sys/kern/subr_suspend.c
+++ sys/kern/subr_suspend.c
@@ -55,6 +55,7 @@ sleep_state(void *v, int sleepmode)
        extern int perflevel;
        size_t rndbuflen;
        char *rndbuf;
+       time_t now;
 #ifdef GPROF
        int gmon_state;
 #endif
@@ -218,11 +219,18 @@ fail_hiballoc:
                cpu_setperf(perflevel); /* Restore hw.setperf */
        if (suspend_finish(v) == EAGAIN)
                goto top;
+       /*
+        * Rearm the power-button timeout if we have spent
+        * a significant amount of time until here.
+        */
+       now = getuptime();
+       if (resume_time + 5 < now)
+               resume_time = now;
        return (error);
 }
 
 int
 resuming(void)
 {
-       return (getuptime() < resume_time + 15);
+       return (getuptime() < resume_time + 10);
 }

Reply via email to