From: Paolo Bonzini <pbonzini@redhat.com>
To: Jason Wang <jasowang@redhat.com>
Cc: kwolf@redhat.com, qemu-devel@nongnu.org, quintela@redhat.com
Subject: [Qemu-devel] Re: [PATCH] floppy: save and restore DIR register
Date: Mon, 28 Mar 2011 09:49:20 +0200 [thread overview]
Message-ID: <4D903D80.1090100@redhat.com> (raw)
In-Reply-To: <19855.62739.96012.591499@gargle.gargle.HOWL>
On 03/28/2011 04:40 AM, Jason Wang wrote:
> > On 03/25/2011 07:27 AM, Jason Wang wrote:
> > > We need to keep DIR register unchanged across migration, but currently it
> > > depends on the media_changed flags from block layer and we do not save/restore
> > > it which could let the guest driver think the floppy have changed after
> > > migration. To fix this, a new filed media_changed in FDrive strcutre was
> > > introduced in order to save and restore the it from block layer through
> > > pre_save/post_load callbacks.
> >
> > I guess you can avoid saving if the media changed flag is zero, too
> > (which should be the common case after the guest has booted, right?).
> >
> > Paolo
>
> Yes, zero is the common case, but the bdrv_open() called by listening qemu in
> dest mode would always set the media_changed to one, so we must save and restore
> it during migration.
If zero is the common case, you can do something like this to avoid
saving the subsection in the common case and allow seamless migration
from 0.15 to 0.14:
static void fdrive_pre_save(void *opaque)
{
FDrive *drive = opaque;
if (drive->bs != NULL) {
drive->media_changed = drive->bs->media_changed;
} else {
drive->media_changed = 2;
}
}
static void fdrive_pre_load(void *opaque)
{
FDrive *drive = opaque;
/* Set the default value in case there is no subsection. */
if (drive->bs != NULL) {
drive->media_changed = 0;
} else {
drive->media_changed = 2;
}
}
static void fdrive_post_load(void *opaque)
{
/* Fail if the source machine had a disk and we don't. */
if (drive->bs == NULL && drive->media_changed != 2) {
return 1;
}
/* Reset the field if both us and the source machine have a disk. */
if (drive->bs != NULL && drive->media_changed != 2) {
/* bdrv_open() called in dest node may set the
media_changed flag when trying to open floppy image.
Copy it here, so that it is reset even if the subsection
was not saved. */
drive->bs->media_changed = drive->media_changed;
}
return 0;
}
static bool fdrive_media_changed_needed(void *opaque)
{
FDrive *drive = opaque;
return (drive->bs != NULL && drive->media_changed != 0);
}
Note that there is a small change here: if the media changed flag is 1
and you migrate 0.14 to 0.15, the destination machine will see the flag
reset to 0 (while 0.14 to 0.14 will see the flag set to 1 just because
that's how bdrv_open leaves it).
To fix this, you can define a boolean qdev property
default_migration_media_changed and use it instead of the two hard-coded
"0" values. Then, register the default value of the property in
hw/pc_piix.c to be 0 in pc-0.15, and 1 in pc-0.14 and older.
Paolo
prev parent reply other threads:[~2011-03-28 7:49 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-25 6:27 [Qemu-devel] [PATCH] floppy: save and restore DIR register Jason Wang
2011-03-25 9:25 ` [Qemu-devel] " Juan Quintela
2011-03-25 11:56 ` Paolo Bonzini
2011-03-28 2:40 ` Jason Wang
2011-03-28 7:49 ` Paolo Bonzini [this message]
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=4D903D80.1090100@redhat.com \
--to=pbonzini@redhat.com \
--cc=jasowang@redhat.com \
--cc=kwolf@redhat.com \
--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).