diff options
author | Hugh Dickins <hugh@veritas.com> | 2005-10-29 21:16:24 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-10-30 00:40:40 -0400 |
commit | b462705ac679f6195d1b23a752cda592d9107495 (patch) | |
tree | c4d9be08f67b0ffdc66c3e170614bd03945f3c42 /arch/um | |
parent | c74df32c724a1652ad8399b4891bb02c9d43743a (diff) |
[PATCH] mm: arches skip ptlock
Convert those few architectures which are calling pud_alloc, pmd_alloc,
pte_alloc_map on a user mm, not to take the page_table_lock first, nor drop it
after. Each of these can continue to use pte_alloc_map, no need to change
over to pte_alloc_map_lock, they're neither racy nor swappable.
In the sparc64 io_remap_pfn_range, flush_tlb_range then falls outside of the
page_table_lock: that's okay, on sparc64 it's like flush_tlb_mm, and that has
always been called from outside of page_table_lock in dup_mmap.
Signed-off-by: Hugh Dickins <hugh@veritas.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/um')
-rw-r--r-- | arch/um/kernel/skas/mmu.c | 3 |
1 files changed, 0 insertions, 3 deletions
diff --git a/arch/um/kernel/skas/mmu.c b/arch/um/kernel/skas/mmu.c index 240143b616a2..02cf36e0331a 100644 --- a/arch/um/kernel/skas/mmu.c +++ b/arch/um/kernel/skas/mmu.c | |||
@@ -28,7 +28,6 @@ static int init_stub_pte(struct mm_struct *mm, unsigned long proc, | |||
28 | pmd_t *pmd; | 28 | pmd_t *pmd; |
29 | pte_t *pte; | 29 | pte_t *pte; |
30 | 30 | ||
31 | spin_lock(&mm->page_table_lock); | ||
32 | pgd = pgd_offset(mm, proc); | 31 | pgd = pgd_offset(mm, proc); |
33 | pud = pud_alloc(mm, pgd, proc); | 32 | pud = pud_alloc(mm, pgd, proc); |
34 | if (!pud) | 33 | if (!pud) |
@@ -63,7 +62,6 @@ static int init_stub_pte(struct mm_struct *mm, unsigned long proc, | |||
63 | *pte = mk_pte(virt_to_page(kernel), __pgprot(_PAGE_PRESENT)); | 62 | *pte = mk_pte(virt_to_page(kernel), __pgprot(_PAGE_PRESENT)); |
64 | *pte = pte_mkexec(*pte); | 63 | *pte = pte_mkexec(*pte); |
65 | *pte = pte_wrprotect(*pte); | 64 | *pte = pte_wrprotect(*pte); |
66 | spin_unlock(&mm->page_table_lock); | ||
67 | return(0); | 65 | return(0); |
68 | 66 | ||
69 | out_pmd: | 67 | out_pmd: |
@@ -71,7 +69,6 @@ static int init_stub_pte(struct mm_struct *mm, unsigned long proc, | |||
71 | out_pte: | 69 | out_pte: |
72 | pmd_free(pmd); | 70 | pmd_free(pmd); |
73 | out: | 71 | out: |
74 | spin_unlock(&mm->page_table_lock); | ||
75 | return(-ENOMEM); | 72 | return(-ENOMEM); |
76 | } | 73 | } |
77 | 74 | ||