On 09/04/2015 07:55, Juergen Gross wrote: > Check whether the page tables built by the domain builder are at > memory addresses which are in conflict with the target memory map. > If this is the case just panic instead of running into problems > later. > > Signed-off-by: Juergen Gross <jgross@xxxxxxxx> > --- > arch/x86/xen/mmu.c | 19 ++++++++++++++++--- > arch/x86/xen/setup.c | 6 ++++++ > arch/x86/xen/xen-ops.h | 1 + > 3 files changed, 23 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c > index 1ca5197..41aeb1c 100644 > --- a/arch/x86/xen/mmu.c > +++ b/arch/x86/xen/mmu.c > @@ -116,6 +116,7 @@ static pud_t level3_user_vsyscall[PTRS_PER_PUD] __page_aligned_bss; > DEFINE_PER_CPU(unsigned long, xen_cr3); /* cr3 stored as physaddr */ > DEFINE_PER_CPU(unsigned long, xen_current_cr3); /* actual vcpu cr3 */ > > +static phys_addr_t xen_pt_base, xen_pt_size; These be __init, but the use of globals in this way is confusing. > > /* > * Just beyond the highest usermode address. STACK_TOP_MAX has a > @@ -1998,7 +1999,9 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn) > check_pt_base(&pt_base, &pt_end, addr[i]); > > /* Our (by three pages) smaller Xen pagetable that we are using */ > - memblock_reserve(PFN_PHYS(pt_base), (pt_end - pt_base) * PAGE_SIZE); > + xen_pt_base = PFN_PHYS(pt_base); > + xen_pt_size = (pt_end - pt_base) * PAGE_SIZE; > + memblock_reserve(xen_pt_base, xen_pt_size); Why not provide a xen_memblock_check_and_reserve() call that has the xen_is_e820_reserved() check and the memblock_reserve() call? This may also be useful for patch #9 as well. > +void __init xen_pt_check_e820(void) > +{ > + if (xen_chk_e820_reserved(xen_pt_base, xen_pt_size)) { > + xen_raw_console_write("Xen hypervisor allocated page table memory conflicts with E820 map\n"); > + BUG(); > + } > +} > + > static unsigned char dummy_mapping[PAGE_SIZE] __page_aligned_bss; David -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>