From: Paul Brook <paul@codesourcery.com>
To: Chris Wright <chrisw@redhat.com>
Cc: kvm@vger.kernel.org, Jan Kiszka <jan.kiszka@siemens.com>,
Markus Armbruster <armbru@redhat.com>,
qemu-devel@nongnu.org,
Alex Williamson <alex.williamson@redhat.com>,
avi@redhat.com, kraxel@redhat.com
Subject: Re: [Qemu-devel] [RFC PATCH 1/5] qdev: Create qdev_get_dev_path()
Date: Wed, 16 Jun 2010 02:30:03 +0100 [thread overview]
Message-ID: <201006160230.04514.paul@codesourcery.com> (raw)
In-Reply-To: <20100616003555.GP24131@x200.localdomain>
> > > > > See my comment above, I'm not seeing a sufficient argument about
> > > > > why driver name matching is a false sense of security.
> > > >
> > > > I still say it should be the migration code that checks that both
> > > > vmstate structures are for the same type of device. i.e. if
> > > > necessary the device name should be embedded in the device state,
> > > > not the device path.
> > >
> > > I not sure how that fixes the ramblock issue that started this whole
> > > discussion. It's not part of device's vmstate, it goes w/ ram. I
> > > think I'm missing a piece of the puzzle here?
> >
> > My main point there was that ram blocks should be associated with a
> > device state. Once you do this it should just work as we already know
> > how to match device states.
> >
> > It you're trying to transfer ram blocks before matching up the rest of
> > the state then you're likely to loose in all kinds of different ways.
... or not. See below.
> Yes, I see, thanks for clarifying. I agree, ideally we'd create the
> entire target image dynamically. It'd still need to know how to connect
> all the guest devices to the host, but it makes more sense to me than
> half building the system from cmdline on target, then rest filled in.
Transferring the machine description on migration is a separate problem.
Lets say we associate each RAM block with a device. Each ram block also has a
name. These names distinguish between blocks attached to a given device, but
need not be globally unique. i.e. devices A and B can both have block named
"foo". RAM block migration happens before device state migration (including
device properties).
There are three relevant migration failure modes:
(1) The same device is present, but has a different size property.
If the incoming block is larger than the allocated block then you loose.
(2) A different device is present, but does not have a ram block of the same
name.
This safely fails migration because of the block name mismatch.
(3) A different device is present, that happens to have a ram block of the
same name.
If the blocks are the same size then transferring the contents is harmless.
If they are different sizes then this will be caught by (1). Either way, the
migration will be failed once we get to the vmstate check.
Note how adding the device type to the canonical address does not effect the
outcome.
Going back to the original problem, (1) is the most interesting.
I suggest that the initial migration phase transfers a list of ram blocks.
Each entry in that list should be {canonical device path, name, size}. You
should lookup all these ram blocks, and fail migration if they are not present
with the correct size[1]. This list also gives you a convenient numeric index
to identify the block during RAM migration.
[1] In the future we may be able to resize blocks. However this is not safe
with the current API.
Paul
next prev parent reply other threads:[~2010-06-16 1:30 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-14 5:51 [Qemu-devel] [RFC PATCH 0/5] Introduce canonical device hierarchy string Alex Williamson
2010-06-14 5:51 ` [Qemu-devel] [RFC PATCH 1/5] qdev: Create qdev_get_dev_path() Alex Williamson
2010-06-14 6:39 ` Markus Armbruster
2010-06-14 12:52 ` Alex Williamson
2010-06-14 13:00 ` Jan Kiszka
2010-06-14 13:09 ` Paul Brook
2010-06-14 15:29 ` Alex Williamson
2010-06-14 15:42 ` Paul Brook
2010-06-14 16:00 ` Jan Kiszka
2010-06-14 16:38 ` Alex Williamson
2010-06-14 16:49 ` Jan Kiszka
2010-06-14 18:35 ` Alex Williamson
2010-06-14 21:43 ` Paul Brook
2010-06-14 22:11 ` Alex Williamson
2010-06-14 22:46 ` Paul Brook
2010-06-15 1:14 ` Alex Williamson
2010-06-15 11:24 ` Paul Brook
2010-06-15 8:47 ` Markus Armbruster
2010-06-15 9:34 ` Jan Kiszka
2010-06-15 11:28 ` Paul Brook
2010-06-15 11:45 ` Jan Kiszka
2010-06-15 12:04 ` Paul Brook
2010-06-15 12:16 ` Jan Kiszka
2010-06-15 12:39 ` Paul Brook
2010-06-15 13:00 ` Jan Kiszka
2010-06-15 13:14 ` Paul Brook
2010-06-15 13:16 ` Markus Armbruster
2010-06-15 13:32 ` Jan Kiszka
2010-06-15 20:53 ` Alex Williamson
2010-06-15 21:55 ` Paul Brook
2010-06-15 22:33 ` Alex Williamson
2010-06-15 23:01 ` Paul Brook
2010-06-15 23:10 ` Alex Williamson
2010-06-16 0:25 ` Chris Wright
2010-06-16 0:30 ` Paul Brook
2010-06-16 0:35 ` Chris Wright
2010-06-16 1:30 ` Paul Brook [this message]
2010-06-16 2:55 ` Alex Williamson
2010-06-16 8:23 ` Markus Armbruster
2010-06-17 22:25 ` Alex Williamson
2010-06-18 9:16 ` Jan Kiszka
2010-06-18 15:01 ` Alex Williamson
2010-06-18 15:22 ` Jan Kiszka
2010-06-18 14:03 ` Markus Armbruster
2010-06-18 14:14 ` Jan Kiszka
2010-06-18 15:21 ` Alex Williamson
2010-06-15 11:42 ` Markus Armbruster
2010-06-15 11:59 ` Jan Kiszka
2010-06-15 13:07 ` Markus Armbruster
2010-06-15 13:19 ` Paul Brook
2010-06-15 13:32 ` Paul Brook
2010-06-15 15:08 ` Jan Kiszka
2010-06-16 13:02 ` Markus Armbruster
2010-06-14 5:51 ` [Qemu-devel] [RFC PATCH 2/5] savevm: Add DeviceState param Alex Williamson
2010-06-14 5:51 ` [Qemu-devel] [RFC PATCH 3/5] savevm: Make use of the new " Alex Williamson
2010-06-14 5:51 ` [Qemu-devel] [RFC PATCH 4/5] eepro100: Add a dev field to eeprom new/free functions Alex Williamson
2010-06-14 5:51 ` [Qemu-devel] [RFC PATCH 5/5] virtio-net: Incorporate a DeviceState pointer and let savevm track instances Alex Williamson
2010-06-14 7:02 ` [Qemu-devel] Re: [RFC PATCH 0/5] Introduce canonical device hierarchy string Gerd Hoffmann
2010-06-14 19:56 ` Alex Williamson
2010-06-15 8:53 ` Markus Armbruster
2010-06-15 18:01 ` Alex Williamson
2010-06-16 8:34 ` Markus Armbruster
2010-06-16 8:36 ` Markus Armbruster
2010-06-15 9:12 ` Gerd Hoffmann
2010-06-15 18:03 ` Alex Williamson
2010-06-16 9:46 ` RFC qdev path semantics (was: [Qemu-devel] [RFC PATCH 0/5] Introduce canonical device hierarchy string) Markus Armbruster
2010-06-16 10:40 ` Paul Brook
2010-06-16 11:37 ` [Qemu-devel] Re: RFC qdev path semantics Jan Kiszka
2010-06-16 11:45 ` Paul Brook
2010-06-16 12:01 ` Jan Kiszka
2010-06-16 12:21 ` Paul Brook
2010-06-16 13:50 ` Jan Kiszka
2010-06-16 13:05 ` Markus Armbruster
2010-06-16 13:23 ` Paul Brook
2010-06-16 14:31 ` Markus Armbruster
2010-06-17 21:43 ` Alex Williamson
2010-06-17 22:01 ` Paul Brook
2010-06-17 22:34 ` Alex Williamson
2010-06-18 7:52 ` Gerd Hoffmann
2010-06-18 14:58 ` Markus Armbruster
2010-06-22 14:27 ` Anthony Liguori
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=201006160230.04514.paul@codesourcery.com \
--to=paul@codesourcery.com \
--cc=alex.williamson@redhat.com \
--cc=armbru@redhat.com \
--cc=avi@redhat.com \
--cc=chrisw@redhat.com \
--cc=jan.kiszka@siemens.com \
--cc=kraxel@redhat.com \
--cc=kvm@vger.kernel.org \
--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 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).