diff options
Diffstat (limited to 'arch/parisc/kernel/cache.c')
-rw-r--r-- | arch/parisc/kernel/cache.c | 64 |
1 files changed, 0 insertions, 64 deletions
diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c index ac87a40502e6..a6ffc775a9f8 100644 --- a/arch/parisc/kernel/cache.c +++ b/arch/parisc/kernel/cache.c | |||
@@ -581,67 +581,3 @@ flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr, unsigned long | |||
581 | __flush_cache_page(vma, vmaddr, PFN_PHYS(pfn)); | 581 | __flush_cache_page(vma, vmaddr, PFN_PHYS(pfn)); |
582 | } | 582 | } |
583 | } | 583 | } |
584 | |||
585 | #ifdef CONFIG_PARISC_TMPALIAS | ||
586 | |||
587 | void clear_user_highpage(struct page *page, unsigned long vaddr) | ||
588 | { | ||
589 | void *vto; | ||
590 | unsigned long flags; | ||
591 | |||
592 | /* Clear using TMPALIAS region. The page doesn't need to | ||
593 | be flushed but the kernel mapping needs to be purged. */ | ||
594 | |||
595 | vto = kmap_atomic(page); | ||
596 | |||
597 | /* The PA-RISC 2.0 Architecture book states on page F-6: | ||
598 | "Before a write-capable translation is enabled, *all* | ||
599 | non-equivalently-aliased translations must be removed | ||
600 | from the page table and purged from the TLB. (Note | ||
601 | that the caches are not required to be flushed at this | ||
602 | time.) Before any non-equivalent aliased translation | ||
603 | is re-enabled, the virtual address range for the writeable | ||
604 | page (the entire page) must be flushed from the cache, | ||
605 | and the write-capable translation removed from the page | ||
606 | table and purged from the TLB." */ | ||
607 | |||
608 | purge_kernel_dcache_page_asm((unsigned long)vto); | ||
609 | purge_tlb_start(flags); | ||
610 | pdtlb_kernel(vto); | ||
611 | purge_tlb_end(flags); | ||
612 | preempt_disable(); | ||
613 | clear_user_page_asm(vto, vaddr); | ||
614 | preempt_enable(); | ||
615 | |||
616 | pagefault_enable(); /* kunmap_atomic(addr, KM_USER0); */ | ||
617 | } | ||
618 | |||
619 | void copy_user_highpage(struct page *to, struct page *from, | ||
620 | unsigned long vaddr, struct vm_area_struct *vma) | ||
621 | { | ||
622 | void *vfrom, *vto; | ||
623 | unsigned long flags; | ||
624 | |||
625 | /* Copy using TMPALIAS region. This has the advantage | ||
626 | that the `from' page doesn't need to be flushed. However, | ||
627 | the `to' page must be flushed in copy_user_page_asm since | ||
628 | it can be used to bring in executable code. */ | ||
629 | |||
630 | vfrom = kmap_atomic(from); | ||
631 | vto = kmap_atomic(to); | ||
632 | |||
633 | purge_kernel_dcache_page_asm((unsigned long)vto); | ||
634 | purge_tlb_start(flags); | ||
635 | pdtlb_kernel(vto); | ||
636 | pdtlb_kernel(vfrom); | ||
637 | purge_tlb_end(flags); | ||
638 | preempt_disable(); | ||
639 | copy_user_page_asm(vto, vfrom, vaddr); | ||
640 | flush_dcache_page_asm(__pa(vto), vaddr); | ||
641 | preempt_enable(); | ||
642 | |||
643 | pagefault_enable(); /* kunmap_atomic(addr, KM_USER1); */ | ||
644 | pagefault_enable(); /* kunmap_atomic(addr, KM_USER0); */ | ||
645 | } | ||
646 | |||
647 | #endif /* CONFIG_PARISC_TMPALIAS */ | ||