From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45078) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XcHZX-0000yh-OC for qemu-devel@nongnu.org; Thu, 09 Oct 2014 13:32:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XcHZQ-0005RJ-IT for qemu-devel@nongnu.org; Thu, 09 Oct 2014 13:32:15 -0400 Received: from e06smtp16.uk.ibm.com ([195.75.94.112]:56314) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XcHZQ-0005Qo-A6 for qemu-devel@nongnu.org; Thu, 09 Oct 2014 13:32:08 -0400 Received: from /spool/local by e06smtp16.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 9 Oct 2014 18:32:07 +0100 Received: from b06cxnps4074.portsmouth.uk.ibm.com (d06relay11.portsmouth.uk.ibm.com [9.149.109.196]) by d06dlp03.portsmouth.uk.ibm.com (Postfix) with ESMTP id B9A7D1B08023 for ; Thu, 9 Oct 2014 18:33:20 +0100 (BST) Received: from d06av08.portsmouth.uk.ibm.com (d06av08.portsmouth.uk.ibm.com [9.149.37.249]) by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id s99HW44C16253354 for ; Thu, 9 Oct 2014 17:32:04 GMT Received: from d06av08.portsmouth.uk.ibm.com (localhost [127.0.0.1]) by d06av08.portsmouth.uk.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id s99HW4Yh014257 for ; Thu, 9 Oct 2014 11:32:04 -0600 Date: Thu, 9 Oct 2014 19:32:02 +0200 From: Cornelia Huck Message-ID: <20141009193202.3a1925d6.cornelia.huck@de.ibm.com> In-Reply-To: References: <1412861761-22047-1-git-send-email-cornelia.huck@de.ibm.com> <1412861761-22047-8-git-send-email-cornelia.huck@de.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PULL 7/8] s390x/migration: migrate CPU state List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell , Thomas Huth Cc: Christian Borntraeger , QEMU Developers , Alexander Graf , David Hildenbrand , Jens Freimann , "Jason J. Herne" , Andreas Faerber On Thu, 9 Oct 2014 17:28:57 +0100 Peter Maydell wrote: > On 9 October 2014 14:36, Cornelia Huck wrote: > > From: Thomas Huth > > > > This patch provides the cpu save information for dumps and later life > > migration and enables migration of the CPU state. The code is based on > > earlier work from Christian Borntraeger and Jason Herne. > > > > Signed-off-by: Thomas Huth > > Signed-off-by: David Hildenbrand > > [provide cpu_post_load()] > > Signed-off-by: Jens Freimann > > CC: Andreas Faerber > > CC: Christian Borntraeger > > CC: Jason J. Herne > > Tested-by: Christian Borntraeger > > Signed-off-by: Cornelia Huck > > --- > > target-s390x/cpu.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++-- > > 1 file changed, 57 insertions(+), 2 deletions(-) > > > > diff --git a/target-s390x/cpu.c b/target-s390x/cpu.c > > index ec7df90..c9c237f 100644 > > --- a/target-s390x/cpu.c > > +++ b/target-s390x/cpu.c > > I think the migration code should live in machine.c like > it does for our other targets. (Among other useful things, > this means you can have the makefile say > obj-$(CONFIG_SOFTMMU) += machine.o > so it doesn't try to build it for the linux-user target :-)) Probably. Thomas, can you look into that (and the other comments)? > > > @@ -292,9 +292,64 @@ unsigned int s390_cpu_set_state(uint8_t cpu_state, S390CPU *cpu) > > } > > #endif > > > > +static int cpu_post_load(void *opaque, int version_id) > > +{ > > + S390CPU *cpu = opaque; > > + > > + /* the cpu state is fine for QEMU - we just need to push it to kvm */ > > + if (kvm_enabled()) { > > + kvm_s390_set_cpu_state(cpu, cpu->env.cpu_state); > > + } > > Haven't looked at the detail but I'm vaguely surprised > this has to be done manually rather than it just > being automatically resynced when we next try to > run the vCPU. We also need to propagate state to vcpus that have not been yet run, as code targeting other vcpus may need to check it. > > > + > > + return 0; > > +} > > + > > static const VMStateDescription vmstate_s390_cpu = { > > .name = "cpu", > > - .unmigratable = 1, > > + .post_load = cpu_post_load, > > + .version_id = 1, > > + .minimum_version_id = 1, > > + .minimum_version_id_old = 1, > > You don't need minimum_version_id_old any more. > > > + .fields = (VMStateField[]) { > > + VMSTATE_UINT64(env.fregs[0].ll, S390CPU), > > + VMSTATE_UINT64(env.fregs[1].ll, S390CPU), > > + VMSTATE_UINT64(env.fregs[2].ll, S390CPU), > > + VMSTATE_UINT64(env.fregs[3].ll, S390CPU), > > + VMSTATE_UINT64(env.fregs[4].ll, S390CPU), > > + VMSTATE_UINT64(env.fregs[5].ll, S390CPU), > > + VMSTATE_UINT64(env.fregs[6].ll, S390CPU), > > + VMSTATE_UINT64(env.fregs[7].ll, S390CPU), > > + VMSTATE_UINT64(env.fregs[8].ll, S390CPU), > > + VMSTATE_UINT64(env.fregs[9].ll, S390CPU), > > + VMSTATE_UINT64(env.fregs[10].ll, S390CPU), > > + VMSTATE_UINT64(env.fregs[11].ll, S390CPU), > > + VMSTATE_UINT64(env.fregs[12].ll, S390CPU), > > + VMSTATE_UINT64(env.fregs[13].ll, S390CPU), > > + VMSTATE_UINT64(env.fregs[14].ll, S390CPU), > > + VMSTATE_UINT64(env.fregs[15].ll, S390CPU), > > + VMSTATE_UINT64_ARRAY(env.regs, S390CPU, 16), > > + VMSTATE_UINT64(env.psw.mask, S390CPU), > > + VMSTATE_UINT64(env.psw.addr, S390CPU), > > + VMSTATE_UINT64(env.psa, S390CPU), > > + VMSTATE_UINT32(env.fpc, S390CPU), > > + VMSTATE_UINT32(env.todpr, S390CPU), > > + VMSTATE_UINT64(env.pfault_token, S390CPU), > > + VMSTATE_UINT64(env.pfault_compare, S390CPU), > > + VMSTATE_UINT64(env.pfault_select, S390CPU), > > + VMSTATE_UINT64(env.cputm, S390CPU), > > + VMSTATE_UINT64(env.ckc, S390CPU), > > + VMSTATE_UINT64(env.gbea, S390CPU), > > + VMSTATE_UINT64(env.pp, S390CPU), > > + VMSTATE_UINT32_ARRAY(env.aregs, S390CPU, 16), > > + VMSTATE_UINT64_ARRAY(env.cregs, S390CPU, 16), > > + VMSTATE_UINT8(env.cpu_state, S390CPU), > > + VMSTATE_END_OF_LIST() > > + }, > > + .subsections = (VMStateSubsection[]) { > > + { > > + /* empty */ > > + } > > Why the empty subsections list? > > > + } > > }; > > thanks > -- PMM >