diff options
Diffstat (limited to 'arch/x86/mm/init_64.c')
| -rw-r--r-- | arch/x86/mm/init_64.c | 7 | 
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 2ead3c8a4c8..d6eeead4375 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c @@ -605,7 +605,7 @@ kernel_physical_mapping_init(unsigned long start,  	}  	if (pgd_changed) -		sync_global_pgds(addr, end); +		sync_global_pgds(addr, end - 1);  	__flush_tlb_all(); @@ -831,6 +831,9 @@ int kern_addr_valid(unsigned long addr)  	if (pud_none(*pud))  		return 0; +	if (pud_large(*pud)) +		return pfn_valid(pud_pfn(*pud)); +  	pmd = pmd_offset(pud, addr);  	if (pmd_none(*pmd))  		return 0; @@ -981,7 +984,7 @@ vmemmap_populate(struct page *start_page, unsigned long size, int node)  		}  	} -	sync_global_pgds((unsigned long)start_page, end); +	sync_global_pgds((unsigned long)start_page, end - 1);  	return 0;  }  |