aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2008-01-30 07:33:48 -0500
committerIngo Molnar <mingo@elte.hu>2008-01-30 07:33:48 -0500
commitd701fda8601fe267fbd3648f108f0e751305101b (patch)
treeed4e32e3ff33eb9e01a4c8321776b82b834c6fce
parentd690b2afd5a7a02816386aa704c8c0b1aca8d2de (diff)
x86: fix early_ioremap()/btmap
fix a long-standing weakness of the early-ioremap allocator: it uses a single pgd entry for the boot mappings, and was not properly protecting itself against crossing a 2MB (4MB) boundary. Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r--include/asm-x86/fixmap_32.h12
1 files changed, 10 insertions, 2 deletions
diff --git a/include/asm-x86/fixmap_32.h b/include/asm-x86/fixmap_32.h
index 46bedb7b5426..fde140fd6d95 100644
--- a/include/asm-x86/fixmap_32.h
+++ b/include/asm-x86/fixmap_32.h
@@ -90,10 +90,18 @@ enum fixed_addresses {
90 FIX_PARAVIRT_BOOTMAP, 90 FIX_PARAVIRT_BOOTMAP,
91#endif 91#endif
92 __end_of_permanent_fixed_addresses, 92 __end_of_permanent_fixed_addresses,
93 /* temporary boot-time mappings, used before ioremap() is functional */ 93 /*
94 * 256 temporary boot-time mappings, used by early_ioremap(),
95 * before ioremap() is functional.
96 *
97 * We round it up to the next 512 pages boundary so that we
98 * can have a single pgd entry and a single pte table:
99 */
94#define NR_FIX_BTMAPS 64 100#define NR_FIX_BTMAPS 64
95#define FIX_BTMAPS_NESTING 4 101#define FIX_BTMAPS_NESTING 4
96 FIX_BTMAP_END = __end_of_permanent_fixed_addresses, 102 FIX_BTMAP_END =
103 __end_of_permanent_fixed_addresses + 512 -
104 (__end_of_permanent_fixed_addresses & 511),
97 FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS*FIX_BTMAPS_NESTING - 1, 105 FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS*FIX_BTMAPS_NESTING - 1,
98 FIX_WP_TEST, 106 FIX_WP_TEST,
99 __end_of_fixed_addresses 107 __end_of_fixed_addresses