diff options
| author | David S. Miller <davem@nuts.davemloft.net> | 2005-02-26 19:34:35 -0800 |
|---|---|---|
| committer | David S. Miller <davem@nuts.davemloft.net> | 2005-02-26 19:34:35 -0800 |
| commit | 1c7c8e67c3fca9f4e233a9e5d410d4c2bae10e12 (patch) | |
| tree | a76ba608c1b668211f2f340958babc596fb88c4a /include | |
| parent | a9128d881ed779d09474db91b6251a2b14183019 (diff) | |
[SPARC64]: Do the init_mm check inline in set_pte_at().
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-sparc64/pgtable.h | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/include/asm-sparc64/pgtable.h b/include/asm-sparc64/pgtable.h index 5373e6cf13d3..f6bc1dbdb367 100644 --- a/include/asm-sparc64/pgtable.h +++ b/include/asm-sparc64/pgtable.h @@ -15,6 +15,7 @@ #include <asm-generic/pgtable-nopud.h> #include <linux/config.h> +#include <linux/compiler.h> #include <asm/spitfire.h> #include <asm/asi.h> #include <asm/system.h> @@ -333,16 +334,18 @@ static inline pte_t pte_modify(pte_t orig_pte, pgprot_t new_prot) #define pte_unmap_nested(pte) do { } while (0) /* Actual page table PTE updates. */ -extern void tlb_batch_add(struct mm_struct *mm, unsigned long addr, - pte_t *ptep, pte_t orig); +extern void tlb_batch_add(struct mm_struct *mm, unsigned long vaddr, pte_t *ptep, pte_t orig); -static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, - pte_t *ptep, pte_t pte) +static inline void set_pte_at(struct mm_struct *mm, unsigned long addr, pte_t *ptep, pte_t pte) { pte_t orig = *ptep; *ptep = pte; - if (pte_val(orig) & _PAGE_VALID) + + /* It is more efficient to let flush_tlb_kernel_range() + * handle init_mm tlb flushes. + */ + if (likely(mm != &init_mm) && (pte_val(orig) & _PAGE_VALID)) tlb_batch_add(mm, addr, ptep, orig); } |
