On 23.11.2024 19:20, Daniel P. Smith wrote: > --- a/xen/arch/x86/domain_builder/fdt.c > +++ b/xen/arch/x86/domain_builder/fdt.c > @@ -141,6 +141,25 @@ static int __init process_domain_node( > bd->domid = (domid_t)val; > printk(" domid: %d\n", bd->domid); > } > + if ( match_fdt_property(fdt, prop, "mode" ) ) > + { > + if ( fdt_prop_as_u32(prop, &bd->mode) != 0 ) > + { > + printk(" failed processing mode for domain %s\n", > + name == NULL ? "unknown" : name); > + return -EINVAL; > + } > + > + printk(" mode: "); > + if ( !(bd->mode & BUILD_MODE_PARAVIRT) ) {
Nit: Brace placement. > + if ( bd->mode & BUILD_MODE_ENABLE_DM ) > + printk("HVM\n"); > + else > + printk("PVH\n"); > + } > + else > + printk("PV\n"); > + } > } > > fdt_for_each_subnode(node, fdt, dom_node) > --- a/xen/arch/x86/include/asm/bootdomain.h > +++ b/xen/arch/x86/include/asm/bootdomain.h > @@ -18,6 +18,12 @@ struct boot_domain { > > domid_t domid; > > + /* On | Off */ > +#define BUILD_MODE_PARAVIRT (1 << 0) /* PV | PVH/HVM */ > +#define BUILD_MODE_ENABLE_DM (1 << 1) /* HVM | PVH */ > +#define BUILD_MODE_LONG (1 << 2) /* 64 BIT | 32 BIT */ This last one isn't used anywhere, is it? > --- a/xen/arch/x86/setup.c > +++ b/xen/arch/x86/setup.c > @@ -1006,7 +1006,8 @@ static struct domain *__init create_dom0(struct > boot_info *bi) > struct boot_domain *bd = &bi->domains[0]; > struct domain *d; > > - if ( opt_dom0_pvh ) > + if ( opt_dom0_pvh || > + (bi->hyperlaunch_enabled && !(bd->mode & BUILD_MODE_PARAVIRT)) ) > { > dom0_cfg.flags |= (XEN_DOMCTL_CDF_hvm | > ((hvm_hap_supported() && !opt_dom0_shadow) ? What about BUILD_MODE_ENABLE_DM? Jan