From: Juan Quintela <quintela@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: qemu-devel@nongnu.org, "Michael S. Tsirkin" <mst@redhat.com>
Subject: [Qemu-devel] Re: The State of the SaveVM format
Date: Wed, 09 Sep 2009 16:49:32 +0200 [thread overview]
Message-ID: <m3my54b2bn.fsf@neno.mitica> (raw)
In-Reply-To: <4AA7BEA7.6080906@codemonkey.ws> (Anthony Liguori's message of "Wed, 09 Sep 2009 09:41:43 -0500")
Anthony Liguori <anthony@codemonkey.ws> wrote:
> Hi Juan,
> This is not quite an accurate representation.
Sorry.
> Today, you make no attempt to support older versions even if their
> format is quite sane. Take ps2_kbd as an example.
>
> The new format (v3) is:
>
> VMSTATE_STRUCT(common, PS2KbdState, 0, vmstate_ps2_common,
> PS2State),
> VMSTATE_INT32(scan_enabled, PS2KbdState),
> VMSTATE_INT32(translate, PS2KbdState),
> VMSTATE_INT32_V(scancode_set, PS2KbdState,3),
>
> This is nice and should support v2 and v3. However, you still point
> to the old savevm function which is:
> if (version_id == 3)
> s->scancode_set=qemu_get_be32(f);
> else
> s->scancode_set=2;
Problem here is this value, there is no way to set default values
different of zero. That is why there is still the old function.
> Which has to be an error. But this is the real problem with leaving
> the old functions. It encourages sloppiness.
I don't like to leave old versions either. Just we have to get a
balance between leaving old versions or get new ones.
> Let's look at a more complex example (piix_pci):
>
> VMSTATE_PCI_DEVICE(dev, PCII440FXState),
> VMSTATE_UINT8(smm_enabled, PCII440FXState),
>
> This is v3. You have an old load function that duplicates this
> functionality but has an additional field:
>
> if (version_id == 2)
> for (i = 0; i < 4; i++)
> d->irq_state->piix3->pci_irq_levels[i] = qemu_get_be32(f);
>
> All I'm suggesting, is that instead of leaving that old function, you
> introduce:
>
> static void marshal_pci_irq_levels(void *opaque, const char *name,
> size_t offset, int load, int version)
> {
> if (version == 2) {
> for (i = 0; i < 4; i++)
> d->irq_state->piix3->pci_irq_levels[i] = qemu_get_be32(f);
> }
> }
>
> VMSTATE_PCI_DEVICE(dev, PCII440FXState),
> VMSTATE_UINT8(smm_enabled, PCII440FXState),
> VMSTATE_FUNC_V(irq_state->piix3->pci_irq_levels,
> PCII440FXState, marshal_pci_irq_levels, 2)
>
> This avoids bit rot of the old load functions and makes the whole
> thing more robust. My contention is that there simply isn't a lot of
> these special cases so it's not a lot more work overall.
Ok, will take a look at doing the _own_ marshaling, it has other
features, now a field becomes optional, that is the next item.
[ Optional features stuff removed ]
> I think the discussion around optional features is orthogonal to how
> to support older savevm formats so let's keep it separate. I
> generally share your concern about test matrix explosion.
Ok. I am trying to port all the pc.c stuff to new VMState without adding
more marshaling (we already have the old load functions). After I
finish with that, we can look at the remaining cases and look at a
course of action?
> Regards,
>
> Anthony Liguori
Thanks, Juan.
next prev parent reply other threads:[~2009-09-09 14:49 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-09 8:47 [Qemu-devel] The State of the SaveVM format Juan Quintela
2009-09-09 8:54 ` [Qemu-devel] " Michael S. Tsirkin
2009-09-09 9:22 ` Juan Quintela
2009-09-09 9:33 ` Michael S. Tsirkin
2009-09-09 9:01 ` Michael S. Tsirkin
2009-09-09 9:26 ` Juan Quintela
2009-09-09 12:00 ` Michael S. Tsirkin
2009-09-09 14:33 ` [Qemu-devel] " Gerd Hoffmann
2009-09-09 14:41 ` Anthony Liguori
2009-09-09 14:49 ` Juan Quintela [this message]
2009-09-09 14:57 ` [Qemu-devel] " Anthony Liguori
2009-09-09 15:22 ` [Qemu-devel] " Gerd Hoffmann
2009-09-09 15:46 ` Anthony Liguori
2009-09-09 15:47 ` Anthony Liguori
2009-09-10 1:10 ` Markus Armbruster
2009-09-10 1:26 ` Markus Armbruster
2009-09-10 2:02 ` Anthony Liguori
2009-09-10 12:08 ` Michael S. Tsirkin
2009-09-10 12:55 ` [Qemu-devel] " Juan Quintela
2009-09-10 13:07 ` Michael S. Tsirkin
2009-09-10 13:26 ` Juan Quintela
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=m3my54b2bn.fsf@neno.mitica \
--to=quintela@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=mst@redhat.com \
--cc=qemu-devel@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.