The branch main has been updated by avg:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=e4ab361e53945a6c3e9d68c5e5ffc11de40a35f2

commit e4ab361e53945a6c3e9d68c5e5ffc11de40a35f2
Author:     Andriy Gapon <[email protected]>
AuthorDate: 2024-02-06 08:55:13 +0000
Commit:     Andriy Gapon <[email protected]>
CommitDate: 2024-02-06 08:55:13 +0000

    fix poweroff regression from 9cdf326b4f by delaying shutdown_halt
    
    The regression affected ACPI-based systems without EFI poweroff support
    (including VMs).
    
    The key reason for the regression is that I overlooked that poweroff is
    requested by RB_POWEROFF | RB_HALT combination of flags.  In my opinion,
    that command is a bit bipolar, but since we've been doing that forever,
    then so be it.  Because of that flag combination, the order of
    shutdown_final handlers that check for either flag does matter.
    
    Some additional complexity comes from platform-specific shutdown_final
    handlers that aim to handle multiple reboot options at once.  E.g.,
    acpi_shutdown_final handles both poweroff and reboot / reset.  As
    explained in 9cdf326b4f, such a handler must run after shutdown_panic to
    give it a chance.  But as the change revealed, the handler must also run
    before shutdown_halt, so that the system can actually power off before
    entering the halt limbo.
    
    Previously, shutdown_panic and shutdown_halt had the same priority which
    appears to be incompatible with handlers that can do both poweroff and
    reset.
    
    The above also applies to power cycle handlers.
    
    PR:             276784
    Reported by:    many
    Tested by:      Katsuyuki Miyoshi <[email protected]>,
                    Masachika ISHIZUKA <[email protected]>
    Fixes:          9cdf326b4fae run acpi_shutdown_final later to give other 
handlers a chance
    MFC after:      1 week
---
 sys/kern/kern_shutdown.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sys/kern/kern_shutdown.c b/sys/kern/kern_shutdown.c
index ee666281418f..f49e315a503d 100644
--- a/sys/kern/kern_shutdown.c
+++ b/sys/kern/kern_shutdown.c
@@ -262,10 +262,10 @@ shutdown_conf(void *unused)
 
        EVENTHANDLER_REGISTER(shutdown_final, poweroff_wait, NULL,
            SHUTDOWN_PRI_FIRST);
-       EVENTHANDLER_REGISTER(shutdown_final, shutdown_halt, NULL,
-           SHUTDOWN_PRI_LAST + 100);
        EVENTHANDLER_REGISTER(shutdown_final, shutdown_panic, NULL,
            SHUTDOWN_PRI_LAST + 100);
+       EVENTHANDLER_REGISTER(shutdown_final, shutdown_halt, NULL,
+           SHUTDOWN_PRI_LAST + 200);
 }
 
 SYSINIT(shutdown_conf, SI_SUB_INTRINSIC, SI_ORDER_ANY, shutdown_conf, NULL);

Reply via email to