diff options
| author | Kanoj Sarcar <kanoj@vger.kernel.org> | 2002-04-23 08:19:51 -0400 |
|---|---|---|
| committer | David S. Miller <davem@nuts.ninka.net> | 2002-04-23 08:19:51 -0400 |
| commit | 30746bbd9545ec11346d515e419878ea265bb4d7 (patch) | |
| tree | a612c66c2a131f3961562c453773f0db08b65b3c /kernel/fork.c | |
| parent | 45fbecb1147007167ea78399f165ceae775d86e7 (diff) | |
cachetlb.txt, locking, fork.c, mremap.c, mprotect.c, memory.c:
Make sure that flush_tlb_range is called with PTL held.
Also, make sure no new threads can start up in user mode
while a tlb_gather_mmu is in progress.
Diffstat (limited to 'kernel/fork.c')
| -rw-r--r-- | kernel/fork.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index 380c1bafe75c..cbf4a12aab4d 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -364,6 +364,13 @@ static int copy_mm(unsigned long clone_flags, struct task_struct * tsk) if (clone_flags & CLONE_VM) { atomic_inc(&oldmm->mm_users); mm = oldmm; + /* + * There are cases where the PTL is held to ensure no + * new threads start up in user mode using an mm, which + * allows optimizing out ipis; the tlb_gather_mmu code + * is an example. + */ + spin_unlock_wait(&oldmm->page_table_lock); goto good_mm; } |
