I was presented with this:
(XEN) NX (Execute Disable) protection active
(XEN) d0 has maximum 416 PIRQs
(XEN)
(XEN) ****************************************
(XEN) Panic on CPU 0:
(XEN) Error creating d0: -95
(XEN) ****************************************
which is less than helpful. It turns out to be the -EOPNOTSUPP from
shadow_domain_init().
The real bug here is create_dom0() unconditionally assuming the presence of
SHADOW_PAGING. Rework it to panic() rather than choosing a dom0_cfg which is
guaranteed to fail. This results in:
(XEN) NX (Execute Disable) protection active
(XEN)
(XEN) ****************************************
(XEN) Panic on CPU 0:
(XEN) Neither HAP nor Shadow available for PVH domain
(XEN) ****************************************
which is rather more helpful.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
CC: Roger Pau Monné <roger.pau@citrix.com>
---
xen/arch/x86/setup.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
index f32efa7c6045..24e4f5ac7f5d 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -1033,9 +1033,12 @@ static struct domain *__init create_dom0(struct boot_info *bi)
if ( opt_dom0_pvh )
{
- dom0_cfg.flags |= (XEN_DOMCTL_CDF_hvm |
- ((hvm_hap_supported() && !opt_dom0_shadow) ?
- XEN_DOMCTL_CDF_hap : 0));
+ dom0_cfg.flags |= XEN_DOMCTL_CDF_hvm;
+
+ if ( hvm_hap_supported() && !opt_dom0_shadow )
+ dom0_cfg.flags |= XEN_DOMCTL_CDF_hap;
+ else if ( !IS_ENABLED(CONFIG_SHADOW_PAGING) )
+ panic("Neither HAP nor Shadow available for PVH domain\n");
dom0_cfg.arch.emulation_flags |=
XEN_X86_EMU_LAPIC | XEN_X86_EMU_IOAPIC | XEN_X86_EMU_VPCI;
base-commit: cc7394164633e75fb61d52565f75271e0b7f1236
--
2.39.5
On 25.06.2025 17:01, Andrew Cooper wrote: > I was presented with this: > > (XEN) NX (Execute Disable) protection active > (XEN) d0 has maximum 416 PIRQs > (XEN) > (XEN) **************************************** > (XEN) Panic on CPU 0: > (XEN) Error creating d0: -95 > (XEN) **************************************** > > which is less than helpful. It turns out to be the -EOPNOTSUPP from > shadow_domain_init(). > > The real bug here is create_dom0() unconditionally assuming the presence of > SHADOW_PAGING. Rework it to panic() rather than choosing a dom0_cfg which is > guaranteed to fail. This results in: > > (XEN) NX (Execute Disable) protection active > (XEN) > (XEN) **************************************** > (XEN) Panic on CPU 0: > (XEN) Neither HAP nor Shadow available for PVH domain > (XEN) **************************************** > > which is rather more helpful. > > Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
© 2016 - 2025 Red Hat, Inc.