Re: git: eeaa865edba6 - main - acpi: Fix setting sleep state sysctls to NONE
- In reply to: Emmanuel Vadot : "Re: git: eeaa865edba6 - main - acpi: Fix setting sleep state sysctls to NONE"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 09 Jan 2026 14:06:20 UTC
On 1/8/26 08:23, Emmanuel Vadot wrote:
> On Thu, 8 Jan 2026 11:59:59 +0100
> Emmanuel Vadot <manu@bidouilliste.com> wrote:
>
>>
>> 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,
>
> Ok so the correct value is 's2mem' but this doesn't seems to be
> documented anywhere in acpi(4) like the warning says.
OTOH, it seems like if we are using traditional ACPI system states, we
should still be able to call it what it is (S3). That is, for systems
using actual S3 and not S0ix, setting these nodes to S3 should really
continue to work IMO.
--
John Baldwin