diff options
Diffstat (limited to 'arch/sparc/include/asm/pgtable_64.h')
-rw-r--r-- | arch/sparc/include/asm/pgtable_64.h | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/pgtable_64.h index f5b5fa76c02d..1e03c5a6b4f7 100644 --- a/arch/sparc/include/asm/pgtable_64.h +++ b/arch/sparc/include/asm/pgtable_64.h | |||
@@ -652,14 +652,14 @@ static inline int pte_special(pte_t pte) | |||
652 | ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))) | 652 | ((address >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))) |
653 | #define pte_offset_kernel pte_index | 653 | #define pte_offset_kernel pte_index |
654 | #define pte_offset_map pte_index | 654 | #define pte_offset_map pte_index |
655 | #define pte_offset_map_nested pte_index | ||
656 | #define pte_unmap(pte) do { } while (0) | 655 | #define pte_unmap(pte) do { } while (0) |
657 | #define pte_unmap_nested(pte) do { } while (0) | ||
658 | 656 | ||
659 | /* Actual page table PTE updates. */ | 657 | /* Actual page table PTE updates. */ |
660 | extern void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, pte_t *ptep, pte_t orig); | 658 | extern void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, |
659 | pte_t *ptep, pte_t orig, int fullmm); | ||
661 | 660 | ||
662 | static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, pte_t *ptep, pte_t pte) | 661 | static inline void __set_pte_at(struct mm_struct *mm, unsigned long addr, |
662 | pte_t *ptep, pte_t pte, int fullmm) | ||
663 | { | 663 | { |
664 | pte_t orig = *ptep; | 664 | pte_t orig = *ptep; |
665 | 665 | ||
@@ -672,12 +672,19 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, pte_t *p | |||
672 | * and SUN4V pte layout, so this inline test is fine. | 672 | * and SUN4V pte layout, so this inline test is fine. |
673 | */ | 673 | */ |
674 | if (likely(mm != &init_mm) && (pte_val(orig) & _PAGE_VALID)) | 674 | if (likely(mm != &init_mm) && (pte_val(orig) & _PAGE_VALID)) |
675 | tlb_batch_add(mm, addr, ptep, orig); | 675 | tlb_batch_add(mm, addr, ptep, orig, fullmm); |
676 | } | 676 | } |
677 | 677 | ||
678 | #define set_pte_at(mm,addr,ptep,pte) \ | ||
679 | __set_pte_at((mm), (addr), (ptep), (pte), 0) | ||
680 | |||
678 | #define pte_clear(mm,addr,ptep) \ | 681 | #define pte_clear(mm,addr,ptep) \ |
679 | set_pte_at((mm), (addr), (ptep), __pte(0UL)) | 682 | set_pte_at((mm), (addr), (ptep), __pte(0UL)) |
680 | 683 | ||
684 | #define __HAVE_ARCH_PTE_CLEAR_NOT_PRESENT_FULL | ||
685 | #define pte_clear_not_present_full(mm,addr,ptep,fullmm) \ | ||
686 | __set_pte_at((mm), (addr), (ptep), __pte(0UL), (fullmm)) | ||
687 | |||
681 | #ifdef DCACHE_ALIASING_POSSIBLE | 688 | #ifdef DCACHE_ALIASING_POSSIBLE |
682 | #define __HAVE_ARCH_MOVE_PTE | 689 | #define __HAVE_ARCH_MOVE_PTE |
683 | #define move_pte(pte, prot, old_addr, new_addr) \ | 690 | #define move_pte(pte, prot, old_addr, new_addr) \ |
@@ -701,6 +708,9 @@ extern pmd_t swapper_low_pmd_dir[2048]; | |||
701 | extern void paging_init(void); | 708 | extern void paging_init(void); |
702 | extern unsigned long find_ecache_flush_span(unsigned long size); | 709 | extern unsigned long find_ecache_flush_span(unsigned long size); |
703 | 710 | ||
711 | struct seq_file; | ||
712 | extern void mmu_info(struct seq_file *); | ||
713 | |||
704 | /* These do nothing with the way I have things setup. */ | 714 | /* These do nothing with the way I have things setup. */ |
705 | #define mmu_lockarea(vaddr, len) (vaddr) | 715 | #define mmu_lockarea(vaddr, len) (vaddr) |
706 | #define mmu_unlockarea(vaddr, len) do { } while(0) | 716 | #define mmu_unlockarea(vaddr, len) do { } while(0) |