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); }