On 7/14/23 9:38?AM, Christian Brauner wrote: >> diff --git a/kernel/exit.h b/kernel/exit.h >> new file mode 100644 >> index 000000000000..f10207ba1341 >> --- /dev/null >> +++ b/kernel/exit.h >> @@ -0,0 +1,30 @@ >> +// SPDX-License-Identifier: GPL-2.0-only >> +#ifndef LINUX_WAITID_H >> +#define LINUX_WAITID_H >> + >> +struct waitid_info { >> + pid_t pid; >> + uid_t uid; >> + int status; >> + int cause; >> +}; >> + >> +struct wait_opts { >> + enum pid_type wo_type; >> + int wo_flags; >> + struct pid *wo_pid; >> + >> + struct waitid_info *wo_info; >> + int wo_stat; >> + struct rusage *wo_rusage; >> + >> + wait_queue_entry_t child_wait; >> + int notask_error; >> +}; >> + >> +bool pid_child_should_wake(struct wait_opts *wo, struct task_struct *p); >> +long __do_wait(struct wait_opts *wo); >> +int kernel_waitid_prepare(struct wait_opts *wo, int which, pid_t upid, >> + struct waitid_info *infop, int options, >> + struct rusage *ru, unsigned int *f_flags); > > I know this isn't your mess obviously but could you try and see whether > you can expose a nicer, dedicated struct and helper suited to io_uring's > needs instead of exposing the messy kernel/exit.c format? >From a quick look, I think the wait_opts is pretty much what we need, not much to cut from that. For waitid_info, we can make do with just a forward declaration, we don't need the whole thing. -- Jens Axboe