diff options
| -rw-r--r-- | arch/x86/xen/p2m.c | 10 | ||||
| -rw-r--r-- | drivers/xen/Kconfig | 17 |
2 files changed, 26 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); | |||
| 91 | unsigned long xen_max_p2m_pfn __read_mostly; | 91 | unsigned long xen_max_p2m_pfn __read_mostly; |
| 92 | EXPORT_SYMBOL_GPL(xen_max_p2m_pfn); | 92 | EXPORT_SYMBOL_GPL(xen_max_p2m_pfn); |
| 93 | 93 | ||
| 94 | #ifdef CONFIG_XEN_BALLOON_MEMORY_HOTPLUG_LIMIT | ||
| 95 | #define P2M_LIMIT CONFIG_XEN_BALLOON_MEMORY_HOTPLUG_LIMIT | ||
| 96 | #else | ||
| 97 | #define P2M_LIMIT 0 | ||
| 98 | #endif | ||
| 99 | |||
| 94 | static DEFINE_SPINLOCK(p2m_update_lock); | 100 | static DEFINE_SPINLOCK(p2m_update_lock); |
| 95 | 101 | ||
| 96 | static unsigned long *p2m_mid_missing_mfn; | 102 | static unsigned long *p2m_mid_missing_mfn; |
| @@ -385,9 +391,11 @@ static void __init xen_rebuild_p2m_list(unsigned long *p2m) | |||
| 385 | void __init xen_vmalloc_p2m_tree(void) | 391 | void __init xen_vmalloc_p2m_tree(void) |
| 386 | { | 392 | { |
| 387 | static struct vm_struct vm; | 393 | static struct vm_struct vm; |
| 394 | unsigned long p2m_limit; | ||
| 388 | 395 | ||
| 396 | p2m_limit = (phys_addr_t)P2M_LIMIT * 1024 * 1024 * 1024 / PAGE_SIZE; | ||
| 389 | vm.flags = VM_ALLOC; | 397 | vm.flags = VM_ALLOC; |
| 390 | vm.size = ALIGN(sizeof(unsigned long) * xen_max_p2m_pfn, | 398 | vm.size = ALIGN(sizeof(unsigned long) * max(xen_max_p2m_pfn, p2m_limit), |
| 391 | PMD_SIZE * PMDS_PER_MID_PAGE); | 399 | PMD_SIZE * PMDS_PER_MID_PAGE); |
| 392 | vm_area_register_early(&vm, PMD_SIZE * PMDS_PER_MID_PAGE); | 400 | vm_area_register_early(&vm, PMD_SIZE * PMDS_PER_MID_PAGE); |
| 393 | pr_notice("p2m virtual area at %p, size is %lx\n", vm.addr, vm.size); | 401 | pr_notice("p2m virtual area at %p, size is %lx\n", vm.addr, vm.size); |
diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig index b812462083fc..94d96809e686 100644 --- a/drivers/xen/Kconfig +++ b/drivers/xen/Kconfig | |||
| @@ -55,6 +55,23 @@ config XEN_BALLOON_MEMORY_HOTPLUG | |||
| 55 | 55 | ||
| 56 | In that case step 3 should be omitted. | 56 | In that case step 3 should be omitted. |
| 57 | 57 | ||
| 58 | config XEN_BALLOON_MEMORY_HOTPLUG_LIMIT | ||
| 59 | int "Hotplugged memory limit (in GiB) for a PV guest" | ||
| 60 | default 512 if X86_64 | ||
| 61 | default 4 if X86_32 | ||
| 62 | range 0 64 if X86_32 | ||
| 63 | depends on XEN_HAVE_PVMMU | ||
| 64 | depends on XEN_BALLOON_MEMORY_HOTPLUG | ||
| 65 | help | ||
| 66 | Maxmium amount of memory (in GiB) that a PV guest can be | ||
| 67 | expanded to when using memory hotplug. | ||
| 68 | |||
| 69 | A PV guest can have more memory than this limit if is | ||
| 70 | started with a larger maximum. | ||
| 71 | |||
| 72 | This value is used to allocate enough space in internal | ||
| 73 | tables needed for physical memory administration. | ||
| 74 | |||
| 58 | config XEN_SCRUB_PAGES | 75 | config XEN_SCRUB_PAGES |
| 59 | bool "Scrub pages before returning them to system" | 76 | bool "Scrub pages before returning them to system" |
| 60 | depends on XEN_BALLOON | 77 | depends on XEN_BALLOON |
