diff options
author | Jeremy Fitzhardinge <jeremy@goop.org> | 2009-01-06 17:39:21 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-06 18:59:01 -0500 |
commit | 38e0edb15bd07c6a0caf0cfe39f8f90bd98601b2 (patch) | |
tree | 1ba874020bb20412ba312abef199a8668c5b99a6 /mm/memory.c | |
parent | cd52858c73f9f7df859a08fb08496ca39b9b3d8d (diff) |
mm/apply_to_range: call pte function with lazy updates
Make the pte-level function in apply_to_range be called in lazy mmu mode,
so that any pagetable modifications can be batched.
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Cc: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
Cc: Hugh Dickins <hugh@veritas.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/memory.c')
-rw-r--r-- | mm/memory.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/mm/memory.c b/mm/memory.c index 99e8d5c7b312..b5af358b8b22 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
@@ -1645,6 +1645,8 @@ static int apply_to_pte_range(struct mm_struct *mm, pmd_t *pmd, | |||
1645 | 1645 | ||
1646 | BUG_ON(pmd_huge(*pmd)); | 1646 | BUG_ON(pmd_huge(*pmd)); |
1647 | 1647 | ||
1648 | arch_enter_lazy_mmu_mode(); | ||
1649 | |||
1648 | token = pmd_pgtable(*pmd); | 1650 | token = pmd_pgtable(*pmd); |
1649 | 1651 | ||
1650 | do { | 1652 | do { |
@@ -1653,6 +1655,8 @@ static int apply_to_pte_range(struct mm_struct *mm, pmd_t *pmd, | |||
1653 | break; | 1655 | break; |
1654 | } while (pte++, addr += PAGE_SIZE, addr != end); | 1656 | } while (pte++, addr += PAGE_SIZE, addr != end); |
1655 | 1657 | ||
1658 | arch_leave_lazy_mmu_mode(); | ||
1659 | |||
1656 | if (mm != &init_mm) | 1660 | if (mm != &init_mm) |
1657 | pte_unmap_unlock(pte-1, ptl); | 1661 | pte_unmap_unlock(pte-1, ptl); |
1658 | return err; | 1662 | return err; |