Lines Matching refs:wo
942 static int eligible_pid(struct wait_opts *wo, struct task_struct *p) in eligible_pid() argument
944 return wo->wo_type == PIDTYPE_MAX || in eligible_pid()
945 task_pid_type(p, wo->wo_type) == wo->wo_pid; in eligible_pid()
949 eligible_child(struct wait_opts *wo, bool ptrace, struct task_struct *p) in eligible_child() argument
951 if (!eligible_pid(wo, p)) in eligible_child()
958 if (ptrace || (wo->wo_flags & __WALL)) in eligible_child()
969 if ((p->exit_signal != SIGCHLD) ^ !!(wo->wo_flags & __WCLONE)) in eligible_child()
981 static int wait_task_zombie(struct wait_opts *wo, struct task_struct *p) in wait_task_zombie() argument
988 if (!likely(wo->wo_flags & WEXITED)) in wait_task_zombie()
991 if (unlikely(wo->wo_flags & WNOWAIT)) { in wait_task_zombie()
996 if (wo->wo_rusage) in wait_task_zombie()
997 getrusage(p, RUSAGE_BOTH, wo->wo_rusage); in wait_task_zombie()
1072 if (wo->wo_rusage) in wait_task_zombie()
1073 getrusage(p, RUSAGE_BOTH, wo->wo_rusage); in wait_task_zombie()
1076 wo->wo_stat = status; in wait_task_zombie()
1094 infop = wo->wo_info; in wait_task_zombie()
1140 static int wait_task_stopped(struct wait_opts *wo, in wait_task_stopped() argument
1151 if (!ptrace && !(wo->wo_flags & WUNTRACED)) in wait_task_stopped()
1168 if (!unlikely(wo->wo_flags & WNOWAIT)) in wait_task_stopped()
1189 if (wo->wo_rusage) in wait_task_stopped()
1190 getrusage(p, RUSAGE_BOTH, wo->wo_rusage); in wait_task_stopped()
1193 if (likely(!(wo->wo_flags & WNOWAIT))) in wait_task_stopped()
1194 wo->wo_stat = (exit_code << 8) | 0x7f; in wait_task_stopped()
1196 infop = wo->wo_info; in wait_task_stopped()
1212 static int wait_task_continued(struct wait_opts *wo, struct task_struct *p) in wait_task_continued() argument
1218 if (!unlikely(wo->wo_flags & WCONTINUED)) in wait_task_continued()
1230 if (!unlikely(wo->wo_flags & WNOWAIT)) in wait_task_continued()
1239 if (wo->wo_rusage) in wait_task_continued()
1240 getrusage(p, RUSAGE_BOTH, wo->wo_rusage); in wait_task_continued()
1243 infop = wo->wo_info; in wait_task_continued()
1245 wo->wo_stat = 0xffff; in wait_task_continued()
1264 static int wait_consider_task(struct wait_opts *wo, int ptrace, in wait_consider_task() argument
1278 ret = eligible_child(wo, ptrace, p); in wait_consider_task()
1288 wo->notask_error = 0; in wait_consider_task()
1318 return wait_task_zombie(wo, p); in wait_consider_task()
1341 if (likely(!ptrace) || (wo->wo_flags & (WCONTINUED | WEXITED))) in wait_consider_task()
1342 wo->notask_error = 0; in wait_consider_task()
1348 wo->notask_error = 0; in wait_consider_task()
1355 ret = wait_task_stopped(wo, ptrace, p); in wait_consider_task()
1364 return wait_task_continued(wo, p); in wait_consider_task()
1376 static int do_wait_thread(struct wait_opts *wo, struct task_struct *tsk) in do_wait_thread() argument
1381 int ret = wait_consider_task(wo, 0, p); in do_wait_thread()
1390 static int ptrace_do_wait(struct wait_opts *wo, struct task_struct *tsk) in ptrace_do_wait() argument
1395 int ret = wait_consider_task(wo, 1, p); in ptrace_do_wait()
1407 struct wait_opts *wo = container_of(wait, struct wait_opts, in child_wait_callback() local
1411 if (!eligible_pid(wo, p)) in child_wait_callback()
1414 if ((wo->wo_flags & __WNOTHREAD) && wait->private != p->parent) in child_wait_callback()
1426 static long do_wait(struct wait_opts *wo) in do_wait() argument
1431 trace_sched_process_wait(wo->wo_pid); in do_wait()
1433 init_waitqueue_func_entry(&wo->child_wait, child_wait_callback); in do_wait()
1434 wo->child_wait.private = current; in do_wait()
1435 add_wait_queue(¤t->signal->wait_chldexit, &wo->child_wait); in do_wait()
1443 wo->notask_error = -ECHILD; in do_wait()
1444 if ((wo->wo_type < PIDTYPE_MAX) && in do_wait()
1445 (!wo->wo_pid || !pid_has_task(wo->wo_pid, wo->wo_type))) in do_wait()
1452 retval = do_wait_thread(wo, tsk); in do_wait()
1456 retval = ptrace_do_wait(wo, tsk); in do_wait()
1460 if (wo->wo_flags & __WNOTHREAD) in do_wait()
1466 retval = wo->notask_error; in do_wait()
1467 if (!retval && !(wo->wo_flags & WNOHANG)) { in do_wait()
1476 remove_wait_queue(¤t->signal->wait_chldexit, &wo->child_wait); in do_wait()
1483 struct wait_opts wo; in kernel_waitid() local
1530 wo.wo_type = type; in kernel_waitid()
1531 wo.wo_pid = pid; in kernel_waitid()
1532 wo.wo_flags = options; in kernel_waitid()
1533 wo.wo_info = infop; in kernel_waitid()
1534 wo.wo_rusage = ru; in kernel_waitid()
1536 wo.wo_flags |= WNOHANG; in kernel_waitid()
1538 ret = do_wait(&wo); in kernel_waitid()
1582 struct wait_opts wo; in kernel_wait4() local
1608 wo.wo_type = type; in kernel_wait4()
1609 wo.wo_pid = pid; in kernel_wait4()
1610 wo.wo_flags = options | WEXITED; in kernel_wait4()
1611 wo.wo_info = NULL; in kernel_wait4()
1612 wo.wo_stat = 0; in kernel_wait4()
1613 wo.wo_rusage = ru; in kernel_wait4()
1614 ret = do_wait(&wo); in kernel_wait4()
1616 if (ret > 0 && stat_addr && put_user(wo.wo_stat, stat_addr)) in kernel_wait4()
1624 struct wait_opts wo = { in kernel_wait() local
1631 ret = do_wait(&wo); in kernel_wait()
1632 if (ret > 0 && wo.wo_stat) in kernel_wait()
1633 *stat = wo.wo_stat; in kernel_wait()
1634 put_pid(wo.wo_pid); in kernel_wait()