[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen master] x86/boot: Improve paging mode diagnostics in create_dom0()



commit 2654ff974a43c16f677dcd63303b09f527285fbf
Author:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Wed Jun 25 10:00:25 2025 +0100
Commit:     Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Wed Jun 25 17:54:41 2025 +0100

    x86/boot: Improve paging mode diagnostics in create_dom0()
    
    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@xxxxxxxxxx>
    Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
---
 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 f32efa7c60..24e4f5ac7f 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;
--
generated by git-patchbot for /home/xen/git/xen.git#master



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.