On Wed, Jul 16, 2025 at 04:11:04AM -0700, Christoph Hellwig wrote: > On Wed, Jul 16, 2025 at 10:39:57AM +0200, Thomas Weißschuh wrote: > > Let's take kernel_execve() as example, there is no way around using this > > function in one way or another. It only has two existing callers. > > init/main.c: It is completely unsuitable for this usecase. > > kernel/umh.c: It is also what Al suggested and I am all for it. > > Unfortunately it is missing features. Citation from my response to Al: > > But why does the code that calls it need to be modular? I get why > the actual test cases should be modular, but the core test runner is > small and needs a lot of kernel internals. Just require it to be > built-in and all this mess goes away. KUnit UAPI calls into KUnit proper which itself is modular. As such it needs to be modular, too. This also makes a small always-builtin component annoying as it will need to call into KUnit through indirect calls. But again: I see that it makes sense to restrict random out-of-tree modules from accessing kernel internals. But here the symbols are only exported for one single, in-tree user. What is the advantage of forcing this user to be non-modular to get access? > That being said some of this stuff, like get_fs_type / put_filesystem > or replace_fd seem like the wrong level of abstractions for something > running tests anyway. This was modelled after usermode helper and usermode driver. To me it makes sense, and I don't see an obvious way to get rid of these. Or do you mean to introduce a new in-core helper to abstract this away? Then everybody would need to pay the cost for this helper even if it is only used from some modular code. Thomas