]> git.proxmox.com Git - qemu.git/commitdiff
target-s390: enable SIGP Initial Reset
authorAlexander Graf <agraf@suse.de>
Fri, 14 May 2010 14:14:31 +0000 (16:14 +0200)
committerAurelien Jarno <aurelien@aurel32.net>
Tue, 18 May 2010 19:23:24 +0000 (21:23 +0200)
For SMP to work with KVM, we need to properly emulate the SIGP Initial Reset
Command. Recent (2.6.32) kernels issue that before the SIGP Reset command that
actually wakes up the vcpu.

This patch makes -smp work on S390x.

Signed-off-by: Alexander Graf <agraf@suse.de>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
target-s390x/kvm.c

index a2d77419bd045a97f7e36674b2420cbfb17b8dd4..9bf6abb2138b805b221e4659200e5a19b4e6997a 100644 (file)
@@ -344,9 +344,20 @@ static int s390_store_status(CPUState *env, uint32_t parameter)
 
 static int s390_cpu_initial_reset(CPUState *env)
 {
-    /* XXX */
-    fprintf(stderr, "XXX SIGP init\n");
-    return -1;
+    int i;
+
+    if (kvm_vcpu_ioctl(env, KVM_S390_INITIAL_RESET, NULL) < 0) {
+        perror("cannot init reset vcpu");
+    }
+
+    /* Manually zero out all registers */
+    cpu_synchronize_state(env);
+    for (i = 0; i < 16; i++) {
+        env->regs[i] = 0;
+    }
+
+    dprintf("DONE: SIGP initial reset: %p\n", env);
+    return 0;
 }
 
 static int handle_sigp(CPUState *env, struct kvm_run *run, uint8_t ipa1)