x86-32, mm: Add an initial page table for core bootstrapping
This patch adds an initial page table with low mappings used exclusively for booting APs/resuming after ACPI suspend/machine restart. After this, there's no need to add low mappings to swapper_pg_dir and zap them later or create own swsusp PGD page solely for ACPI sleep needs - we have initial_page_table for that. Signed-off-by: Borislav Petkov <bp@alien8.de> LKML-Reference: <20101020070526.GA9588@liondog.tnic> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
This commit is contained in:

committed by
H. Peter Anvin

parent
d25e6b0b32
commit
b40827fa72
@@ -548,48 +548,6 @@ static void __init pagetable_init(void)
|
||||
permanent_kmaps_init(pgd_base);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ACPI_SLEEP
|
||||
/*
|
||||
* ACPI suspend needs this for resume, because things like the intel-agp
|
||||
* driver might have split up a kernel 4MB mapping.
|
||||
*/
|
||||
char swsusp_pg_dir[PAGE_SIZE]
|
||||
__attribute__ ((aligned(PAGE_SIZE)));
|
||||
|
||||
static inline void save_pg_dir(void)
|
||||
{
|
||||
copy_page(swsusp_pg_dir, swapper_pg_dir);
|
||||
}
|
||||
#else /* !CONFIG_ACPI_SLEEP */
|
||||
static inline void save_pg_dir(void)
|
||||
{
|
||||
}
|
||||
#endif /* !CONFIG_ACPI_SLEEP */
|
||||
|
||||
void zap_low_mappings(bool early)
|
||||
{
|
||||
int i;
|
||||
|
||||
/*
|
||||
* Zap initial low-memory mappings.
|
||||
*
|
||||
* Note that "pgd_clear()" doesn't do it for
|
||||
* us, because pgd_clear() is a no-op on i386.
|
||||
*/
|
||||
for (i = 0; i < KERNEL_PGD_BOUNDARY; i++) {
|
||||
#ifdef CONFIG_X86_PAE
|
||||
set_pgd(swapper_pg_dir+i, __pgd(1 + __pa(empty_zero_page)));
|
||||
#else
|
||||
set_pgd(swapper_pg_dir+i, __pgd(0));
|
||||
#endif
|
||||
}
|
||||
|
||||
if (early)
|
||||
__flush_tlb();
|
||||
else
|
||||
flush_tlb_all();
|
||||
}
|
||||
|
||||
pteval_t __supported_pte_mask __read_mostly = ~(_PAGE_NX | _PAGE_GLOBAL | _PAGE_IOMAP);
|
||||
EXPORT_SYMBOL_GPL(__supported_pte_mask);
|
||||
|
||||
@@ -958,9 +916,6 @@ void __init mem_init(void)
|
||||
|
||||
if (boot_cpu_data.wp_works_ok < 0)
|
||||
test_wp_bit();
|
||||
|
||||
save_pg_dir();
|
||||
zap_low_mappings(true);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MEMORY_HOTPLUG
|
||||
|
Reference in New Issue
Block a user