Lines Matching full:child
60 static void child_start(struct child_data *child, const char *program) in child_start() argument
70 child->pid = fork(); in child_start()
71 if (child->pid == -1) in child_start()
75 if (!child->pid) { in child_start()
77 * In child, replace stdout with the pipe, errors to in child_start()
123 * In parent, remember the child and close our copy of the in child_start()
127 child->stdout = pipefd[0]; in child_start()
128 child->output = NULL; in child_start()
129 child->exited = false; in child_start()
130 child->output_seen = false; in child_start()
133 ev.data.ptr = child; in child_start()
135 ret = epoll_ctl(epoll_fd, EPOLL_CTL_ADD, child->stdout, &ev); in child_start()
138 child->name, strerror(errno), errno); in child_start()
143 static bool child_output_read(struct child_data *child) in child_output_read() argument
149 ret = read(child->stdout, read_data, sizeof(read_data)); in child_output_read()
155 child->name, strerror(errno), in child_output_read()
161 child->output_seen = true; in child_output_read()
164 if (child->output) { in child_output_read()
165 strncpy(work, child->output, sizeof(work) - 1); in child_output_read()
167 free(child->output); in child_output_read()
168 child->output = NULL; in child_output_read()
179 ksft_print_msg("%s: %s\n", child->name, work); in child_output_read()
188 ret = asprintf(&child->output, "%s", work); in child_output_read()
196 static void child_output(struct child_data *child, uint32_t events, in child_output() argument
203 read_more = child_output_read(child); in child_output()
208 close(child->stdout); in child_output()
209 child->stdout = -1; in child_output()
213 if (flush && child->output) { in child_output()
214 ksft_print_msg("%s: %s<EOF>\n", child->name, child->output); in child_output()
215 free(child->output); in child_output()
216 child->output = NULL; in child_output()
220 static void child_tickle(struct child_data *child) in child_tickle() argument
222 if (child->output_seen && !child->exited) in child_tickle()
223 kill(child->pid, SIGUSR2); in child_tickle()
226 static void child_stop(struct child_data *child) in child_stop() argument
228 if (!child->exited) in child_stop()
229 kill(child->pid, SIGTERM); in child_stop()
232 static void child_cleanup(struct child_data *child) in child_cleanup() argument
238 if (!child->exited) { in child_cleanup()
240 ret = waitpid(child->pid, &status, 0); in child_cleanup()
246 child->pid, strerror(errno), in child_cleanup()
252 child->exit_status = WEXITSTATUS(status); in child_cleanup()
255 if (!child->output_seen) { in child_cleanup()
256 ksft_print_msg("%s no output seen\n", child->name); in child_cleanup()
260 if (child->exit_status != 0) { in child_cleanup()
262 child->name, child->exit_status); in child_cleanup()
266 ksft_test_result(!fail, "%s\n", child->name); in child_cleanup()
308 static void start_fpsimd(struct child_data *child, int cpu, int copy) in start_fpsimd() argument
312 ret = asprintf(&child->name, "FPSIMD-%d-%d", cpu, copy); in start_fpsimd()
316 child_start(child, "./fpsimd-test"); in start_fpsimd()
318 ksft_print_msg("Started %s\n", child->name); in start_fpsimd()
321 static void start_sve(struct child_data *child, int vl, int cpu) in start_sve() argument
329 ret = asprintf(&child->name, "SVE-VL-%d-%d", vl, cpu); in start_sve()
333 child_start(child, "./sve-test"); in start_sve()
335 ksft_print_msg("Started %s\n", child->name); in start_sve()
338 static void start_ssve(struct child_data *child, int vl, int cpu) in start_ssve() argument
342 ret = asprintf(&child->name, "SSVE-VL-%d-%d", vl, cpu); in start_ssve()
350 child_start(child, "./ssve-test"); in start_ssve()
352 ksft_print_msg("Started %s\n", child->name); in start_ssve()
355 static void start_za(struct child_data *child, int vl, int cpu) in start_za() argument
363 ret = asprintf(&child->name, "ZA-VL-%d-%d", vl, cpu); in start_za()
367 child_start(child, "./za-test"); in start_za()
369 ksft_print_msg("Started %s\n", child->name); in start_za()
372 static void start_zt(struct child_data *child, int cpu) in start_zt() argument
376 ret = asprintf(&child->name, "ZT-%d", cpu); in start_zt()
380 child_start(child, "./zt-test"); in start_zt()
382 ksft_print_msg("Started %s\n", child->name); in start_zt()
505 ksft_exit_fail_msg("Unable to allocate child data\n"); in main()
599 * If the child processes have not produced output they in main()