Message ID | 20210817151924.6674-1-jane.malalane@citrix.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | libs/guest: Move the guest ABI check earlier into xc_dom_parse_image() | expand |
On 17/08/2021 16:19, Jane Malalane wrote: > Xen may not support 32-bit PV guest for a number of reasons (lack of > CONFIG_PV32, explicit pv=no-32 command line argument, or implicitly > due to CET being enabled) and advertises this to the toolstack via the > absence of xen-3.0-x86_32p ABI. > > Currently, when trying to boot a 32-bit PV guest, the ABI check is too > late and the build explodes in the following manner yielding an > unhelpful error message: > > xc: error: panic: xg_dom_boot.c:121: xc_dom_boot_mem_init: can't allocate low memory for domain: Out of memory > libxl: error: libxl_dom.c:586:libxl__build_dom: xc_dom_boot_mem_init failed: Operation not supported > libxl: error: libxl_create.c:1573:domcreate_rebuild_done: Domain 1:cannot (re-)build domain: -3 > libxl: error: libxl_domain.c:1182:libxl__destroy_domid: Domain 1:Non-existant domain > libxl: error: libxl_domain.c:1136:domain_destroy_callback: Domain 1:Unable to destroy guest > libxl: error: libxl_domain.c:1063:domain_destroy_cb: Domain 1:Destruction of domain failed > > Move the ABI check earlier into xc_dom_parse_image() along with other > ELF-note feature checks. With this adjustment, it now looks like > this: > > xc: error: panic: xg_dom_boot.c:88: xc_dom_compat_check: guest type xen-3.0-x86_32p not supported by xen kernel, sorry: Invalid kernel > libxl: error: libxl_dom.c:571:libxl__build_dom: xc_dom_parse_image failed > domainbuilder: detail: xc_dom_release: called > libxl: error: libxl_create.c:1573:domcreate_rebuild_done: Domain 11:cannot (re-)build domain: -3 > libxl: error: libxl_domain.c:1182:libxl__destroy_domid: Domain 11:Non-existant domain > libxl: error: libxl_domain.c:1136:domain_destroy_callback: Domain 11:Unable to destroy guest > libxl: error: libxl_domain.c:1063:domain_destroy_cb: Domain 11:Destruction of domain failed > > Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com> > Signed-off-by: Jane Malalane <jane.malalane@citrix.com> FWIW, Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com> The net behaviour of `xl create` is still not great (the -3 in particular is ESRCH looking for qemu which isn't remotely relevant), but at least with this change, you get "guest type xen-3.0-x86_32p not supported by xen" out of libxc which is the root cause of the failure. ~Andrew
Andrew Cooper writes ("Re: [PATCH] libs/guest: Move the guest ABI check earlier into xc_dom_parse_image()"): > On 17/08/2021 16:19, Jane Malalane wrote: > > Xen may not support 32-bit PV guest for a number of reasons (lack of > > CONFIG_PV32, explicit pv=no-32 command line argument, or implicitly > > due to CET being enabled) and advertises this to the toolstack via the > > absence of xen-3.0-x86_32p ABI. > > > > Currently, when trying to boot a 32-bit PV guest, the ABI check is too > > late and the build explodes in the following manner yielding an > > unhelpful error message: > > > > xc: error: panic: xg_dom_boot.c:121: xc_dom_boot_mem_init: can't allocate low memory for domain: Out of memory > > libxl: error: libxl_dom.c:586:libxl__build_dom: xc_dom_boot_mem_init failed: Operation not supported > > libxl: error: libxl_create.c:1573:domcreate_rebuild_done: Domain 1:cannot (re-)build domain: -3 > > libxl: error: libxl_domain.c:1182:libxl__destroy_domid: Domain 1:Non-existant domain > > libxl: error: libxl_domain.c:1136:domain_destroy_callback: Domain 1:Unable to destroy guest > > libxl: error: libxl_domain.c:1063:domain_destroy_cb: Domain 1:Destruction of domain failed > > > > Move the ABI check earlier into xc_dom_parse_image() along with other > > ELF-note feature checks. With this adjustment, it now looks like > > this: > > > > xc: error: panic: xg_dom_boot.c:88: xc_dom_compat_check: guest type xen-3.0-x86_32p not supported by xen kernel, sorry: Invalid kernel > > libxl: error: libxl_dom.c:571:libxl__build_dom: xc_dom_parse_image failed > > domainbuilder: detail: xc_dom_release: called > > libxl: error: libxl_create.c:1573:domcreate_rebuild_done: Domain 11:cannot (re-)build domain: -3 > > libxl: error: libxl_domain.c:1182:libxl__destroy_domid: Domain 11:Non-existant domain > > libxl: error: libxl_domain.c:1136:domain_destroy_callback: Domain 11:Unable to destroy guest > > libxl: error: libxl_domain.c:1063:domain_destroy_cb: Domain 11:Destruction of domain failed > > > > Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com> > > Signed-off-by: Jane Malalane <jane.malalane@citrix.com> > > FWIW, Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com> > > The net behaviour of `xl create` is still not great (the -3 in > particular is ESRCH looking for qemu which isn't remotely relevant), but > at least with this change, you get "guest type xen-3.0-x86_32p not > supported by xen" out of libxc which is the root cause of the failure. Acked-by: Ian Jackson <iwj@xenproject.org>
diff --git a/tools/libs/guest/xg_dom_boot.c b/tools/libs/guest/xg_dom_boot.c index dac96b17a5..f809dcbe97 100644 --- a/tools/libs/guest/xg_dom_boot.c +++ b/tools/libs/guest/xg_dom_boot.c @@ -191,10 +191,6 @@ int xc_dom_boot_image(struct xc_dom_image *dom) } dom->shared_info_mfn = info.shared_info_frame; - /* sanity checks */ - if ( !xc_dom_compat_check(dom) ) - return -1; - /* initial mm setup */ if ( dom->arch_hooks->setup_pgtables && (rc = dom->arch_hooks->setup_pgtables(dom)) != 0 ) diff --git a/tools/libs/guest/xg_dom_core.c b/tools/libs/guest/xg_dom_core.c index 4918ee517b..2e4c1330ea 100644 --- a/tools/libs/guest/xg_dom_core.c +++ b/tools/libs/guest/xg_dom_core.c @@ -922,6 +922,10 @@ int xc_dom_parse_image(struct xc_dom_image *dom) goto err; } + /* Check guest ABI */ + if ( !xc_dom_compat_check(dom) ) + return -1; + /* check features */ for ( i = 0; i < XENFEAT_NR_SUBMAPS; i++ ) {
Xen may not support 32-bit PV guest for a number of reasons (lack of CONFIG_PV32, explicit pv=no-32 command line argument, or implicitly due to CET being enabled) and advertises this to the toolstack via the absence of xen-3.0-x86_32p ABI. Currently, when trying to boot a 32-bit PV guest, the ABI check is too late and the build explodes in the following manner yielding an unhelpful error message: xc: error: panic: xg_dom_boot.c:121: xc_dom_boot_mem_init: can't allocate low memory for domain: Out of memory libxl: error: libxl_dom.c:586:libxl__build_dom: xc_dom_boot_mem_init failed: Operation not supported libxl: error: libxl_create.c:1573:domcreate_rebuild_done: Domain 1:cannot (re-)build domain: -3 libxl: error: libxl_domain.c:1182:libxl__destroy_domid: Domain 1:Non-existant domain libxl: error: libxl_domain.c:1136:domain_destroy_callback: Domain 1:Unable to destroy guest libxl: error: libxl_domain.c:1063:domain_destroy_cb: Domain 1:Destruction of domain failed Move the ABI check earlier into xc_dom_parse_image() along with other ELF-note feature checks. With this adjustment, it now looks like this: xc: error: panic: xg_dom_boot.c:88: xc_dom_compat_check: guest type xen-3.0-x86_32p not supported by xen kernel, sorry: Invalid kernel libxl: error: libxl_dom.c:571:libxl__build_dom: xc_dom_parse_image failed domainbuilder: detail: xc_dom_release: called libxl: error: libxl_create.c:1573:domcreate_rebuild_done: Domain 11:cannot (re-)build domain: -3 libxl: error: libxl_domain.c:1182:libxl__destroy_domid: Domain 11:Non-existant domain libxl: error: libxl_domain.c:1136:domain_destroy_callback: Domain 11:Unable to destroy guest libxl: error: libxl_domain.c:1063:domain_destroy_cb: Domain 11:Destruction of domain failed Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com> Signed-off-by: Jane Malalane <jane.malalane@citrix.com> --- CC: Ian Jackson <iwj@xenproject.org> CC: Wei Liu <wl@xen.org> CC: Juergen Gross <jgross@suse.com> --- tools/libs/guest/xg_dom_boot.c | 4 ---- tools/libs/guest/xg_dom_core.c | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-)