We aren't ready to choose S0-over-S3 based upon the S0ix bit in FADT.
authorderaadt <deraadt@openbsd.org>
Sat, 21 Sep 2024 19:06:06 +0000 (19:06 +0000)
committerderaadt <deraadt@openbsd.org>
Sat, 21 Sep 2024 19:06:06 +0000 (19:06 +0000)
Some machines which work great in S3, don't work great in S0.

Some people want to be able to force S0, mostly for testing purposes
(or to notice improvements as changes are made in the tree).  Provide
a TEMPORARY method via machdep.lidaction=-1 which will be S0-suspend
while =1 remains S3 suspend.  This button will not remain long-term,
but for now, and during 7.6, it will be better than nothing.
ok ratchov kettenis

sys/arch/amd64/amd64/machdep.c
sys/dev/acpi/acpi_x86.c
sys/dev/acpi/acpibtn.c

index 0569461..7f85f92 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: machdep.c,v 1.296 2024/07/29 18:43:11 kettenis Exp $  */
+/*     $OpenBSD: machdep.c,v 1.297 2024/09/21 19:06:07 deraadt Exp $   */
 /*     $NetBSD: machdep.c,v 1.3 2003/05/07 22:58:18 fvdl Exp $ */
 
 /*-
@@ -488,7 +488,7 @@ extern int amd64_has_xcrypt;
 extern int need_retpoline;
 
 const struct sysctl_bounded_args cpuctl_vars[] = {
-       { CPU_LIDACTION, &lid_action, 0, 2 },
+       { CPU_LIDACTION, &lid_action, -1, 2 },
        { CPU_PWRACTION, &pwr_action, 0, 2 },
        { CPU_CPUID, &cpu_id, SYSCTL_INT_READONLY },
        { CPU_CPUFEATURE, &cpu_feature, SYSCTL_INT_READONLY },
index 78b2f6a..c3d5742 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: acpi_x86.c,v 1.31 2024/08/31 15:53:44 deraadt Exp $ */
+/* $OpenBSD: acpi_x86.c,v 1.32 2024/09/21 19:06:06 deraadt Exp $ */
 /*
  * Copyright (c) 2005 Thorsten Lockert <tholo@sigmasoft.com>
  * Copyright (c) 2005 Jordan Hargrave <jordan@openbsd.org>
@@ -32,12 +32,13 @@ sleep_showstate(void *v, int sleepmode)
 {
        struct acpi_softc *sc = v;
        int fallback_state = -1;
+       extern int lid_action;
 
        switch (sleepmode) {
        case SLEEP_SUSPEND:
                sc->sc_state = ACPI_STATE_S3;
 #ifdef __amd64__
-               if (sc->sc_fadt->flags & FADT_POWER_S0_IDLE_CAPABLE)
+               if (lid_action == -1)
                        sc->sc_state = ACPI_STATE_S0;
                fallback_state = ACPI_STATE_S0; /* No S3, use S0 */
 #endif
index ad1b8d1..8eca977 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: acpibtn.c,v 1.53 2024/08/06 17:38:56 kettenis Exp $ */
+/* $OpenBSD: acpibtn.c,v 1.54 2024/09/21 19:06:06 deraadt Exp $ */
 /*
  * Copyright (c) 2005 Marco Peereboom <marco@openbsd.org>
  *
@@ -254,6 +254,7 @@ acpibtn_notify(struct aml_node *node, int notify_type, void *arg)
 
                switch (lid_action) {
                case 1:
+               case -1:
                        goto sleep;
 #ifdef HIBERNATE
                case 2: