On 1/8/26 08:23, Emmanuel Vadot wrote:
On Thu, 8 Jan 2026 11:59:59 +0100
Emmanuel Vadot <[email protected]> wrote:
Hello,
On Fri, 28 Nov 2025 14:44:45 +0000
Aymeric Wibo <[email protected]> wrote:
The branch main has been updated by obiwac:
URL:
https://cgit.FreeBSD.org/src/commit/?id=eeaa865edba685545ac22c378b35552e09bf1b41
commit eeaa865edba685545ac22c378b35552e09bf1b41
Author: Aymeric Wibo <[email protected]>
AuthorDate: 2025-11-25 19:34:34 +0000
Commit: Aymeric Wibo <[email protected]>
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