diff options
Diffstat (limited to 'arch/sparc/include/asm/pgtable_64.h')
| -rw-r--r-- | arch/sparc/include/asm/pgtable_64.h | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/arch/sparc/include/asm/pgtable_64.h b/arch/sparc/include/asm/pgtable_64.h index b77128c8052..1e03c5a6b4f 100644 --- a/arch/sparc/include/asm/pgtable_64.h +++ b/arch/sparc/include/asm/pgtable_64.h | |||
| @@ -655,9 +655,11 @@ static inline int pte_special(pte_t pte) | |||
| 655 | #define pte_unmap(pte) do { } while (0) | 655 | #define pte_unmap(pte) do { } while (0) |
| 656 | 656 | ||
| 657 | /* Actual page table PTE updates. */ | 657 | /* Actual page table PTE updates. */ |
| 658 | 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); | ||
| 659 | 660 | ||
| 660 | 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) | ||
| 661 | { | 663 | { |
| 662 | pte_t orig = *ptep; | 664 | pte_t orig = *ptep; |
| 663 | 665 | ||
| @@ -670,12 +672,19 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, pte_t *p | |||
| 670 | * and SUN4V pte layout, so this inline test is fine. | 672 | * and SUN4V pte layout, so this inline test is fine. |
| 671 | */ | 673 | */ |
| 672 | if (likely(mm != &init_mm) && (pte_val(orig) & _PAGE_VALID)) | 674 | if (likely(mm != &init_mm) && (pte_val(orig) & _PAGE_VALID)) |
| 673 | tlb_batch_add(mm, addr, ptep, orig); | 675 | tlb_batch_add(mm, addr, ptep, orig, fullmm); |
| 674 | } | 676 | } |
| 675 | 677 | ||
| 678 | #define set_pte_at(mm,addr,ptep,pte) \ | ||
| 679 | __set_pte_at((mm), (addr), (ptep), (pte), 0) | ||
| 680 | |||
| 676 | #define pte_clear(mm,addr,ptep) \ | 681 | #define pte_clear(mm,addr,ptep) \ |
| 677 | set_pte_at((mm), (addr), (ptep), __pte(0UL)) | 682 | set_pte_at((mm), (addr), (ptep), __pte(0UL)) |
| 678 | 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 | |||
| 679 | #ifdef DCACHE_ALIASING_POSSIBLE | 688 | #ifdef DCACHE_ALIASING_POSSIBLE |
| 680 | #define __HAVE_ARCH_MOVE_PTE | 689 | #define __HAVE_ARCH_MOVE_PTE |
| 681 | #define move_pte(pte, prot, old_addr, new_addr) \ | 690 | #define move_pte(pte, prot, old_addr, new_addr) \ |
