Lines Matching refs:tsk
62 static void exit_mm(struct task_struct *tsk);
83 static void __exit_signal(struct task_struct *tsk) in __exit_signal() argument
85 struct signal_struct *sig = tsk->signal; in __exit_signal()
86 bool group_dead = thread_group_leader(tsk); in __exit_signal()
91 sighand = rcu_dereference_check(tsk->sighand, in __exit_signal()
95 posix_cpu_timers_exit(tsk); in __exit_signal()
97 posix_cpu_timers_exit_group(tsk); in __exit_signal()
106 if (unlikely(has_group_leader_pid(tsk))) in __exit_signal()
107 posix_cpu_timers_exit_group(tsk); in __exit_signal()
116 if (tsk == sig->curr_target) in __exit_signal()
117 sig->curr_target = next_thread(tsk); in __exit_signal()
126 task_cputime(tsk, &utime, &stime); in __exit_signal()
130 sig->gtime += task_gtime(tsk); in __exit_signal()
131 sig->min_flt += tsk->min_flt; in __exit_signal()
132 sig->maj_flt += tsk->maj_flt; in __exit_signal()
133 sig->nvcsw += tsk->nvcsw; in __exit_signal()
134 sig->nivcsw += tsk->nivcsw; in __exit_signal()
135 sig->inblock += task_io_get_inblock(tsk); in __exit_signal()
136 sig->oublock += task_io_get_oublock(tsk); in __exit_signal()
137 task_io_accounting_add(&sig->ioac, &tsk->ioac); in __exit_signal()
138 sig->sum_sched_runtime += tsk->se.sum_exec_runtime; in __exit_signal()
140 __unhash_process(tsk, group_dead); in __exit_signal()
147 flush_sigqueue(&tsk->pending); in __exit_signal()
148 tsk->sighand = NULL; in __exit_signal()
152 clear_tsk_thread_flag(tsk, TIF_SIGPENDING); in __exit_signal()
161 struct task_struct *tsk = container_of(rhp, struct task_struct, rcu); in delayed_put_task_struct() local
163 perf_event_delayed_put(tsk); in delayed_put_task_struct()
164 trace_sched_process_free(tsk); in delayed_put_task_struct()
165 put_task_struct(tsk); in delayed_put_task_struct()
270 kill_orphaned_pgrp(struct task_struct *tsk, struct task_struct *parent) in kill_orphaned_pgrp() argument
272 struct pid *pgrp = task_pgrp(tsk); in kill_orphaned_pgrp()
273 struct task_struct *ignored_task = tsk; in kill_orphaned_pgrp()
279 parent = tsk->real_parent; in kill_orphaned_pgrp()
287 task_session(parent) == task_session(tsk) && in kill_orphaned_pgrp()
387 static void exit_mm(struct task_struct *tsk) in exit_mm() argument
389 struct mm_struct *mm = tsk->mm; in exit_mm()
392 mm_release(tsk, mm); in exit_mm()
410 self.task = tsk; in exit_mm()
420 set_task_state(tsk, TASK_UNINTERRUPTIBLE); in exit_mm()
425 __set_task_state(tsk, TASK_RUNNING); in exit_mm()
429 BUG_ON(mm != tsk->active_mm); in exit_mm()
431 task_lock(tsk); in exit_mm()
432 tsk->mm = NULL; in exit_mm()
435 task_unlock(tsk); in exit_mm()
589 static void exit_notify(struct task_struct *tsk, int group_dead) in exit_notify() argument
596 forget_original_parent(tsk, &dead); in exit_notify()
599 kill_orphaned_pgrp(tsk->group_leader, NULL); in exit_notify()
601 if (unlikely(tsk->ptrace)) { in exit_notify()
602 int sig = thread_group_leader(tsk) && in exit_notify()
603 thread_group_empty(tsk) && in exit_notify()
604 !ptrace_reparented(tsk) ? in exit_notify()
605 tsk->exit_signal : SIGCHLD; in exit_notify()
606 autoreap = do_notify_parent(tsk, sig); in exit_notify()
607 } else if (thread_group_leader(tsk)) { in exit_notify()
608 autoreap = thread_group_empty(tsk) && in exit_notify()
609 do_notify_parent(tsk, tsk->exit_signal); in exit_notify()
614 tsk->exit_state = autoreap ? EXIT_DEAD : EXIT_ZOMBIE; in exit_notify()
615 if (tsk->exit_state == EXIT_DEAD) in exit_notify()
616 list_add(&tsk->ptrace_entry, &dead); in exit_notify()
619 if (unlikely(tsk->signal->notify_count < 0)) in exit_notify()
620 wake_up_process(tsk->signal->group_exit_task); in exit_notify()
655 struct task_struct *tsk = current; in do_exit() local
659 profile_task_exit(tsk); in do_exit()
661 WARN_ON(blk_needs_flush_plug(tsk)); in do_exit()
665 if (unlikely(!tsk->pid)) in do_exit()
679 validate_creds_for_do_exit(tsk); in do_exit()
685 if (unlikely(tsk->flags & PF_EXITING)) { in do_exit()
696 tsk->flags |= PF_EXITPIDONE; in do_exit()
701 exit_signals(tsk); /* sets PF_EXITING */ in do_exit()
707 raw_spin_unlock_wait(&tsk->pi_lock); in do_exit()
717 if (tsk->mm) in do_exit()
718 sync_mm_rss(tsk->mm); in do_exit()
719 acct_update_integrals(tsk); in do_exit()
720 group_dead = atomic_dec_and_test(&tsk->signal->live); in do_exit()
722 hrtimer_cancel(&tsk->signal->real_timer); in do_exit()
723 exit_itimers(tsk->signal); in do_exit()
724 if (tsk->mm) in do_exit()
725 setmax_mm_hiwater_rss(&tsk->signal->maxrss, tsk->mm); in do_exit()
730 audit_free(tsk); in do_exit()
732 tsk->exit_code = code; in do_exit()
733 taskstats_exit(tsk, group_dead); in do_exit()
735 exit_mm(tsk); in do_exit()
739 trace_sched_process_exit(tsk); in do_exit()
741 exit_sem(tsk); in do_exit()
742 exit_shm(tsk); in do_exit()
743 exit_files(tsk); in do_exit()
744 exit_fs(tsk); in do_exit()
747 exit_task_namespaces(tsk); in do_exit()
748 exit_task_work(tsk); in do_exit()
757 perf_event_exit_task(tsk); in do_exit()
759 cgroup_exit(tsk); in do_exit()
764 flush_ptrace_hw_breakpoint(tsk); in do_exit()
769 exit_notify(tsk, group_dead); in do_exit()
770 proc_exit_connector(tsk); in do_exit()
772 task_lock(tsk); in do_exit()
773 mpol_put(tsk->mempolicy); in do_exit()
774 tsk->mempolicy = NULL; in do_exit()
775 task_unlock(tsk); in do_exit()
790 tsk->flags |= PF_EXITPIDONE; in do_exit()
792 if (tsk->io_context) in do_exit()
793 exit_io_context(tsk); in do_exit()
795 if (tsk->splice_pipe) in do_exit()
796 free_pipe_info(tsk->splice_pipe); in do_exit()
798 if (tsk->task_frag.page) in do_exit()
799 put_page(tsk->task_frag.page); in do_exit()
801 validate_creds_for_do_exit(tsk); in do_exit()
805 if (tsk->nr_dirtied) in do_exit()
806 __this_cpu_add(dirty_throttle_leaks, tsk->nr_dirtied); in do_exit()
823 raw_spin_unlock_wait(&tsk->pi_lock); in do_exit()
826 tsk->state = TASK_DEAD; in do_exit()
827 tsk->flags |= PF_NOFREEZE; /* tell freezer to ignore us */ in do_exit()
1427 static int do_wait_thread(struct wait_opts *wo, struct task_struct *tsk) in do_wait_thread() argument
1431 list_for_each_entry(p, &tsk->children, sibling) { in do_wait_thread()
1441 static int ptrace_do_wait(struct wait_opts *wo, struct task_struct *tsk) in ptrace_do_wait() argument
1445 list_for_each_entry(p, &tsk->ptraced, ptrace_entry) { in ptrace_do_wait()
1479 struct task_struct *tsk; in do_wait() local
1501 tsk = current; in do_wait()
1503 retval = do_wait_thread(wo, tsk); in do_wait()
1507 retval = ptrace_do_wait(wo, tsk); in do_wait()
1513 } while_each_thread(current, tsk); in do_wait()