aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/exit.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2017-08-21 03:45:19 -0400
committerIngo Molnar <mingo@kernel.org>2017-08-21 03:45:19 -0400
commit94edf6f3c20c9c8ee301bde04150a91bab4bf32c (patch)
tree4a2af658258cf42fde24c1224e44c3e6a18c2792 /kernel/exit.c
parentd5da6457bfadf64ff78f1816ae8329dbbba19513 (diff)
parent656e7c0c0a2e8d899f87fd7f081ea7a711146604 (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.c10
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}