diff options
Diffstat (limited to 'arch/x86/mm/pat.c')
| -rw-r--r-- | arch/x86/mm/pat.c | 11 | 
1 files changed, 9 insertions, 2 deletions
diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c index 0eb572eda40..657438858e8 100644 --- a/arch/x86/mm/pat.c +++ b/arch/x86/mm/pat.c @@ -560,10 +560,17 @@ int kernel_map_sync_memtype(u64 base, unsigned long size, unsigned long flags)  {  	unsigned long id_sz; -	if (base >= __pa(high_memory)) +	if (base > __pa(high_memory-1))  		return 0; -	id_sz = (__pa(high_memory) < base + size) ? +	/* +	 * some areas in the middle of the kernel identity range +	 * are not mapped, like the PCI space. +	 */ +	if (!page_is_ram(base >> PAGE_SHIFT)) +		return 0; + +	id_sz = (__pa(high_memory-1) <= base + size) ?  				__pa(high_memory) - base :  				size;  |