diff options
author | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-03-06 13:41:05 +0000 |
---|---|---|
committer | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-03-06 13:41:05 +0000 |
commit | 40ff940abffce72a5584775feb748e153a16864b (patch) | |
tree | 20b29d2dddd4641c9040344f0f2b8a1cf858b44c /linux-2.6-xen-sparse | |
parent | 88d253f238172f1e2ea198a15969d103c50e48e5 (diff) | |
download | xen-40ff940abffce72a5584775feb748e153a16864b.tar.gz xen-40ff940abffce72a5584775feb748e153a16864b.tar.bz2 xen-40ff940abffce72a5584775feb748e153a16864b.zip |
linux x86/64: No need to pre-allocate all fixmap pagetables:
just those for bt_ioremap().
Signed-off-by: Keir Fraser <keir@xensource.com>
Diffstat (limited to 'linux-2.6-xen-sparse')
-rw-r--r-- | linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c b/linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c index dbaec6e1c9..de7c80dfb8 100644 --- a/linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c +++ b/linux-2.6-xen-sparse/arch/x86_64/mm/init-xen.c @@ -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. |