Re: [Qemu-devel] [RFC PATCH 3/6] RAMBlock: Add a name field

Alex Williamson
2010-06-11T15:51:08Z

On Fri, 2010-06-11 at 10:48 +0200, Gerd Hoffmann wrote:
> On 06/10/10 17:21, Alex Williamson wrote:
> > On Thu, 2010-06-10 at 15:49 +0100, Paul Brook wrote:
> >>> Ok, we can certainly do<vmsd->name>.<vmsd->instance>\<driver string>.
> >>> It seems like this highlights a deficiency in the vmstate matching
> >>
> >> Why are you forcing this to be a string?
> >
> > It seemed like a good way to send an identifier. What do you suggest?
>
> Do it the same way savevm handles device state? I think it simply puts
> a u32 for the instance id.

I see, so then we'd have:

uint8 - string length (should we decide to go with a variable length)
buffer - "<vmsd->name>\<driver string>"
uint32 - instance_id

I'm not sure I see the benefit to that since then we'd have to do both a
strcmp and an instance_id match. It's unlikely we'll have instance_ids
large enough that even make it a space savings in the protocol stream
versus "name.id" ("e1000.0").

The trouble I'm running into is that the SaveStateEntry.instance_id is
effectively private, and there's no easy way to associate a
SaveStateEntry to a device since it passes an opaque pointer, which
could be whatever the driver decides it wants. I'm wondering if we
should pass the DeviceState pointer in when registering the vmstate so
that we can stuff the instance_id into the DeviceInfo. Or maybe
DeviceInfo should include a pointer to the SaveStateEntry. It all seems
pretty messy. Any thoughts?

Alex