[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 11/22] vixen: early initialization of Vixen including shared_info mapping
From: Anthony Liguori <aliguori@xxxxxxxxxx> We split initialization of Vixen into two parts. The first part just detects the presence of an HVM hypervisor so that we can figure out whether to modify the e820 table. The later initialization is used to actually map the shared_info structure from the parent hypervisor into Xen. Signed-off-by: Anthony Liguori <aliguori@xxxxxxxxxx> --- xen/arch/x86/guest/vixen.c | 45 +++++++++++++++++++++++++++++++++++++++ xen/arch/x86/setup.c | 5 +++++ xen/include/asm-x86/guest/vixen.h | 4 ++++ 3 files changed, 54 insertions(+) diff --git a/xen/arch/x86/guest/vixen.c b/xen/arch/x86/guest/vixen.c index d82e68f..d8466ba 100644 --- a/xen/arch/x86/guest/vixen.c +++ b/xen/arch/x86/guest/vixen.c @@ -20,8 +20,53 @@ */ #include <asm/guest/vixen.h> +#include <public/version.h> static int in_vixen; +static uint8_t global_si_data[4 << 10] __attribute__((aligned(4096))); +static shared_info_t *global_si = (void *)global_si_data; + +void __init init_vixen(void) +{ + int major, minor, version; + + if ( !xen_guest ) + { + printk("Disabling Vixen because we are not running under Xen\n"); + in_vixen = -1; + return; + } + + version = HYPERVISOR_xen_version(XENVER_version, NULL); + major = version >> 16; + minor = version & 0xffff; + + printk("Vixen running under Xen %d.%d\n", major, minor); + + in_vixen = 1; +} + +void __init early_vixen_init(void) +{ + struct xen_add_to_physmap xatp; + long rc; + + if ( !is_vixen() ) + return; + + /* Setup our own shared info area */ + xatp.domid = DOMID_SELF; + xatp.idx = 0; + xatp.space = XENMAPSPACE_shared_info; + xatp.gpfn = virt_to_mfn(global_si); + + rc = HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp); + if ( rc < 0 ) + printk("Setting shared info page failed: %ld\n", rc); + + memset(&global_si->native.evtchn_mask[0], 0x00, + sizeof(global_si->native.evtchn_mask)); +} bool is_vixen(void) { diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index f9d087e..07239c0 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -869,6 +869,9 @@ void __init noreturn __start_xen(unsigned long mbi_p) else panic("Bootloader provided no memory information."); + /* Vixen must be initialized before init_e820() */ + init_vixen(); + /* Sanitise the raw E820 map to produce a final clean version. */ max_page = raw_max_page = init_e820(memmap_type, &e820_raw); @@ -1516,6 +1519,8 @@ void __init noreturn __start_xen(unsigned long mbi_p) rcu_init(); + early_vixen_init(); + early_time_init(); arch_init_memory(); diff --git a/xen/include/asm-x86/guest/vixen.h b/xen/include/asm-x86/guest/vixen.h index be90c46..5bfa59d 100644 --- a/xen/include/asm-x86/guest/vixen.h +++ b/xen/include/asm-x86/guest/vixen.h @@ -70,4 +70,8 @@ HYPERVISOR_vcpu_op(int cmd, int vcpuid, void *extra_args) bool is_vixen(void); +void __init init_vixen(void); + +void __init early_vixen_init(void); + #endif -- 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |