diff options
author | Ingo Molnar <mingo@kernel.org> | 2017-08-21 03:45:19 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2017-08-21 03:45:19 -0400 |
commit | 94edf6f3c20c9c8ee301bde04150a91bab4bf32c (patch) | |
tree | 4a2af658258cf42fde24c1224e44c3e6a18c2792 /kernel/exit.c | |
parent | d5da6457bfadf64ff78f1816ae8329dbbba19513 (diff) | |
parent | 656e7c0c0a2e8d899f87fd7f081ea7a711146604 (diff) |
Merge branch 'for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu into core/rcu
Pull RCU updates from Paul E. McKenney:
- Removal of spin_unlock_wait()
- SRCU updates
- Torture-test updates
- Documentation updates
- Miscellaneous fixes
- CPU-hotplug fixes
- Miscellaneous non-RCU fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/exit.c')
-rw-r--r-- | kernel/exit.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index c5548faa9f37..f9ef3ecc78c1 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -764,7 +764,6 @@ void __noreturn do_exit(long code) | |||
764 | { | 764 | { |
765 | struct task_struct *tsk = current; | 765 | struct task_struct *tsk = current; |
766 | int group_dead; | 766 | int group_dead; |
767 | TASKS_RCU(int tasks_rcu_i); | ||
768 | 767 | ||
769 | profile_task_exit(tsk); | 768 | profile_task_exit(tsk); |
770 | kcov_task_exit(tsk); | 769 | kcov_task_exit(tsk); |
@@ -819,7 +818,8 @@ void __noreturn do_exit(long code) | |||
819 | * Ensure that we must observe the pi_state in exit_mm() -> | 818 | * Ensure that we must observe the pi_state in exit_mm() -> |
820 | * mm_release() -> exit_pi_state_list(). | 819 | * mm_release() -> exit_pi_state_list(). |
821 | */ | 820 | */ |
822 | raw_spin_unlock_wait(&tsk->pi_lock); | 821 | raw_spin_lock_irq(&tsk->pi_lock); |
822 | raw_spin_unlock_irq(&tsk->pi_lock); | ||
823 | 823 | ||
824 | if (unlikely(in_atomic())) { | 824 | if (unlikely(in_atomic())) { |
825 | pr_info("note: %s[%d] exited with preempt_count %d\n", | 825 | pr_info("note: %s[%d] exited with preempt_count %d\n", |
@@ -881,9 +881,7 @@ void __noreturn do_exit(long code) | |||
881 | */ | 881 | */ |
882 | flush_ptrace_hw_breakpoint(tsk); | 882 | flush_ptrace_hw_breakpoint(tsk); |
883 | 883 | ||
884 | TASKS_RCU(preempt_disable()); | 884 | exit_tasks_rcu_start(); |
885 | TASKS_RCU(tasks_rcu_i = __srcu_read_lock(&tasks_rcu_exit_srcu)); | ||
886 | TASKS_RCU(preempt_enable()); | ||
887 | exit_notify(tsk, group_dead); | 885 | exit_notify(tsk, group_dead); |
888 | proc_exit_connector(tsk); | 886 | proc_exit_connector(tsk); |
889 | mpol_put_task_policy(tsk); | 887 | mpol_put_task_policy(tsk); |
@@ -918,7 +916,7 @@ void __noreturn do_exit(long code) | |||
918 | if (tsk->nr_dirtied) | 916 | if (tsk->nr_dirtied) |
919 | __this_cpu_add(dirty_throttle_leaks, tsk->nr_dirtied); | 917 | __this_cpu_add(dirty_throttle_leaks, tsk->nr_dirtied); |
920 | exit_rcu(); | 918 | exit_rcu(); |
921 | TASKS_RCU(__srcu_read_unlock(&tasks_rcu_exit_srcu, tasks_rcu_i)); | 919 | exit_tasks_rcu_finish(); |
922 | 920 | ||
923 | do_task_dead(); | 921 | do_task_dead(); |
924 | } | 922 | } |