On Mon, 14 Apr 2014 12:14:49 +0200
Alexander Graf <address@hidden> wrote:
On 26.02.14 12:38, Christian Borntraeger wrote:
From: Thomas Huth <address@hidden>
Some of the state in the kernel can not be reset from QEMU yet.
For this we've got to use the KVM_S390_INITIAL_RESET ioctl to make
sure that the state in the kernel is set to the right values during
initial CPU reset, too.
Signed-off-by: Thomas Huth <address@hidden>
Acked-by: Cornelia Huck <address@hidden>
Signed-off-by: Christian Borntraeger <address@hidden>
---
target-s390x/cpu.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/target-s390x/cpu.c b/target-s390x/cpu.c
index f1319e5..1a8c1cc 100644
--- a/target-s390x/cpu.c
+++ b/target-s390x/cpu.c
@@ -108,6 +108,15 @@ static void s390_cpu_initial_reset(CPUState *s)
env->cregs[14] = CR14_RESET;
env->pfault_token = -1UL;
+
+#if defined(CONFIG_KVM)
+ /* Reset state inside the kernel that we cannot access yet from QEMU. */
+ if (kvm_enabled()) {
+ if (kvm_vcpu_ioctl(s, KVM_S390_INITIAL_RESET, NULL)) {
Could we put this into the vcpu register sync function? It gets a
parameter that indicates when we are on RESET level, right?
No, sorry, as far as I can see, this is not that easily possible:
On S390, we've got five different levels of reset (CPU reset,
Initial CPU reset, Subsystem reset, Clear reset & Power-on reset).
The ioctl is about initial CPU reset only, while the register sync
function flag is rather only used by system/clear reset instead.
So for example when the guest OS sends a SIGP INITIAL CPU RESET from
one CPU to another, only the s390_cpu_initial_reset() will be called,
but not the register sync with KVM_PUT_RESET_STATE.