# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Date 1173188465 0
# Node ID 200d13363a38cb84ab1a75aca6d0a31f9390ecaa
# Parent ae203b55e7c833b8ed934fab8e06d00e694ae989
linux x86/64: No need to pre-allocate all fixmap pagetables:
just those for bt_ioremap().
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c | 20 +++++++++++++-------
1 files changed, 13 insertions(+), 7 deletions(-)
diff -r ae203b55e7c8 -r 200d13363a38
linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c
--- a/linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c Tue Mar 06 11:53:37
2007 +0000
+++ b/linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c Tue Mar 06 13:41:05
2007 +0000
@@ -708,19 +708,22 @@ static void xen_finish_init_mapping(void
WARN_ON(HYPERVISOR_update_va_mapping(
start, __pte_ma(0), 0));
- /* Initialise all fixmap pagetables. Use 'start_pfn' allocator. */
+ /* Allocate pte's for initial fixmaps from 'start_pfn' allocator. */
table_end = ~0UL;
- for (i = 0; i < __end_of_fixed_addresses; i++)
+
+ /*
+ * Prefetch pte's for the bt_ioremap() area. It gets used before the
+ * boot-time allocator is online, so allocate-on-demand would fail.
+ */
+ for (i = FIX_BTMAP_END; i <= FIX_BTMAP_BEGIN; i++)
__set_fixmap(i, 0, __pgprot(0));
- table_end = start_pfn;
-
- /* Switch to the real shared_info page, and clear the
- * dummy page. */
+
+ /* Switch to the real shared_info page, and clear the dummy page. */
set_fixmap(FIX_SHARED_INFO, xen_start_info->shared_info);
HYPERVISOR_shared_info = (shared_info_t *)fix_to_virt(FIX_SHARED_INFO);
memset(empty_zero_page, 0, sizeof(empty_zero_page));
- /* Setup mapping of lower 1st MB */
+ /* Set up mapping of lowest 1MB of physical memory. */
for (i = 0; i < NR_FIX_ISAMAPS; i++)
if (is_initial_xendomain())
set_fixmap(FIX_ISAMAP_BEGIN - i, i * PAGE_SIZE);
@@ -729,6 +732,9 @@ static void xen_finish_init_mapping(void
virt_to_mfn(empty_zero_page)
<< PAGE_SHIFT,
PAGE_KERNEL_RO);
+
+ /* Disable the 'start_pfn' allocator. */
+ table_end = start_pfn;
}
/* Setup the direct mapping of the physical memory at PAGE_OFFSET.
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|