On Mon, Jul 27, 2009 at 03:11:10PM +0100, Mark McLoughlin wrote:
On Mon, 2009-07-27 at 15:42 +0200, Daniel Veillard wrote:
> On Thu, Jul 23, 2009 at 06:34:42PM +0100, Mark McLoughlin wrote:
> > In qemu-0.11 there is a 'pc-0.10' machine type which allows you to run
> > guests with a machine which is compatible with the pc machine in
> > qemu-0.10 - e.g. using the original PCI class for virtio-blk and
> > virtio-console and disabling MSI support in virtio-net. The idea here
> > is that we don't want to suprise guests by changing the hardware when
> > qemu is updated.
> >
> > I've just posted some patches for qemu-0.11 which allows libvirt to
> > canonicalize the 'pc' machine alias to the latest machine version.
> >
> > This patches makes us use that so that when a guest is configured to
> > use the 'pc' machine type, we resolve that to 'pc-0.11' machine
and
> > save that in the guest XML.
> >
> > See also:
> >
> >
https://fedoraproject.org/wiki/Features/KVM_Stable_Guest_ABI
> >
> > * src/qemu_conf.c: add qemudCanonicalizeMachine() to canonicalize
> > the machine type according to the machine aliases in capabilities
> >
> [...]
> > /* Format is:
> > - * <machine> <desc> [(default)]
> > + * <machine> <desc> [(default)|(alias of <canonical>)]
> > */
> > static int
> > qemudParseMachineTypesStr(const char *output,
> > @@ -319,6 +319,15 @@ qemudParseMachineTypesStr(const char *output,
> > list[0] = machine;
> > nitems++;
> > }
> > +
> > + if ((t = strstr(p, "(alias of ")) && (!next || t
< next)) {
> > + p = t + strlen("(alias of ");
> > + if (!(t = strchr(p, ')')) || (next && t >=
next))
> > + continue;
> > +
> > + if (!(machine->canonical = strndup(p, t - p)))
> > + goto error;
> > + }
> > } while ((p = next));
>
> hum, if you get (alias of foo ) your canonical will end up being
> " foo " instead of "foo" maybe spaces should be stripped before
and
> after the name (i.e. it would have been perfect in an XML attribute but
> well ...)
If only we had something like g_strstrip() :-)
oh, I'm sure we have something like that in libxml2 but the name is
probably even worse :-)
> [...]
> > +static int
> > +qemudCanonicalizeMachineFromInfo(virDomainDefPtr def,
> > + virCapsGuestDomainInfoPtr info,
> > + char **canonical)
> > +{
> > + int i;
> > +
> > + *canonical = NULL;
> > +
> > + for (i = 0; i < info->nmachines; i++) {
> > + virCapsGuestMachinePtr machine = info->machines[i];
> > +
> > + if (!machine->canonical)
> > + continue;
> > +
> > + if (strcmp(def->os.machine, machine->name) != 0)
> > + continue;
> > +
> > + if (!(*canonical = strdup(machine->canonical)))
>
> virReportOOMError(NULL) please :-)
Yep, thanks.
np :-)
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit
http://xmlsoft.org/
daniel(a)veillard.com | Rpmfind RPM search engine
http://rpmfind.net/
http://veillard.com/ | virtualization library
http://libvirt.org/