[libvirt] PATCH: Support bootloaders in QEMU driver

Daniel Veillard veillard at redhat.com
Thu May 15 15:09:13 UTC 2008


On Tue, May 13, 2008 at 12:31:36AM +0100, Daniel P. Berrange wrote:
> The QEMU driver supports booting Xen guests via the Xenner hypervisor.  For
> such paravirtualized guests there is no regular BIOS, so the bootloader has
> to be run on the host. Xenner defaults  to pygrub, but since libvirt has a
> generic syntax for bootloaders, we should use it. So this patch adds support
> for the <bootloader> syntax in the QEMU drive, and passes this to Xenner via
> the -bootloader arg.
> 
> The patch is overly large, because when we have a bootloader we need to skip
> the kernel/initrd/cmdline/boot elements & thus caused alot of intrusive code
> re-indentation .
[...]
>  
> +    /* Extract bootloader */
> +    obj = xmlXPathEval(BAD_CAST "string(/domain/bootloader)", ctxt);
> +    if ((obj != NULL) && (obj->type == XPATH_STRING) &&
> +        (obj->stringval != NULL) && (obj->stringval[0] != 0)) {
> +        strncpy(def->os.bootloader, (const char*)obj->stringval, sizeof(def->os.bootloader));
> +        NUL_TERMINATE(def->os.bootloader);
> +        xmlXPathFreeObject(obj);
> +
> +        /* Set a default OS type, since <type> is optional with bootloader */
> +        strcpy(def->os.type, "xen");
> +    }
> +
>      /* Extract OS type info */
>      obj = xmlXPathEval(BAD_CAST "string(/domain/os/type[1])", ctxt);
>      if ((obj == NULL) || (obj->type != XPATH_STRING) ||
>          (obj->stringval == NULL) || (obj->stringval[0] == 0)) {
> +        if (!def->os.type[0]) {
> +            qemudReportError(conn, NULL, NULL, VIR_ERR_OS_TYPE,
> +                             "%s", _("no OS type"));
> +            goto error;
> +        }
> +    } else {
> +        strcpy(def->os.type, (const char *)obj->stringval);
> +        xmlXPathFreeObject(obj);
> +    }

  Argh, that part of the code has not been cleaned up, using virXPathString
there would make this way easier to read and check.

  The big indentation block change inflated the patch size a bit. it still
look fine.

Daniel

-- 
Red Hat Virtualization group http://redhat.com/virtualization/
Daniel Veillard      | virtualization library  http://libvirt.org/
veillard at redhat.com  | libxml GNOME XML XSLT toolkit  http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine  http://rpmfind.net/




More information about the libvir-list mailing list