summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDavid S. Miller <davem@nuts.davemloft.net>2005-02-26 19:34:35 -0800
committerDavid S. Miller <davem@nuts.davemloft.net>2005-02-26 19:34:35 -0800
commit1c7c8e67c3fca9f4e233a9e5d410d4c2bae10e12 (patch)
treea76ba608c1b668211f2f340958babc596fb88c4a /include
parenta9128d881ed779d09474db91b6251a2b14183019 (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.h13
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);
}