Blame packages/q/qemu/s390x-tod-kvm-don-t-save-restore-the-TOD.patch

Bernhard M. Wiedemann 399b1f
From: Nico Boehr <nrb@linux.ibm.com>
Bernhard M. Wiedemann 399b1f
Date: Wed, 12 Oct 2022 14:32:29 +0200
Bernhard M. Wiedemann 399b1f
Subject: s390x/tod-kvm: don't save/restore the TOD in PV guests
Bernhard M. Wiedemann 399b1f
Bernhard M. Wiedemann 399b1f
Under PV, the guest's TOD clock is under control of the ultravisor and the
Bernhard M. Wiedemann 399b1f
hypervisor cannot change it.
Bernhard M. Wiedemann 399b1f
Bernhard M. Wiedemann 399b1f
With upcoming kernel changes[1], the Linux kernel will reject QEMU's
Bernhard M. Wiedemann 399b1f
request to adjust the guest's clock in this case, so don't attempt to set
Bernhard M. Wiedemann 399b1f
the clock.
Bernhard M. Wiedemann 399b1f
Bernhard M. Wiedemann 399b1f
This avoids the following warning message on save/restore of a PV guest:
Bernhard M. Wiedemann 399b1f
Bernhard M. Wiedemann 399b1f
warning: Unable to set KVM guest TOD clock: Operation not supported
Bernhard M. Wiedemann 399b1f
Bernhard M. Wiedemann 399b1f
[1] https://lore.kernel.org/all/20221011160712.928239-2-nrb@linux.ibm.com/
Bernhard M. Wiedemann 399b1f
Bernhard M. Wiedemann 399b1f
Fixes: c3347ed0d2ee ("s390x: protvirt: Support unpack facility")
Bernhard M. Wiedemann 399b1f
Signed-off-by: Nico Boehr <nrb@linux.ibm.com>
Bernhard M. Wiedemann 399b1f
Message-Id: <20221012123229.1196007-1-nrb@linux.ibm.com>
Bernhard M. Wiedemann 399b1f
[thuth: Add curly braces]
Bernhard M. Wiedemann 399b1f
Signed-off-by: Thomas Huth <thuth@redhat.com>
Bernhard M. Wiedemann 399b1f
(cherry picked from commit 38621181ae3cbec62e3490fbc14f6ac01642d07a)
Bernhard M. Wiedemann 399b1f
Resolves: bsc#1206527
Bernhard M. Wiedemann 399b1f
Signed-off-by: Dario Faggioli <dfaggioli@suse.com>
Bernhard M. Wiedemann 399b1f
---
Bernhard M. Wiedemann 399b1f
 hw/s390x/tod-kvm.c | 9 +++++++++
Bernhard M. Wiedemann 399b1f
 1 file changed, 9 insertions(+)
Bernhard M. Wiedemann 399b1f
Bernhard M. Wiedemann 399b1f
diff --git a/hw/s390x/tod-kvm.c b/hw/s390x/tod-kvm.c
Bernhard M. Wiedemann 399b1f
index 9d0cbfbce2bf56b3593d712bd082..e2202dae2dc203a2848a3d0faaaf 100644
Bernhard M. Wiedemann 399b1f
--- a/hw/s390x/tod-kvm.c
Bernhard M. Wiedemann 399b1f
+++ b/hw/s390x/tod-kvm.c
Bernhard M. Wiedemann 399b1f
@@ -13,6 +13,7 @@
Bernhard M. Wiedemann 399b1f
 #include "qemu/module.h"
Bernhard M. Wiedemann 399b1f
 #include "sysemu/runstate.h"
Bernhard M. Wiedemann 399b1f
 #include "hw/s390x/tod.h"
Bernhard M. Wiedemann 399b1f
+#include "hw/s390x/pv.h"
Bernhard M. Wiedemann 399b1f
 #include "kvm/kvm_s390x.h"
Bernhard M. Wiedemann 399b1f
 
Bernhard M. Wiedemann 399b1f
 static void kvm_s390_get_tod_raw(S390TOD *tod, Error **errp)
Bernhard M. Wiedemann 399b1f
@@ -84,6 +85,14 @@ static void kvm_s390_tod_vm_state_change(void *opaque, bool running,
Bernhard M. Wiedemann 399b1f
     S390TODState *td = opaque;
Bernhard M. Wiedemann 399b1f
     Error *local_err = NULL;
Bernhard M. Wiedemann 399b1f
 
Bernhard M. Wiedemann 399b1f
+    /*
Bernhard M. Wiedemann 399b1f
+     * Under PV, the clock is under ultravisor control, hence we cannot restore
Bernhard M. Wiedemann 399b1f
+     * it on resume.
Bernhard M. Wiedemann 399b1f
+     */
Bernhard M. Wiedemann 399b1f
+    if (s390_is_pv()) {
Bernhard M. Wiedemann 399b1f
+        return;
Bernhard M. Wiedemann 399b1f
+    }
Bernhard M. Wiedemann 399b1f
+
Bernhard M. Wiedemann 399b1f
     if (running && td->stopped) {
Bernhard M. Wiedemann 399b1f
         /* Set the old TOD when running the VM - start the TOD clock. */
Bernhard M. Wiedemann 399b1f
         kvm_s390_set_tod_raw(&td->base, &local_err);