kmod: split out umh code into its own file
[sfrench/cifs-2.6.git] / kernel / exit.c
index fa72d57db74735d158cbba630c5531fcf25c37a5..a35d8a17e01ff39a5cc65459b9d8a12a19e3c523 100644 (file)
@@ -764,7 +764,6 @@ void __noreturn do_exit(long code)
 {
        struct task_struct *tsk = current;
        int group_dead;
-       TASKS_RCU(int tasks_rcu_i);
 
        profile_task_exit(tsk);
        kcov_task_exit(tsk);
@@ -819,7 +818,8 @@ void __noreturn do_exit(long code)
         * Ensure that we must observe the pi_state in exit_mm() ->
         * mm_release() -> exit_pi_state_list().
         */
-       raw_spin_unlock_wait(&tsk->pi_lock);
+       raw_spin_lock_irq(&tsk->pi_lock);
+       raw_spin_unlock_irq(&tsk->pi_lock);
 
        if (unlikely(in_atomic())) {
                pr_info("note: %s[%d] exited with preempt_count %d\n",
@@ -881,9 +881,7 @@ void __noreturn do_exit(long code)
         */
        flush_ptrace_hw_breakpoint(tsk);
 
-       TASKS_RCU(preempt_disable());
-       TASKS_RCU(tasks_rcu_i = __srcu_read_lock(&tasks_rcu_exit_srcu));
-       TASKS_RCU(preempt_enable());
+       exit_tasks_rcu_start();
        exit_notify(tsk, group_dead);
        proc_exit_connector(tsk);
        mpol_put_task_policy(tsk);
@@ -918,7 +916,7 @@ void __noreturn do_exit(long code)
        if (tsk->nr_dirtied)
                __this_cpu_add(dirty_throttle_leaks, tsk->nr_dirtied);
        exit_rcu();
-       TASKS_RCU(__srcu_read_unlock(&tasks_rcu_exit_srcu, tasks_rcu_i));
+       exit_tasks_rcu_finish();
 
        lockdep_free_task(tsk);
        do_task_dead();