grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v1] emu/linux: work around systemctl kexec returning


From: Robbie Harwood
Subject: [PATCH v1] emu/linux: work around systemctl kexec returning
Date: Thu, 23 Mar 2023 11:59:51 -0400

Per systemctl(1), it "is asynchronous; it will return after the reboot
operation is enqueued, without waiting for it to complete".  This
differs from kexec(8), which calls reboot(2) and therefore does not
return.

When not using fallback, this confusingly results in:

    error trying to perform 'systemctl kexec': 0
    Aborted. Press any key to exit.

on screen for a bit, followed by successful kexec.

To reduce the liklihood of hitting this case, add a delay on succesful
return.  Ultimately, the systemd interface is racy: we can't avoid it
entirely unless we never fallback on success.

Signed-off-by: Robbie Harwood <rharwood@redhat.com>
---
 grub-core/loader/emu/linux.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/grub-core/loader/emu/linux.c b/grub-core/loader/emu/linux.c
index 0cf378a376..7de3f7f861 100644
--- a/grub-core/loader/emu/linux.c
+++ b/grub-core/loader/emu/linux.c
@@ -74,6 +74,10 @@ grub_linux_boot (void)
                (kexecute==1) ? "do-or-die" : "just-in-case");
   rc = grub_util_exec (systemctl);
 
+  /* `systemctl kexec` is "asynchronous" and will return even on success. */
+  if (rc == 0)
+    grub_sleep (10);
+
   if (kexecute == 1)
     grub_fatal (N_("error trying to perform 'systemctl kexec': %d"), rc);
 
-- 
2.39.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]