[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v6 2/7] xen/x86: split Dom0 build into PV and PVHv2
Split the Dom0 builder into two different functions, one for PV (and classic PVH), and another one for PVHv2. Introduce a new command line parameter called 'dom0' that can be used to request the creation of a PVHv2 Dom0 by setting the 'hvm' sub-option. A panic has also been added if a user tries to use dom0=hvm until all the code is in place, then the panic will be removed. While there mark the dom0_shadow option that was used by PV Dom0 as deprecated, it was lacking documentation and was not functional. Point users towards dom0=shadow instead. Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> --- Cc: Jan Beulich <jbeulich@xxxxxxxx> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- Changes since v5: - Remove duplicate define. - Also move the sanity check for d->vcpu[0]->is_initialised. - Mark dom0_shadow as deprecated, point users to switch to dom0=shadow. - Move the temporary panic from setup.c to the end of construct_dom0_pvh. Changes since v4: - Move common sanity BUG_ONs and process_pending_softirqs to construct_dom0. - Remove the non-existant documentation about dom0_shadow option. - Fix the define of dom0_shadow to be 'false' instead of 0. - Move the parsing of the dom0 command line option to domain_build.c. - s/hvm/pvh. Changes since v3: - Correctly declare the parameter list. - Add a panic if dom0=hvm is used. This will be removed once all the code is in place. Changes since v2: - Fix coding style. - Introduce a new dom0 option that allows passing several parameters. Currently supported ones are hvm and shadow. Changes since RFC: - Add documentation for the new command line option. - Simplify the logic in construct_dom0. --- docs/misc/xen-command-line.markdown | 19 ++++++++++ xen/arch/x86/domain_build.c | 71 +++++++++++++++++++++++++++++++------ xen/arch/x86/setup.c | 8 +++++ xen/include/asm-x86/setup.h | 7 ++++ 4 files changed, 94 insertions(+), 11 deletions(-) diff --git a/docs/misc/xen-command-line.markdown b/docs/misc/xen-command-line.markdown index a11fdf9..3acbb33 100644 --- a/docs/misc/xen-command-line.markdown +++ b/docs/misc/xen-command-line.markdown @@ -649,6 +649,8 @@ affinities to prefer but be not limited to the specified node(s). ### dom0\_shadow > `= <boolean>` +This option is deprecated, please use `dom0=shadow` instead. + ### dom0\_vcpus\_pin > `= <boolean>` @@ -656,6 +658,23 @@ affinities to prefer but be not limited to the specified node(s). Pin dom0 vcpus to their respective pcpus +### dom0 +> `= List of [ pvh | shadow ]` + +> Sub-options: + +> `pvh` + +> Default: `false` + +Flag that makes a dom0 boot in PVHv2 mode. + +> `shadow` + +> Default: `false` + +Flag that makes a dom0 use shadow paging. + ### dom0pvh > `= <boolean>` diff --git a/xen/arch/x86/domain_build.c b/xen/arch/x86/domain_build.c index 243df96..7123931 100644 --- a/xen/arch/x86/domain_build.c +++ b/xen/arch/x86/domain_build.c @@ -191,11 +191,38 @@ struct vcpu *__init alloc_dom0_vcpu0(struct domain *dom0) } #ifdef CONFIG_SHADOW_PAGING -static bool_t __initdata opt_dom0_shadow; +bool __initdata opt_dom0_shadow; boolean_param("dom0_shadow", opt_dom0_shadow); -#else -#define opt_dom0_shadow 0 #endif +bool __initdata dom0_pvh; + +/* + * List of parameters that affect Dom0 creation: + * + * - pvh Create a PVHv2 Dom0. + * - shadow Use shadow paging for Dom0. + */ +static void __init parse_dom0_param(char *s) +{ + char *ss; + + do { + + ss = strchr(s, ','); + if ( ss ) + *ss = '\0'; + + if ( !strcmp(s, "pvh") ) + dom0_pvh = true; +#ifdef CONFIG_SHADOW_PAGING + else if ( !strcmp(s, "shadow") ) + opt_dom0_shadow = true; +#endif + + s = ss + 1; + } while ( ss ); +} +custom_param("dom0", parse_dom0_param); static char __initdata opt_dom0_ioports_disable[200] = ""; string_param("dom0_ioports_disable", opt_dom0_ioports_disable); @@ -951,7 +978,7 @@ static int __init setup_permissions(struct domain *d) return rc; } -int __init construct_dom0( +static int __init construct_dom0_pv( struct domain *d, const module_t *image, unsigned long image_headroom, module_t *initrd, @@ -1007,13 +1034,6 @@ int __init construct_dom0( /* Machine address of next candidate page-table page. */ paddr_t mpt_alloc; - /* Sanity! */ - BUG_ON(d->domain_id != 0); - BUG_ON(d->vcpu[0] == NULL); - BUG_ON(v->is_initialised); - - process_pending_softirqs(); - printk("*** LOADING DOMAIN 0 ***\n"); d->max_pages = ~0U; @@ -1655,6 +1675,35 @@ out: return rc; } +static int __init construct_dom0_pvh(struct domain *d, const module_t *image, + unsigned long image_headroom, + module_t *initrd, + void *(*bootstrap_map)(const module_t *), + char *cmdline) +{ + + printk("** Building a PVH Dom0 **\n"); + + panic("Building a PVHv2 Dom0 is not yet supported."); + return 0; +} + +int __init construct_dom0(struct domain *d, const module_t *image, + unsigned long image_headroom, module_t *initrd, + void *(*bootstrap_map)(const module_t *), + char *cmdline) +{ + /* Sanity! */ + BUG_ON(d->domain_id != 0); + BUG_ON(d->vcpu[0] == NULL); + BUG_ON(d->vcpu[0]->is_initialised); + + process_pending_softirqs(); + + return (is_hvm_domain(d) ? construct_dom0_pvh : construct_dom0_pv) + (d, image, image_headroom, initrd,bootstrap_map, cmdline); +} + /* * Local variables: * mode: C diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 176ee74..48fd955 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -1550,6 +1550,14 @@ void __init noreturn __start_xen(unsigned long mbi_p) if ( opt_dom0pvh ) domcr_flags |= DOMCRF_pvh | DOMCRF_hap; + if ( dom0_pvh ) + { + domcr_flags |= DOMCRF_hvm | + ((hvm_funcs.hap_supported && !opt_dom0_shadow) ? + DOMCRF_hap : 0); + config.emulation_flags = XEN_X86_EMU_LAPIC|XEN_X86_EMU_IOAPIC; + } + /* Create initial domain 0. */ dom0 = domain_create(0, domcr_flags, 0, &config); if ( IS_ERR(dom0) || (alloc_dom0_vcpu0(dom0) == NULL) ) diff --git a/xen/include/asm-x86/setup.h b/xen/include/asm-x86/setup.h index c65b79c..47b9442 100644 --- a/xen/include/asm-x86/setup.h +++ b/xen/include/asm-x86/setup.h @@ -57,4 +57,11 @@ extern uint8_t kbd_shift_flags; extern unsigned long highmem_start; #endif +#ifdef CONFIG_SHADOW_PAGING +extern bool opt_dom0_shadow; +#else +#define opt_dom0_shadow false +#endif +extern bool dom0_pvh; + #endif -- 2.10.1 (Apple Git-78) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |