-11
arch/parisc/include/asm/page.h
-11
arch/parisc/include/asm/page.h
···
32
32
void copy_user_page(void *vto, void *vfrom, unsigned long vaddr,
33
33
struct page *pg);
34
34
35
-
/* #define CONFIG_PARISC_TMPALIAS */
36
-
37
-
#ifdef CONFIG_PARISC_TMPALIAS
38
-
void clear_user_highpage(struct page *page, unsigned long vaddr);
39
-
#define clear_user_highpage clear_user_highpage
40
-
struct vm_area_struct;
41
-
void copy_user_highpage(struct page *to, struct page *from,
42
-
unsigned long vaddr, struct vm_area_struct *vma);
43
-
#define __HAVE_ARCH_COPY_USER_HIGHPAGE
44
-
#endif
45
-
46
35
/*
47
36
* These are used to make use of C type-checking..
48
37
*/
-64
arch/parisc/kernel/cache.c
-64
arch/parisc/kernel/cache.c
···
581
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 */