From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=38503 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OESOt-0005F4-RF for qemu-devel@nongnu.org; Tue, 18 May 2010 15:24:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OESOe-00031f-9Y for qemu-devel@nongnu.org; Tue, 18 May 2010 15:24:13 -0400 Received: from hall.aurel32.net ([88.191.82.174]:57733) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OESOe-00031X-43 for qemu-devel@nongnu.org; Tue, 18 May 2010 15:24:08 -0400 Date: Tue, 18 May 2010 21:24:06 +0200 From: Aurelien Jarno Subject: Re: [Qemu-devel] [PATCH] [S390] [KVM] Enable SIGP Initial Reset Message-ID: <20100518192406.GJ31346@ohm.aurel32.net> References: <1273846471-11152-1-git-send-email-agraf@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline In-Reply-To: <1273846471-11152-1-git-send-email-agraf@suse.de> List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexander Graf Cc: Carsten Otte , qemu-devel Developers On Fri, May 14, 2010 at 04:14:31PM +0200, Alexander Graf wrote: > 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 Thanks, applied. > --- > target-s390x/kvm.c | 17 ++++++++++++++--- > 1 files changed, 14 insertions(+), 3 deletions(-) > > diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c > index a2d7741..9bf6abb 100644 > --- a/target-s390x/kvm.c > +++ b/target-s390x/kvm.c > @@ -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) > -- > 1.6.0.2 > > > -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurelien@aurel32.net http://www.aurel32.net