diff options
-rw-r--r-- | mm/mmu_context.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/mm/mmu_context.c b/mm/mmu_context.c index fd473b51c903..ded9081f4021 100644 --- a/mm/mmu_context.c +++ b/mm/mmu_context.c | |||
@@ -26,13 +26,16 @@ void use_mm(struct mm_struct *mm) | |||
26 | 26 | ||
27 | task_lock(tsk); | 27 | task_lock(tsk); |
28 | active_mm = tsk->active_mm; | 28 | active_mm = tsk->active_mm; |
29 | atomic_inc(&mm->mm_count); | 29 | if (active_mm != mm) { |
30 | atomic_inc(&mm->mm_count); | ||
31 | tsk->active_mm = mm; | ||
32 | } | ||
30 | tsk->mm = mm; | 33 | tsk->mm = mm; |
31 | tsk->active_mm = mm; | ||
32 | switch_mm(active_mm, mm, tsk); | 34 | switch_mm(active_mm, mm, tsk); |
33 | task_unlock(tsk); | 35 | task_unlock(tsk); |
34 | 36 | ||
35 | mmdrop(active_mm); | 37 | if (active_mm != mm) |
38 | mmdrop(active_mm); | ||
36 | } | 39 | } |
37 | 40 | ||
38 | /* | 41 | /* |