On Thu, Jul 31, 2025 at 10:58:47PM +0200, Stefan Sperling wrote:
> 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);
>  }
>

Seems ok to me.

-ml

Reply via email to