diff options
Diffstat (limited to 'arch/parisc/kernel/cache.c')
-rw-r--r-- | arch/parisc/kernel/cache.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c index a72545554a31..ac87a40502e6 100644 --- a/arch/parisc/kernel/cache.c +++ b/arch/parisc/kernel/cache.c | |||
@@ -388,6 +388,20 @@ void flush_kernel_dcache_page_addr(void *addr) | |||
388 | } | 388 | } |
389 | EXPORT_SYMBOL(flush_kernel_dcache_page_addr); | 389 | EXPORT_SYMBOL(flush_kernel_dcache_page_addr); |
390 | 390 | ||
391 | void copy_user_page(void *vto, void *vfrom, unsigned long vaddr, | ||
392 | struct page *pg) | ||
393 | { | ||
394 | /* Copy using kernel mapping. No coherency is needed (all in | ||
395 | kunmap) for the `to' page. However, the `from' page needs to | ||
396 | be flushed through a mapping equivalent to the user mapping | ||
397 | before it can be accessed through the kernel mapping. */ | ||
398 | preempt_disable(); | ||
399 | flush_dcache_page_asm(__pa(vfrom), vaddr); | ||
400 | preempt_enable(); | ||
401 | copy_page_asm(vto, vfrom); | ||
402 | } | ||
403 | EXPORT_SYMBOL(copy_user_page); | ||
404 | |||
391 | void purge_tlb_entries(struct mm_struct *mm, unsigned long addr) | 405 | void purge_tlb_entries(struct mm_struct *mm, unsigned long addr) |
392 | { | 406 | { |
393 | unsigned long flags; | 407 | unsigned long flags; |