Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

powerpc/mem: Use kmap_local_page() in flushing functions

Flushing functions don't rely on preemption being disabled, so
use kmap_local_page() instead of kmap_atomic().

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/b6a880ea0ec7886b51edbb4979c188be549231c0.1617895813.git.christophe.leroy@csgroup.eu

authored by

Christophe Leroy and committed by
Michael Ellerman
7e9ab144 6c960208

+10 -9
+10 -9
arch/powerpc/mm/cacheflush.c
··· 152 152 { 153 153 int i; 154 154 int nr = compound_nr(page); 155 - void *start; 156 155 157 156 if (!PageHighMem(page)) { 158 157 for (i = 0; i < nr; i++) 159 158 __flush_dcache_icache(lowmem_page_address(page + i)); 160 159 } else { 161 160 for (i = 0; i < nr; i++) { 162 - start = kmap_atomic(page+i); 161 + void *start = kmap_local_page(page + i); 162 + 163 163 __flush_dcache_icache(start); 164 - kunmap_atomic(start); 164 + kunmap_local(start); 165 165 } 166 166 } 167 167 } ··· 177 177 if (!PageHighMem(page)) { 178 178 __flush_dcache_icache(lowmem_page_address(page)); 179 179 } else if (IS_ENABLED(CONFIG_BOOKE) || sizeof(phys_addr_t) > sizeof(void *)) { 180 - void *start = kmap_atomic(page); 180 + void *start = kmap_local_page(page); 181 + 181 182 __flush_dcache_icache(start); 182 - kunmap_atomic(start); 183 + kunmap_local(start); 183 184 } else { 184 185 flush_dcache_icache_phys(page_to_phys(page)); 185 186 } ··· 226 225 void flush_icache_user_page(struct vm_area_struct *vma, struct page *page, 227 226 unsigned long addr, int len) 228 227 { 229 - unsigned long maddr; 228 + void *maddr; 230 229 231 - maddr = (unsigned long) kmap(page) + (addr & ~PAGE_MASK); 232 - flush_icache_range(maddr, maddr + len); 233 - kunmap(page); 230 + maddr = kmap_local_page(page) + (addr & ~PAGE_MASK); 231 + flush_icache_range((unsigned long)maddr, (unsigned long)maddr + len); 232 + kunmap_local(maddr); 234 233 }