1
Fork 0
mirror of https://https.git.savannah.gnu.org/git/guix.git/ synced 2025-07-13 02:20:53 +02:00
guix/gnu/packages/patches/qemu-fix-agent-paths.patch
Maxim Cournoyer 4a1ea5d0da
gnu: qemu: Update to 9.1.3.
* gnu/packages/virtualization.scm (qemu): Update to 9.1.3.
[source] <patches>: Add qemu-disable-migration-test.patch.
[arguments] <phases>: Adjust install-user-static phase.
[native-inputs]: Add python-tomli.
(qemu-patch): Delete procedure.
* gnu/packages/patches/qemu-disable-bios-tables-test.patch: Rebase.
* gnu/packages/patches/qemu-fix-agent-paths.patch: Likewise.
* gnu/packages/patches/qemu-disable-aarch64-migration-test.patch: Delete file.
* gnu/packages/patches/qemu-disable-migration-test.patch: New file.
* gnu/local.mk (dist_patch_DATA): Adjust accordingly.

Change-Id: I573070a297ffc9ca096c52e2fa18f839ad89a24e
2025-03-05 14:23:42 +09:00

63 lines
2.3 KiB
Diff
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Allow a QEMU host to set the time and shutdown Guix guests. Styled
after the patch from the Nix package:
https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/virtualization/qemu/fix-qemu-ga.patch
diff --git a/qga/commands-posix.c b/qga/commands-posix.c
index 6e3c15f539..eaef900b6e 100644
--- a/qga/commands-posix.c
+++ b/qga/commands-posix.c
@@ -216,6 +216,7 @@ out:
void qmp_guest_shutdown(const char *mode, Error **errp)
{
const char *shutdown_flag;
+ const char *command;
Error *local_err = NULL;
#ifdef CONFIG_SOLARIS
@@ -235,16 +236,24 @@ void qmp_guest_shutdown(const char *mode, Error **errp)
slog("guest-shutdown called, mode: %s", mode);
if (!mode || strcmp(mode, "powerdown") == 0) {
shutdown_flag = powerdown_flag;
+ command = "shutdown";
} else if (strcmp(mode, "halt") == 0) {
shutdown_flag = halt_flag;
+ command = "halt";
} else if (strcmp(mode, "reboot") == 0) {
shutdown_flag = reboot_flag;
+ command = "reboot";
} else {
error_setg(errp,
"mode is invalid (valid values are: halt|powerdown|reboot");
return;
}
+ /* Try Guixs shutdown/halt/reboot first. */
+ char *path = g_strdup_printf("/run/current-system/profile/sbin/%s", command);
+ execl(path, command, (char *) NULL);
+ g_free(path);
+
const char *argv[] = {"/sbin/shutdown",
#ifdef CONFIG_SOLARIS
shutdown_flag, "-g0", "-y",
@@ -269,7 +278,7 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
int ret;
Error *local_err = NULL;
struct timeval tv;
- const char *argv[] = {"/sbin/hwclock", has_time ? "-w" : "-s", NULL};
+ const char *argv[] = {"/run/current-system/profile/sbin/hwclock", has_time ? "-w" : "-s", NULL};
/* If user has passed a time, validate and set it. */
if (has_time) {
@@ -302,6 +311,11 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
* hardware clock (RTC). */
ga_run_command(argv, NULL, "set hardware clock to system time",
&local_err);
+ if (local_err) {
+ argv[0] = "/sbin/hwclock";
+ ga_run_command(argv, NULL, "set hardware clock to system time",
+ &local_err);
+ }
if (local_err) {
error_propagate(errp, local_err);
return;