diff options
Diffstat (limited to 'arch/xtensa/mm/cache.c')
| -rw-r--r-- | arch/xtensa/mm/cache.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/xtensa/mm/cache.c b/arch/xtensa/mm/cache.c index ba4c47f291b1..63cbb867dadd 100644 --- a/arch/xtensa/mm/cache.c +++ b/arch/xtensa/mm/cache.c | |||
| @@ -59,6 +59,10 @@ | |||
| 59 | * | 59 | * |
| 60 | */ | 60 | */ |
| 61 | 61 | ||
| 62 | #if (DCACHE_WAY_SIZE > PAGE_SIZE) && defined(CONFIG_HIGHMEM) | ||
| 63 | #error "HIGHMEM is not supported on cores with aliasing cache." | ||
| 64 | #endif | ||
| 65 | |||
| 62 | #if (DCACHE_WAY_SIZE > PAGE_SIZE) && XCHAL_DCACHE_IS_WRITEBACK | 66 | #if (DCACHE_WAY_SIZE > PAGE_SIZE) && XCHAL_DCACHE_IS_WRITEBACK |
| 63 | 67 | ||
| 64 | /* | 68 | /* |
| @@ -179,10 +183,11 @@ update_mmu_cache(struct vm_area_struct * vma, unsigned long addr, pte_t *ptep) | |||
| 179 | #else | 183 | #else |
| 180 | if (!PageReserved(page) && !test_bit(PG_arch_1, &page->flags) | 184 | if (!PageReserved(page) && !test_bit(PG_arch_1, &page->flags) |
| 181 | && (vma->vm_flags & VM_EXEC) != 0) { | 185 | && (vma->vm_flags & VM_EXEC) != 0) { |
| 182 | unsigned long paddr = (unsigned long) page_address(page); | 186 | unsigned long paddr = (unsigned long)kmap_atomic(page); |
| 183 | __flush_dcache_page(paddr); | 187 | __flush_dcache_page(paddr); |
| 184 | __invalidate_icache_page(paddr); | 188 | __invalidate_icache_page(paddr); |
| 185 | set_bit(PG_arch_1, &page->flags); | 189 | set_bit(PG_arch_1, &page->flags); |
| 190 | kunmap_atomic((void *)paddr); | ||
| 186 | } | 191 | } |
| 187 | #endif | 192 | #endif |
| 188 | } | 193 | } |
