diff options
Diffstat (limited to 'arch/x86/xen/mmu.c')
| -rw-r--r-- | arch/x86/xen/mmu.c | 14 | 
1 files changed, 13 insertions, 1 deletions
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c index dc708dcc62f..0ccccb67a99 100644 --- a/arch/x86/xen/mmu.c +++ b/arch/x86/xen/mmu.c @@ -59,6 +59,7 @@  #include <asm/page.h>  #include <asm/init.h>  #include <asm/pat.h> +#include <asm/smp.h>  #include <asm/xen/hypercall.h>  #include <asm/xen/hypervisor.h> @@ -1231,7 +1232,11 @@ static void xen_flush_tlb_others(const struct cpumask *cpus,  {  	struct {  		struct mmuext_op op; +#ifdef CONFIG_SMP +		DECLARE_BITMAP(mask, num_processors); +#else  		DECLARE_BITMAP(mask, NR_CPUS); +#endif  	} *args;  	struct multicall_space mcs; @@ -1599,6 +1604,11 @@ static void __init xen_map_identity_early(pmd_t *pmd, unsigned long max_pfn)  		for (pteidx = 0; pteidx < PTRS_PER_PTE; pteidx++, pfn++) {  			pte_t pte; +#ifdef CONFIG_X86_32 +			if (pfn > max_pfn_mapped) +				max_pfn_mapped = pfn; +#endif +  			if (!pte_none(pte_page[pteidx]))  				continue; @@ -1766,7 +1776,9 @@ pgd_t * __init xen_setup_kernel_pagetable(pgd_t *pgd,  	initial_kernel_pmd =  		extend_brk(sizeof(pmd_t) * PTRS_PER_PMD, PAGE_SIZE); -	max_pfn_mapped = PFN_DOWN(__pa(xen_start_info->mfn_list)); +	max_pfn_mapped = PFN_DOWN(__pa(xen_start_info->pt_base) + +				  xen_start_info->nr_pt_frames * PAGE_SIZE + +				  512*1024);  	kernel_pmd = m2v(pgd[KERNEL_PGD_BOUNDARY].pgd);  	memcpy(initial_kernel_pmd, kernel_pmd, sizeof(pmd_t) * PTRS_PER_PMD);  |