[libvirt] [PATCH] Support network boot for HVM guests in libxl

The libxl driver ignored boot devices in the domain config, preventing PXE booting HVM domains. This patch accounts for user-specified boot devices when building the libxl domain configuration. --- I'm inclined to call this a bug fix since it is not possible to network boot HVM guests without this patch. Would it be ok to push this for 1.0.1? src/libxl/libxl_conf.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 5b6d6fb..4c0e961 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -438,6 +438,8 @@ libxlMakeDomBuildInfo(virDomainDefPtr def, libxl_domain_config *d_config) b_info->max_memkb = def->mem.max_balloon; b_info->target_memkb = def->mem.cur_balloon; if (hvm) { + char bootorder[VIR_DOMAIN_BOOT_LAST+1]; + libxl_defbool_set(&b_info->u.hvm.pae, def->features & (1 << VIR_DOMAIN_FEATURE_PAE)); libxl_defbool_set(&b_info->u.hvm.apic, @@ -450,6 +452,34 @@ libxlMakeDomBuildInfo(virDomainDefPtr def, libxl_domain_config *d_config) libxl_defbool_set(&b_info->u.hvm.hpet, 1); } } + for (i = 0 ; i < def->os.nBootDevs ; i++) { + switch (def->os.bootDevs[i]) { + case VIR_DOMAIN_BOOT_FLOPPY: + bootorder[i] = 'a'; + break; + default: + case VIR_DOMAIN_BOOT_DISK: + bootorder[i] = 'c'; + break; + case VIR_DOMAIN_BOOT_CDROM: + bootorder[i] = 'd'; + break; + case VIR_DOMAIN_BOOT_NET: + bootorder[i] = 'n'; + break; + } + } + if (def->os.nBootDevs == 0) { + bootorder[0] = 'c'; + bootorder[1] = '\0'; + } + else { + bootorder[def->os.nBootDevs] = '\0'; + } + if ((b_info->u.hvm.boot = strdup(bootorder)) == NULL) { + virReportOOMError(); + goto error; + } /* * The following comment and calculation were taken directly from -- 1.8.0.1

On 12/12/2012 02:42 PM, Jim Fehlig wrote:
The libxl driver ignored boot devices in the domain config, preventing PXE booting HVM domains. This patch accounts for user-specified boot devices when building the libxl domain configuration. ---
I'm inclined to call this a bug fix since it is not possible to network boot HVM guests without this patch. Would it be ok to push this for 1.0.1?
Agreed; I'm fine with pushing now. ACK.
src/libxl/libxl_conf.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 5b6d6fb..4c0e961 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -438,6 +438,8 @@ libxlMakeDomBuildInfo(virDomainDefPtr def, libxl_domain_config *d_config) b_info->max_memkb = def->mem.max_balloon; b_info->target_memkb = def->mem.cur_balloon; if (hvm) { + char bootorder[VIR_DOMAIN_BOOT_LAST+1];
Style nit: spaces around '+'. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org

Eric Blake wrote:
On 12/12/2012 02:42 PM, Jim Fehlig wrote:
The libxl driver ignored boot devices in the domain config, preventing PXE booting HVM domains. This patch accounts for user-specified boot devices when building the libxl domain configuration. ---
I'm inclined to call this a bug fix since it is not possible to network boot HVM guests without this patch. Would it be ok to push this for 1.0.1?
Agreed; I'm fine with pushing now.
ACK.
Pushed after fixing style nit. Thanks!
src/libxl/libxl_conf.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+)
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 5b6d6fb..4c0e961 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -438,6 +438,8 @@ libxlMakeDomBuildInfo(virDomainDefPtr def, libxl_domain_config *d_config) b_info->max_memkb = def->mem.max_balloon; b_info->target_memkb = def->mem.cur_balloon; if (hvm) { + char bootorder[VIR_DOMAIN_BOOT_LAST+1];
Style nit: spaces around '+'.
participants (2)
-
Eric Blake
-
Jim Fehlig