Still use helper when Xen Dom0, to avoid duplicating some hairy code. So we don't have any logic to load kexec kernels? --- TODO | 3 --- src/core/shutdown.c | 33 ++++++++++++++++++++------------- 2 files changed, 20 insertions(+), 16 deletions(-)
diff --git a/TODO b/TODO index 883b994..68b0af6 100644 --- a/TODO +++ b/TODO @@ -85,9 +85,6 @@ Features: * maybe introduce WantsMountsFor=? Usecase: http://lists.freedesktop.org/archives/systemd-devel/2015-January/027729.html -* rework kexec logic to use new kexec_file_load() syscall, so that we - don't have to call kexec tool anymore. - * The udev blkid built-in should expose a property that reflects whether media was sensed in USB CF/SD card readers. This should then be used to control SYSTEMD_READY=1/0 so that USB card readers aren't diff --git a/src/core/shutdown.c b/src/core/shutdown.c index 71f001a..c64c05d 100644 --- a/src/core/shutdown.c +++ b/src/core/shutdown.c @@ -350,26 +350,33 @@ int main(int argc, char *argv[]) { case LINUX_REBOOT_CMD_KEXEC: if (!in_container) { - /* We cheat and exec kexec to avoid doing all its work */ - pid_t pid; + _cleanup_free_ char *param = NULL; log_info("Rebooting with kexec."); - pid = fork(); - if (pid < 0) - log_error_errno(errno, "Failed to fork: %m"); - else if (pid == 0) { + /* kexec-tools has a bunch of special code to make Xen Dom0 work, + * otherwise it is only doing stuff we have already done */ + if (access("/proc/xen", F_OK) == 0) { + pid_t pid; + + pid = fork(); + if (pid < 0) + log_error_errno(errno, "Failed to fork: %m"); + else if (pid == 0) { + + const char * const args[] = { + KEXEC, "-e", NULL + }; - const char * const args[] = { - KEXEC, "-e", NULL - }; + /* Child */ - /* Child */ + execv(args[0], (char * const *) args); + _exit(EXIT_FAILURE); + } else + wait_for_terminate_and_warn("kexec", pid, true); - execv(args[0], (char * const *) args); - _exit(EXIT_FAILURE); } else - wait_for_terminate_and_warn("kexec", pid, true); + reboot(cmd); } cmd = RB_AUTOBOOT; -- 2.2.1.209.g41e5f3a _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel