Signed-off-by: Jeremy Fitzhardinge Cc: Chris Wright Cc: Zachary Amsden Cc: Andi Kleen Cc: Andrew Morton Cc: Rusty Russell =================================================================== --- a/arch/i386/kernel/paravirt.c +++ b/arch/i386/kernel/paravirt.c @@ -573,6 +573,7 @@ struct paravirt_ops paravirt_ops = { .paravirt_enabled = 0, .kernel_rpl = 0, .shared_kernel_pmd = 1, /* Only used when CONFIG_X86_PAE is set */ + .pgd_alignment = sizeof(pgd_t) * PTRS_PER_PGD, .patch = native_patch, .banner = default_banner, =================================================================== --- a/arch/i386/mm/init.c +++ b/arch/i386/mm/init.c @@ -745,7 +745,7 @@ void __init pgtable_cache_init(void) } pgd_cache = kmem_cache_create("pgd", PTRS_PER_PGD*sizeof(pgd_t), - PTRS_PER_PGD*sizeof(pgd_t), + PGD_ALIGNMENT, 0, NULL, NULL); if (!pgd_cache) panic("pgtable_cache_init(): Cannot create pgd cache"); =================================================================== --- a/include/asm-i386/paravirt.h +++ b/include/asm-i386/paravirt.h @@ -33,9 +33,12 @@ struct mm_struct; struct mm_struct; struct paravirt_ops { + int paravirt_enabled; unsigned int kernel_rpl; + int shared_kernel_pmd; - int paravirt_enabled; + int pgd_alignment; + const char *name; /* =================================================================== --- a/include/asm-i386/pgtable.h +++ b/include/asm-i386/pgtable.h @@ -270,6 +270,12 @@ static inline void vmalloc_sync_all(void #define pte_update_defer(mm, addr, ptep) do { } while (0) #endif +#ifdef CONFIG_PARAVIRT +#define PGD_ALIGNMENT (paravirt_ops.pgd_alignment) +#else +#define PGD_ALIGNMENT (sizeof(pgd_t) * PTRS_PER_PGD) +#endif + /* * We only update the dirty/accessed state if we set * the dirty bit by hand in the kernel, since the hardware -- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/