Re: git: eeaa865edba6 - main - acpi: Fix setting sleep state sysctls to NONE
Date: Thu, 08 Jan 2026 10:59:59 UTC
Hello,
On Fri, 28 Nov 2025 14:44:45 +0000
Aymeric Wibo <obiwac@FreeBSD.org> wrote:
> The branch main has been updated by obiwac:
>
> URL: https://cgit.FreeBSD.org/src/commit/?id=eeaa865edba685545ac22c378b35552e09bf1b41
>
> commit eeaa865edba685545ac22c378b35552e09bf1b41
> Author: Aymeric Wibo <obiwac@FreeBSD.org>
> AuthorDate: 2025-11-25 19:34:34 +0000
> Commit: Aymeric Wibo <obiwac@FreeBSD.org>
> CommitDate: 2025-11-28 14:42:54 +0000
>
> acpi: Fix setting sleep state sysctls to NONE
>
> This restores the functionality as it was pre-97d152698f48.
>
> A stopgap was committed by glebius@ in 34dfccc64f47 ("acpi: in
> acpi_stype_sysctl() use same logic as in acpi_sleep_state_sysctl()").
>
> PR: 290651
> Reviewed by: thj, emaste
> Approved by: thj
> Fixes: 97d152698f48 ("acpi: Use sleep types defined in sys/power.h")
> Sponsored by: The FreeBSD Foundation
> Differential Revision: https://reviews.freebsd.org/D53909
> ---
> sys/dev/acpica/acpi.c | 39 ++++++++++++++++++++++++---------------
> 1 file changed, 24 insertions(+), 15 deletions(-)
>
> diff --git a/sys/dev/acpica/acpi.c b/sys/dev/acpica/acpi.c
> index e3ff4f6937d2..99dd817f9158 100644
> --- a/sys/dev/acpica/acpi.c
> +++ b/sys/dev/acpica/acpi.c
> @@ -4318,13 +4318,15 @@ acpi_sname_to_sstate(const char *sname)
> {
> int sstate;
>
> + if (strcasecmp(sname, "NONE") == 0)
> + return (ACPI_STATE_UNKNOWN);
> +
> if (toupper(sname[0]) == 'S') {
> sstate = sname[1] - '0';
> if (sstate >= ACPI_STATE_S0 && sstate <= ACPI_STATE_S5 &&
> sname[2] == '\0')
> return (sstate);
> - } else if (strcasecmp(sname, "NONE") == 0)
> - return (ACPI_STATE_UNKNOWN);
> + }
> return (-1);
> }
>
> @@ -4379,8 +4381,10 @@ acpi_suspend_state_sysctl(SYSCTL_HANDLER_ARGS)
> if (new_sstate < 0)
> return (EINVAL);
> new_stype = acpi_sstate_to_stype(new_sstate);
> - if (acpi_supported_stypes[new_stype] == false)
> + if (new_sstate != ACPI_STATE_UNKNOWN &&
> + acpi_supported_stypes[new_stype] == false)
> return (EOPNOTSUPP);
> +
> if (new_stype != old_stype)
> power_suspend_stype = new_stype;
> return (err);
> @@ -4423,21 +4427,26 @@ acpi_stype_sysctl(SYSCTL_HANDLER_ARGS)
> if (err != 0 || req->newptr == NULL)
> return (err);
>
> - new_stype = power_name_to_stype(name);
> - if (new_stype == POWER_STYPE_UNKNOWN) {
> - sstate = acpi_sname_to_sstate(name);
> - if (sstate < 0)
> - return (EINVAL);
> - printf("warning: this sysctl expects a sleep type, but an ACPI S-state has "
> - "been passed to it. This functionality is deprecated; see acpi(4).\n");
> - if (sstate < ACPI_S_STATE_COUNT &&
> - !acpi_supported_sstates[sstate])
> + if (strcasecmp(name, "NONE") == 0) {
> + new_stype = POWER_STYPE_UNKNOWN;
> + } else {
> + new_stype = power_name_to_stype(name);
> + if (new_stype == POWER_STYPE_UNKNOWN) {
> + sstate = acpi_sname_to_sstate(name);
> + if (sstate < 0)
> + return (EINVAL);
> + printf("warning: this sysctl expects a sleep type, but an ACPI "
> + "S-state has been passed to it. This functionality is "
> + "deprecated; see acpi(4).\n");
> + MPASS(sstate < ACPI_S_STATE_COUNT);
> + if (acpi_supported_sstates[sstate] == false)
> + return (EOPNOTSUPP);
> + new_stype = acpi_sstate_to_stype(sstate);
> + }
> + if (acpi_supported_stypes[new_stype] == false)
> return (EOPNOTSUPP);
> - new_stype = acpi_sstate_to_stype(sstate);
> }
>
> - if (acpi_supported_stypes[new_stype] == false)
> - return (EOPNOTSUPP);
> if (new_stype != old_stype)
> *(enum power_stype *)oidp->oid_arg1 = new_stype;
> return (0);
>
Since this commit I have the warning printed as I have the
hw.acpi.lid_switch_state set to 'S3' in sysctl.conf, the man page says
it's correct. Changing it to 'standby' doesn't work as the value isn't
recognized.
What is the correct way for this sysctl now ?
Cheers,
--
Emmanuel Vadot <manu@bidouilliste.com> <manu@freebsd.org>