Subject: consolidate pmd/pud/pgd entry handling
Patch-mainline: obsolete
-Index: head-2008-12-01/arch/x86/mm/hypervisor.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/mm/hypervisor.c 2008-12-01 12:10:32.000000000 +0100
-+++ head-2008-12-01/arch/x86/mm/hypervisor.c 2008-12-01 12:13:06.000000000 +0100
-@@ -356,31 +356,91 @@ void xen_l1_entry_update(pte_t *ptr, pte
+--- sle11-2009-04-09.orig/arch/x86/mm/hypervisor.c 2009-03-30 12:18:24.000000000 +0200
++++ sle11-2009-04-09/arch/x86/mm/hypervisor.c 2009-03-16 16:40:37.000000000 +0100
+@@ -357,31 +357,91 @@ void xen_l1_entry_update(pte_t *ptr, pte
}
EXPORT_SYMBOL_GPL(xen_l1_entry_update);
}
#endif /* CONFIG_X86_64 */
-Index: head-2008-12-01/arch/x86/mm/init_32-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/mm/init_32-xen.c 2008-12-01 11:49:07.000000000 +0100
-+++ head-2008-12-01/arch/x86/mm/init_32-xen.c 2008-12-01 12:13:06.000000000 +0100
-@@ -681,6 +681,8 @@ static void __init zone_sizes_init(void)
+--- sle11-2009-04-09.orig/arch/x86/mm/init_32-xen.c 2009-02-17 18:06:20.000000000 +0100
++++ sle11-2009-04-09/arch/x86/mm/init_32-xen.c 2009-03-16 17:39:12.000000000 +0100
+@@ -728,6 +728,8 @@ static void __init zone_sizes_init(void)
#endif
free_area_init_nodes(max_zone_pfns);
}
void __init setup_bootmem_allocator(void)
-@@ -1040,8 +1042,6 @@ void __init mem_init(void)
+@@ -1089,8 +1091,6 @@ void __init mem_init(void)
cpa_init();
save_pg_dir();
zap_low_mappings();
}
#ifdef CONFIG_MEMORY_HOTPLUG
-Index: head-2008-12-01/arch/x86/mm/init_64-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/mm/init_64-xen.c 2008-12-01 11:49:07.000000000 +0100
-+++ head-2008-12-01/arch/x86/mm/init_64-xen.c 2008-12-01 12:13:06.000000000 +0100
+--- sle11-2009-04-09.orig/arch/x86/mm/init_64-xen.c 2009-03-16 16:39:50.000000000 +0100
++++ sle11-2009-04-09/arch/x86/mm/init_64-xen.c 2009-03-16 16:40:37.000000000 +0100
@@ -195,7 +195,10 @@ set_pte_vaddr_pud(pud_t *pud_page, unsig
if (pud_none(*pud)) {
pmd = (pmd_t *) spp_getpage();
if (pmd != pmd_offset(pud, 0)) {
printk(KERN_ERR "PAGETABLE BUG #01! %p <-> %p\n",
pmd, pmd_offset(pud, 0));
-@@ -462,7 +465,6 @@ phys_pmd_init(pmd_t *pmd_page, unsigned
- early_make_page_readonly(pte, XENFEAT_writable_page_tables);
+@@ -478,7 +481,6 @@ phys_pmd_init(pmd_t *pmd_page, unsigned
+ XENFEAT_writable_page_tables);
*pmd = __pmd(pte_phys | _PAGE_TABLE);
} else {
- make_page_readonly(pte, XENFEAT_writable_page_tables);
spin_lock(&init_mm.page_table_lock);
pmd_populate_kernel(&init_mm, pmd, __va(pte_phys));
spin_unlock(&init_mm.page_table_lock);
-@@ -529,7 +531,6 @@ phys_pud_init(pud_t *pud_page, unsigned
+@@ -547,7 +549,6 @@ phys_pud_init(pud_t *pud_page, unsigned
else
*pud = __pud(pmd_phys | _PAGE_TABLE);
} else {
spin_lock(&init_mm.page_table_lock);
pud_populate(&init_mm, pud, __va(pmd_phys));
spin_unlock(&init_mm.page_table_lock);
-@@ -824,7 +825,6 @@ static unsigned long __init kernel_physi
- early_make_page_readonly(pud, XENFEAT_writable_page_tables);
+@@ -775,7 +776,6 @@ static unsigned long __meminit kernel_ph
+ XENFEAT_writable_page_tables);
xen_l4_entry_update(pgd, __pgd(pud_phys | _PAGE_TABLE));
} else {
- make_page_readonly(pud, XENFEAT_writable_page_tables);
spin_lock(&init_mm.page_table_lock);
pgd_populate(&init_mm, pgd, __va(pud_phys));
spin_unlock(&init_mm.page_table_lock);
-@@ -1013,7 +1013,7 @@ void __init paging_init(void)
+@@ -1004,7 +1004,7 @@ void __init paging_init(void)
sparse_init();
free_area_init_nodes(max_zone_pfns);
}
#endif
-Index: head-2008-12-01/arch/x86/mm/ioremap-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/mm/ioremap-xen.c 2008-12-01 12:07:15.000000000 +0100
-+++ head-2008-12-01/arch/x86/mm/ioremap-xen.c 2008-12-01 12:13:06.000000000 +0100
-@@ -678,7 +678,7 @@ void __init early_ioremap_clear(void)
- printk(KERN_INFO "early_ioremap_clear()\n");
-
- pmd = early_ioremap_pmd(fix_to_virt(FIX_BTMAP_BEGIN));
-- pmd_clear(pmd);
-+ xen_l2_entry_update(pmd, __pmd(0));
- make_lowmem_page_writable(bm_pte, XENFEAT_writable_page_tables);
- /* paravirt_release_pte(__pa(bm_pte) >> PAGE_SHIFT); */
- __flush_tlb_all();
-Index: head-2008-12-01/arch/x86/mm/pgtable-xen.c
-===================================================================
---- head-2008-12-01.orig/arch/x86/mm/pgtable-xen.c 2008-12-01 11:49:07.000000000 +0100
-+++ head-2008-12-01/arch/x86/mm/pgtable-xen.c 2008-12-01 12:13:06.000000000 +0100
+--- sle11-2009-04-09.orig/arch/x86/mm/pgtable-xen.c 2009-03-16 16:38:16.000000000 +0100
++++ sle11-2009-04-09/arch/x86/mm/pgtable-xen.c 2009-04-09 14:54:03.000000000 +0200
@@ -42,16 +42,16 @@ pgtable_t pte_alloc_one(struct mm_struct
void __pte_free(pgtable_t pte)
{
/*
* According to Intel App note "TLBs, Paging-Structure Caches,
-@@ -585,13 +637,10 @@ static void pgd_prepopulate_pmd(struct m
+@@ -589,13 +641,10 @@ static void pgd_prepopulate_pmd(struct m
i++, pud++, addr += PUD_SIZE) {
pmd_t *pmd = pmds[i];
/* It is safe to poke machine addresses of pmds under the pgd_lock. */
pud_populate(mm, pud, pmd);
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/hypervisor.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/hypervisor.h 2008-12-01 12:07:29.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/hypervisor.h 2008-12-01 12:13:06.000000000 +0100
+--- sle11-2009-04-09.orig/include/asm-x86/mach-xen/asm/hypervisor.h 2009-03-12 16:43:54.000000000 +0100
++++ sle11-2009-04-09/include/asm-x86/mach-xen/asm/hypervisor.h 2009-03-16 16:40:37.000000000 +0100
@@ -94,10 +94,12 @@ void xen_invlpg(unsigned long ptr);
void xen_l1_entry_update(pte_t *ptr, pte_t val);
void xen_l2_entry_update(pmd_t *ptr, pmd_t val);
void xen_set_ldt(const void *ptr, unsigned int ents);
#ifdef CONFIG_SMP
-@@ -323,6 +325,18 @@ MULTI_update_va_mapping(
+@@ -331,6 +333,18 @@ MULTI_update_va_mapping(
}
static inline void
MULTI_grant_table_op(multicall_entry_t *mcl, unsigned int cmd,
void *uop, unsigned int count)
{
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/pgalloc.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/pgalloc.h 2008-12-01 11:49:07.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/pgalloc.h 2008-12-01 12:13:06.000000000 +0100
+--- sle11-2009-04-09.orig/include/asm-x86/mach-xen/asm/pgalloc.h 2009-03-16 16:38:16.000000000 +0100
++++ sle11-2009-04-09/include/asm-x86/mach-xen/asm/pgalloc.h 2009-03-16 16:40:37.000000000 +0100
@@ -64,20 +64,16 @@ static inline void pmd_populate(struct m
struct page *pte)
{
}
static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr)
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/pgtable-3level.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/pgtable-3level.h 2008-12-01 11:49:07.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/pgtable-3level.h 2008-12-01 12:13:06.000000000 +0100
+--- sle11-2009-04-09.orig/include/asm-x86/mach-xen/asm/pgtable-3level.h 2009-03-16 16:38:16.000000000 +0100
++++ sle11-2009-04-09/include/asm-x86/mach-xen/asm/pgtable-3level.h 2009-03-16 16:40:37.000000000 +0100
@@ -76,12 +76,15 @@ static inline void __xen_pte_clear(pte_t
ptep->pte_high = 0;
}
pmd_index(address))
#ifdef CONFIG_SMP
-Index: head-2008-12-01/include/asm-x86/mach-xen/asm/pgtable_64.h
-===================================================================
---- head-2008-12-01.orig/include/asm-x86/mach-xen/asm/pgtable_64.h 2008-12-01 11:49:07.000000000 +0100
-+++ head-2008-12-01/include/asm-x86/mach-xen/asm/pgtable_64.h 2008-12-01 12:13:06.000000000 +0100
+--- sle11-2009-04-09.orig/include/asm-x86/mach-xen/asm/pgtable_64.h 2009-03-16 16:38:16.000000000 +0100
++++ sle11-2009-04-09/include/asm-x86/mach-xen/asm/pgtable_64.h 2009-03-16 16:40:37.000000000 +0100
@@ -110,33 +110,41 @@ static inline void xen_set_pmd(pmd_t *pm
xen_l2_entry_update(pmdp, pmd);
}