diff options
Diffstat (limited to 'kernel/fork.c')
-rw-r--r-- | kernel/fork.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/kernel/fork.c b/kernel/fork.c index 5c372c954f3b..c7c112391d79 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -606,6 +606,11 @@ static void __mmdrop(struct mm_struct *mm) | |||
606 | 606 | ||
607 | void mmdrop(struct mm_struct *mm) | 607 | void mmdrop(struct mm_struct *mm) |
608 | { | 608 | { |
609 | /* | ||
610 | * The implicit full barrier implied by atomic_dec_and_test() is | ||
611 | * required by the membarrier system call before returning to | ||
612 | * user-space, after storing to rq->curr. | ||
613 | */ | ||
609 | if (unlikely(atomic_dec_and_test(&mm->mm_count))) | 614 | if (unlikely(atomic_dec_and_test(&mm->mm_count))) |
610 | __mmdrop(mm); | 615 | __mmdrop(mm); |
611 | } | 616 | } |