From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>,
bharata@linux.vnet.ibm.com, aik@ozlabs.ru, clg@kaod.org,
qemu-ppc@nongnu.org, qemu-devel@nongnu.org,
david@gibson.dropbear.id.au
Subject: Re: [Qemu-devel] pseries-2.6 migration from QEMU-2.6 to QEMU-2.7 broken
Date: Thu, 22 Sep 2016 17:07:18 +0100 [thread overview]
Message-ID: <20160922160717.GA24720@work-vm> (raw)
In-Reply-To: <8737ks5h1c.fsf@abhimanyu.i-did-not-set--mail-host-address--so-tickle-me>
* Nikunj A Dadhania (nikunj@linux.vnet.ibm.com) wrote:
> Benjamin Herrenschmidt <benh@kernel.crashing.org> 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,
> +};
> +
I'd prefer it if you can avoid adding qemu_get/put's unless
really desperate; I'm trying to squash all the read/writing back into
standard macros; but I understand it can be tricky.
I'd agree that a post_load is the nicest way; it can return
an error value.
(Oh and ideally use error_report)
Dave
> +#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
>
> 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
>
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2016-09-22 16:07 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-22 5:21 [Qemu-devel] pseries-2.6 migration from QEMU-2.6 to QEMU-2.7 broken Bharata B Rao
2016-09-22 5:30 ` David Gibson
2016-09-22 6:00 ` Bharata B Rao
2016-09-22 6:36 ` Cédric Le Goater
2016-09-22 9:46 ` Dr. David Alan Gilbert
2016-09-22 10:01 ` Nikunj A Dadhania
2016-09-22 10:28 ` Dr. David Alan Gilbert
2016-09-22 11:18 ` Nikunj A Dadhania
2016-09-22 6:07 ` Benjamin Herrenschmidt
2016-09-22 6:15 ` Bharata B Rao
2016-09-22 8:47 ` Benjamin Herrenschmidt
2016-09-22 9:04 ` Nikunj A Dadhania
2016-09-22 10:04 ` Benjamin Herrenschmidt
2016-09-22 10:32 ` Paolo Bonzini
2016-09-22 11:07 ` Benjamin Herrenschmidt
2016-09-23 1:01 ` David Gibson
2016-09-22 11:07 ` Nikunj A Dadhania
2016-09-22 11:27 ` Cédric Le Goater
2016-09-22 11:37 ` Benjamin Herrenschmidt
2016-09-23 1:37 ` David Gibson
2016-09-23 3:27 ` Benjamin Herrenschmidt
2016-09-23 5:49 ` David Gibson
2016-09-22 19:00 ` Nikunj A Dadhania
2016-09-22 16:07 ` Dr. David Alan Gilbert [this message]
2016-09-22 17:27 ` Nikunj A Dadhania
2016-09-22 10:34 ` Alexey Kardashevskiy
2016-09-22 11:09 ` Benjamin Herrenschmidt
2016-09-23 0:52 ` David Gibson
2016-09-23 3:18 ` Nikunj A Dadhania
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160922160717.GA24720@work-vm \
--to=dgilbert@redhat.com \
--cc=aik@ozlabs.ru \
--cc=benh@kernel.crashing.org \
--cc=bharata@linux.vnet.ibm.com \
--cc=clg@kaod.org \
--cc=david@gibson.dropbear.id.au \
--cc=nikunj@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.