From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42089) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bn2AA-0006dZ-3k for qemu-devel@nongnu.org; Thu, 22 Sep 2016 07:27:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bn2A7-0007UA-Cq for qemu-devel@nongnu.org; Thu, 22 Sep 2016 07:27:34 -0400 Received: from 8.mo69.mail-out.ovh.net ([46.105.56.233]:48497) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bn2A7-0007Ts-47 for qemu-devel@nongnu.org; Thu, 22 Sep 2016 07:27:31 -0400 Received: from player779.ha.ovh.net (b9.ovh.net [213.186.33.59]) by mo69.mail-out.ovh.net (Postfix) with ESMTP id 0FE511008514 for ; Thu, 22 Sep 2016 13:27:30 +0200 (CEST) References: <20160922052105.GD7915@in.ibm.com> <1474524441.2857.159.camel@kernel.crashing.org> <20160922061514.GF7915@in.ibm.com> <1474534046.2857.166.camel@kernel.crashing.org> <87d1jw5mr0.fsf@abhimanyu.i-did-not-set--mail-host-address--so-tickle-me> <1474538671.2857.169.camel@kernel.crashing.org> <8737ks5h1c.fsf@abhimanyu.i-did-not-set--mail-host-address--so-tickle-me> From: =?UTF-8?Q?C=c3=a9dric_Le_Goater?= Message-ID: <29075577-13ca-bcbb-f6e0-9af8ca6fcbc2@kaod.org> Date: Thu, 22 Sep 2016 13:27:22 +0200 MIME-Version: 1.0 In-Reply-To: <8737ks5h1c.fsf@abhimanyu.i-did-not-set--mail-host-address--so-tickle-me> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] pseries-2.6 migration from QEMU-2.6 to QEMU-2.7 broken List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Nikunj A Dadhania , Benjamin Herrenschmidt , bharata@linux.vnet.ibm.com, aik@ozlabs.ru Cc: qemu-devel@nongnu.org, qemu-ppc@nongnu.org, david@gibson.dropbear.id.au On 09/22/2016 01:07 PM, Nikunj A Dadhania wrote: > Benjamin Herrenschmidt writes: > >> On Thu, 2016-09-22 at 14:34 +0530, Nikunj A Dadhania wrote: >>> Something like this works for KVM: >>> >>> diff --git a/target-ppc/machine.c b/target-ppc/machine.c >>> index 4820f22..1cf3779 100644 >>> --- a/target-ppc/machine.c >>> +++ b/target-ppc/machine.c >>> @@ -563,8 +563,8 @@ const VMStateDescription vmstate_ppc_cpu = { >>> >>> /* Sanity checking */ >>> VMSTATE_UINTTL_EQUAL(env.msr_mask, PowerPCCPU), >>> - VMSTATE_UINT64_EQUAL(env.insns_flags, PowerPCCPU), >>> - VMSTATE_UINT64_EQUAL(env.insns_flags2, PowerPCCPU), >>> + VMSTATE_UNUSED(sizeof(target_ulong)), /* was _EQUAL(env.insns_flags) */ >>> + VMSTATE_UNUSED(sizeof(target_ulong)), /* was _EQUAL(env.insns_flags2) */ >>> VMSTATE_UINT32_EQUAL(env.nb_BATs, PowerPCCPU), >>> VMSTATE_END_OF_LIST() >>> }, >>> >>> TCG migration still remains broken with this. >> >> Can we have conditionally present flags and a post-load that does some >> matching ? > > I think its possible like this: > > diff --git a/target-ppc/machine.c b/target-ppc/machine.c > index 4820f22..dc4704e 100644 > --- a/target-ppc/machine.c > +++ b/target-ppc/machine.c > @@ -528,6 +528,42 @@ static const VMStateDescription vmstate_tlbmas = { > } > }; > > +static bool ppc_kvm_enabled(void *opaque, int version_id) > +{ > + printf("%s: is kvm enabled %d\n", __func__, kvm_enabled()); > + return !kvm_enabled(); > +} > + > +static int get_insns_equal(QEMUFile *f, void *pv, size_t size) > +{ > + uint64_t *v = pv; > + uint64_t v2; > + qemu_get_be64s(f, &v2); > + > + printf("%s: \n", __func__); > + > + if (*v == v2) { > + return 0; > + } > + printf("Did not match, ignore %" PRIu64 " != %" PRIu64 "\n", *v, v2); > + return 0; > +} > + > +static void put_insns(QEMUFile *f, void *pv, size_t size) > +{ > + uint64_t *v = pv; > + qemu_put_be64s(f, v); > +} > + > +const VMStateInfo vmstate_info_insns_equal = { > + .name = "insns equal", > + .get = get_insns_equal, > + .put = put_insns, > +}; > + > +#define VMSTATE_INSNS_EQUAL(_f, _s, _t) \ > + VMSTATE_SINGLE_TEST(_f, _s, _t, 0, vmstate_info_insns_equal, uint64_t) > + > const VMStateDescription vmstate_ppc_cpu = { > .name = "cpu", > .version_id = 5, > @@ -563,8 +599,8 @@ const VMStateDescription vmstate_ppc_cpu = { > > /* Sanity checking */ > VMSTATE_UINTTL_EQUAL(env.msr_mask, PowerPCCPU), > - VMSTATE_UINT64_EQUAL(env.insns_flags, PowerPCCPU), > - VMSTATE_UINT64_EQUAL(env.insns_flags2, PowerPCCPU), > + VMSTATE_INSNS_EQUAL(env.insns_flags, PowerPCCPU, ppc_kvm_enabled), > + VMSTATE_INSNS_EQUAL(env.insns_flags2, PowerPCCPU, ppc_kvm_enabled), > VMSTATE_UINT32_EQUAL(env.nb_BATs, PowerPCCPU), > VMSTATE_END_OF_LIST() > }, > > > TCG migration succeeds and proceeds ahead. But fails somewhere ahead in > powerpc exception handler: > > [qemu]$ ./ppc64-softmmu/qemu-system-ppc64 -machine pseries-2.6,usb=off -vga none -nographic -m 2G ../../imgs/guest.disk -monitor pty --incoming tcp:localhost:4444 > char device redirected to /dev/pts/5 (label compat_monitor0) > ppc_kvm_enabled: is kvm enabled 0 > get_insns_equal: > Did not match, ignore 9223477658187168481 != 9223477658187151905 > ppc_kvm_enabled: is kvm enabled 0 > get_insns_equal: > Did not match, ignore 331702 != 69558 > Cannot open font file True > Cannot open font file True > qemu: fatal: Trying to deliver HV exception 4 with no HV support hmm, this is because we added MSR_HVB in msr_mask AFAICT. we should have a similar vmstate op for it I think C. > > NIP c0000000000795c8 LR d00000000074407c CTR c000000000079544 XER 0000000000000000 CPU#0 > MSR 8000000000009032 HID0 0000000000000000 HF 8000000000000030 iidx 1 didx 1 > TB 00000007 32202510341 DECR 00596259 > > Regards, > Nikunj >