From: Rusty Russell Date: Mon, 22 Apr 2013 04:40:42 +0000 (+0930) Subject: lguest: map Switcher below fixmap. X-Git-Tag: upstream/snapshot3+hdmi~5216^2~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6b39271746de131366a14bcf04f5740cdc4abdef;p=platform%2Fadaptation%2Frenesas_rcar%2Frenesas_kernel.git lguest: map Switcher below fixmap. Now we've adjusted all the code, we can simply set switcher_addr to wherever it needs to go below the fixmaps, rather than asserting that it should be so. With large NR_CPUS and PAE, people were hitting the "mapping switcher would thwack fixmap" message. Reported-by: Paul Bolle Signed-off-by: Rusty Russell --- diff --git a/arch/x86/include/asm/lguest.h b/arch/x86/include/asm/lguest.h index 74edebd..e2d4a4a 100644 --- a/arch/x86/include/asm/lguest.h +++ b/arch/x86/include/asm/lguest.h @@ -14,12 +14,6 @@ /* Page for Switcher text itself, then two pages per cpu */ #define TOTAL_SWITCHER_PAGES (1 + 2 * nr_cpu_ids) -/* We map at -4M (-2M for PAE) for ease of mapping (one PTE page). */ -#ifdef CONFIG_X86_PAE -#define SWITCHER_ADDR 0xFFE00000 -#else -#define SWITCHER_ADDR 0xFFC00000 -#endif /* Where we map the Switcher, in both Host and Guest. */ extern unsigned long switcher_addr; diff --git a/drivers/lguest/core.c b/drivers/lguest/core.c index 7e1d7ee..0bf1e4e 100644 --- a/drivers/lguest/core.c +++ b/drivers/lguest/core.c @@ -83,18 +83,13 @@ static __init int map_switcher(void) } } - switcher_addr = SWITCHER_ADDR; - /* - * First we check that the Switcher won't overlap the fixmap area at - * the top of memory. It's currently nowhere near, but it could have - * very strange effects if it ever happened. + * We place the Switcher underneath the fixmap area, which is the + * highest virtual address we can get. This is important, since we + * tell the Guest it can't access this memory, so we want its ceiling + * as high as possible. */ - if (switcher_addr + (TOTAL_SWITCHER_PAGES+1)*PAGE_SIZE > FIXADDR_START){ - err = -ENOMEM; - printk("lguest: mapping switcher would thwack fixmap\n"); - goto free_pages; - } + switcher_addr = FIXADDR_START - (TOTAL_SWITCHER_PAGES+1)*PAGE_SIZE; /* * Now we reserve the "virtual memory area" we want. We might