From: Kevin Wolf <kwolf@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: John Snow <jsnow@redhat.com>,
QEMU Developers <qemu-devel@nongnu.org>,
qemu-block@nongnu.org, Juan Quintela <quintela@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 3/8] fdc: Introduce fdctrl->phase
Date: Thu, 21 May 2015 12:31:45 +0200 [thread overview]
Message-ID: <20150521103145.GB6143@noname.redhat.com> (raw)
In-Reply-To: <CAFEAcA89WYKenSymXs3T_8aV7fOivP15AZbgnzixcSA_ywCLVg@mail.gmail.com>
Am 21.05.2015 um 12:11 hat Peter Maydell geschrieben:
> On 21 May 2015 at 10:42, Kevin Wolf <kwolf@redhat.com> wrote:
> > Am 20.05.2015 um 14:07 hat Peter Maydell geschrieben:
> >> On 20 May 2015 at 12:55, John Snow <jsnow@redhat.com> wrote:
> >> > So even if /currently/ we can reconstitute it from the register values,
> >> > we may eventually be unable to.
> >> >
> >> > post_load will work for now, but I fear the case (in ten years) when
> >> > someone else cleans up FDC code but fails to realize that the phase is
> >> > not explicitly migrated.
> >>
> >> I assumed we would only do the post-load thing if the
> >> source for migration doesn't migrate phase (however we
> >> phrase that in a vmstate struct).
> >
> > I think if we extend the VMState, then we have two options. I'm not
> > exactly sure how they work in details, but I'll try an educated guess -
> > Juan, please correct me if I'm wrong:
> >
> > 1. We increase version_id and add the new field at the end. This breaks
> > backwards migration; on forward migration the new field would be
> > initialised with 0 and a post_load handler could check the old
> > version_id to calculate the phase from register bits.
> >
> > 2. We add a subsection for the phase, and declare one phase to be the
> > default (most likely the command phase) for which a subsection is not
> > sent. In this case, the destination can't distinguish between a
> > missing subsection because the source was running an old qemu or
> > because it is the default phase. Unclear whether post_load should
> > recalculate the phase or not.
>
> 2b add a subsection, send the subsection always in new qemu,
> if receiving from an old qemu then calculate the phase from
> the register fields in post-load
>
> That's like 1 but just using a subsection rather than a new field.
> (I have a vague recollection that distros doing backports prefer
> subsections over increment-version-id-and-add-field).
Hm, okay. The post_load handler doesn't have the version id then to
check. If a subsection isn't present, are its fields initialised as 0?
Or what would be the right way to check whether the subsection was
there?
Any pointers to device that do something similar?
> > If the above is correct, I'm afraid that the third option - which
> > doesn't address John's (valid) concerns - would be the most reasonable:
> >
> > 3. Don't add any VMState fields now and just do the post_load handler.
> > If we ever extend fdc in a way that makes it impossible to
> > reconstruct the phase from other migrated state, we add a subsection
> > that is only sent in cases where it differs from the reconstructed
> > value.
>
> I'm definitely against this one. State should always be
> sent in migration, and not doing that once we've added
> it to the device struct is a bug.
On second thought, I could actually add that subsection now and write
the .needed callback such that it checks whether the reconstructed phase
matches the actual one. This condition would always evaluate as false
today, but if we ever change things so that the phase doesn't match what
current qemu would think it is, you automatically get the subsection and
things Just Work (TM).
This also wouldn't break backwards migration for now, and only break it
in future cases if it would really result in a broken device on the
destination.
Kevin
next prev parent reply other threads:[~2015-05-21 10:31 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-19 15:35 [Qemu-devel] [PATCH 0/8] fdc: Clean up and fix command processing Kevin Wolf
2015-05-19 15:35 ` [Qemu-devel] [PATCH 1/8] fdc: Rename fdctrl_reset_fifo() to fdctrl_to_command_phase() Kevin Wolf
2015-05-19 20:37 ` John Snow
2015-05-19 15:35 ` [Qemu-devel] [PATCH 2/8] fdc: Rename fdctrl_set_fifo() to fdctrl_to_result_phase() Kevin Wolf
2015-05-19 20:38 ` John Snow
2015-05-19 15:35 ` [Qemu-devel] [PATCH 3/8] fdc: Introduce fdctrl->phase Kevin Wolf
2015-05-19 20:38 ` John Snow
2015-05-19 20:44 ` Peter Maydell
2015-05-19 20:52 ` John Snow
2015-05-19 20:57 ` Peter Maydell
2015-05-20 7:54 ` Kevin Wolf
2015-05-20 8:06 ` Peter Maydell
2015-05-20 8:43 ` Kevin Wolf
2015-05-20 9:24 ` Peter Maydell
2015-05-20 11:55 ` John Snow
2015-05-20 12:07 ` Peter Maydell
2015-05-21 9:42 ` Kevin Wolf
2015-05-21 9:47 ` Dr. David Alan Gilbert
2015-05-21 10:11 ` Peter Maydell
2015-05-21 10:31 ` Kevin Wolf [this message]
2015-05-21 11:09 ` Markus Armbruster
2015-05-21 11:14 ` Peter Maydell
2015-05-21 11:37 ` Dr. David Alan Gilbert
2015-05-19 15:35 ` [Qemu-devel] [PATCH 4/8] fdc: Use phase in fdctrl_write_data() Kevin Wolf
2015-05-19 20:39 ` John Snow
2015-05-19 20:52 ` Peter Maydell
2015-05-19 15:35 ` [Qemu-devel] [PATCH 5/8] fdc: Code cleanup " Kevin Wolf
2015-05-19 20:40 ` John Snow
2015-05-20 8:18 ` Kevin Wolf
2015-05-19 15:36 ` [Qemu-devel] [PATCH 6/8] fdc: Disentangle phases in fdctrl_read_data() Kevin Wolf
2015-05-19 20:40 ` John Snow
2015-05-20 8:25 ` Kevin Wolf
2015-05-20 11:59 ` John Snow
2015-05-19 15:36 ` [Qemu-devel] [PATCH 7/8] fdc: Fix MSR.RQM flag Kevin Wolf
2015-05-19 20:40 ` John Snow
2015-05-20 8:14 ` Kevin Wolf
2015-05-20 11:58 ` John Snow
2015-05-19 15:36 ` [Qemu-devel] [PATCH 8/8] fdc-test: Test state for existing cases more thoroughly Kevin Wolf
2015-05-19 20:41 ` John Snow
2015-05-19 20:37 ` [Qemu-devel] [PATCH 0/8] fdc: Clean up and fix command processing John Snow
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=20150521103145.GB6143@noname.redhat.com \
--to=kwolf@redhat.com \
--cc=jsnow@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).