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>
This commit is contained in:
Родитель
d690b2afd5
Коммит
d701fda860
|
@ -90,10 +90,18 @@ enum fixed_addresses {
|
|||
FIX_PARAVIRT_BOOTMAP,
|
||||
#endif
|
||||
__end_of_permanent_fixed_addresses,
|
||||
/* temporary boot-time mappings, used before ioremap() is functional */
|
||||
/*
|
||||
* 256 temporary boot-time mappings, used by early_ioremap(),
|
||||
* before ioremap() is functional.
|
||||
*
|
||||
* We round it up to the next 512 pages boundary so that we
|
||||
* can have a single pgd entry and a single pte table:
|
||||
*/
|
||||
#define NR_FIX_BTMAPS 64
|
||||
#define FIX_BTMAPS_NESTING 4
|
||||
FIX_BTMAP_END = __end_of_permanent_fixed_addresses,
|
||||
FIX_BTMAP_END =
|
||||
__end_of_permanent_fixed_addresses + 512 -
|
||||
(__end_of_permanent_fixed_addresses & 511),
|
||||
FIX_BTMAP_BEGIN = FIX_BTMAP_END + NR_FIX_BTMAPS*FIX_BTMAPS_NESTING - 1,
|
||||
FIX_WP_TEST,
|
||||
__end_of_fixed_addresses
|
||||
|
|
Загрузка…
Ссылка в новой задаче