From 3a238257a3c7644bdcde2498869c08992beb7717 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Tue, 1 Dec 2009 14:02:52 +0000 Subject: [PATCH] xen/x86_64: correctly handle mem= reducing memory amount When mem= is being used to specify a value below the amount a domain got passed from Xen, init_memory_mapping() got called with the higher original value (end_pfn_map), triggering the BUG()s in maddr.h checking PFNs against end_pfn. Signed-off-by: Jan Beulich --- arch/x86_64/kernel/e820-xen.c | 2 ++ include/asm-x86_64/proto.h | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/arch/x86_64/kernel/e820-xen.c b/arch/x86_64/kernel/e820-xen.c index 413d6b15..57111a2a 100644 --- a/arch/x86_64/kernel/e820-xen.c +++ b/arch/x86_64/kernel/e820-xen.c @@ -31,12 +31,14 @@ unsigned long end_pfn; EXPORT_SYMBOL(end_pfn); +#ifndef CONFIG_XEN /* * end_pfn only includes RAM, while end_pfn_map includes all e820 entries. * The direct mapping extends to end_pfn_map, so that we can directly access * apertures, ACPI and other tables without having to play with fixmaps. */ unsigned long end_pfn_map; +#endif /* * Last pfn which the user wants to use. diff --git a/include/asm-x86_64/proto.h b/include/asm-x86_64/proto.h index 038fe1f4..3f30d902 100644 --- a/include/asm-x86_64/proto.h +++ b/include/asm-x86_64/proto.h @@ -72,7 +72,11 @@ extern void load_gs_index(unsigned gs); extern void stop_timer_interrupt(void); extern void main_timer_handler(struct pt_regs *regs); +#ifndef CONFIG_XEN extern unsigned long end_pfn_map; +#else +#define end_pfn_map end_pfn +#endif extern void show_trace(struct task_struct *, struct pt_regs *, unsigned long * rsp); extern void show_registers(struct pt_regs *regs); -- 2.39.5