diff options
Diffstat (limited to 'arch/x86/xen/p2m.c')
| -rw-r--r-- | arch/x86/xen/p2m.c | 10 | 
1 files changed, 9 insertions, 1 deletions
| diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c index 9f93af56a5fc..b47124d4cd67 100644 --- a/arch/x86/xen/p2m.c +++ b/arch/x86/xen/p2m.c @@ -91,6 +91,12 @@ EXPORT_SYMBOL_GPL(xen_p2m_size);  unsigned long xen_max_p2m_pfn __read_mostly;  EXPORT_SYMBOL_GPL(xen_max_p2m_pfn); +#ifdef CONFIG_XEN_BALLOON_MEMORY_HOTPLUG_LIMIT +#define P2M_LIMIT CONFIG_XEN_BALLOON_MEMORY_HOTPLUG_LIMIT +#else +#define P2M_LIMIT 0 +#endif +  static DEFINE_SPINLOCK(p2m_update_lock);  static unsigned long *p2m_mid_missing_mfn; @@ -385,9 +391,11 @@ static void __init xen_rebuild_p2m_list(unsigned long *p2m)  void __init xen_vmalloc_p2m_tree(void)  {  	static struct vm_struct vm; +	unsigned long p2m_limit; +	p2m_limit = (phys_addr_t)P2M_LIMIT * 1024 * 1024 * 1024 / PAGE_SIZE;  	vm.flags = VM_ALLOC; -	vm.size = ALIGN(sizeof(unsigned long) * xen_max_p2m_pfn, +	vm.size = ALIGN(sizeof(unsigned long) * max(xen_max_p2m_pfn, p2m_limit),  			PMD_SIZE * PMDS_PER_MID_PAGE);  	vm_area_register_early(&vm, PMD_SIZE * PMDS_PER_MID_PAGE);  	pr_notice("p2m virtual area at %p, size is %lx\n", vm.addr, vm.size); |