diff options
Diffstat (limited to 'arch/arm/mm/flush.c')
| -rw-r--r-- | arch/arm/mm/flush.c | 15 | 
1 files changed, 9 insertions, 6 deletions
diff --git a/arch/arm/mm/flush.c b/arch/arm/mm/flush.c index 1c8f7f56417..0d473cce501 100644 --- a/arch/arm/mm/flush.c +++ b/arch/arm/mm/flush.c @@ -170,15 +170,18 @@ void __flush_dcache_page(struct address_space *mapping, struct page *page)  	if (!PageHighMem(page)) {  		__cpuc_flush_dcache_area(page_address(page), PAGE_SIZE);  	} else { -		void *addr = kmap_high_get(page); -		if (addr) { -			__cpuc_flush_dcache_area(addr, PAGE_SIZE); -			kunmap_high(page); -		} else if (cache_is_vipt()) { -			/* unmapped pages might still be cached */ +		void *addr; + +		if (cache_is_vipt_nonaliasing()) {  			addr = kmap_atomic(page);  			__cpuc_flush_dcache_area(addr, PAGE_SIZE);  			kunmap_atomic(addr); +		} else { +			addr = kmap_high_get(page); +			if (addr) { +				__cpuc_flush_dcache_area(addr, PAGE_SIZE); +				kunmap_high(page); +			}  		}  	}  |