On Tue, Jul 01, 2025 at 02:22:40PM +0900, Daniel Latypov wrote: > On Mon, Jun 30, 2025 at 3:32 PM Tzung-Bi Shih <[email protected]> wrote: > > On Tue, May 20, 2025 at 09:04:53AM -0700, Daniel Latypov wrote: > > > You mention you don't like how static stubs requires modifying the > > > code-under-test. > > > Since it gets eliminated by the preprocessor unless you're compiling > > > for KUnit, is the concern more so about how it conceptually feels > > > wrong to do so? > > > For the Android GKI kernel, they have (or had) KUnit enabled so there > > > is potentially concern about real runtime cost there, not sure if you > > > have something similar in mind. > > > > Not exactly. Ideally, I think we shouldn't modify the CUT. I'm wondering > > if there is a way to not change the CUT but also break the external > > dependencies. > > > > > But stepping back, ftrace_stubs technically require modifying the code > > > to make sure funcs are marked as `noinline`, which this patch series > > > does not do. > ... > > They could be partially inlined even though they are exported symbols. > > So to summarize, right now we're stuck with having to modify the code. > (Unless someone can come up with something really clever, but not too clever) > > To make it concrete, the current approach would look like: > > int func(char* arg1, int arg2) { > KUNIT_STATIC_STUB_REDIRECT(func, arg1, arg2); > ... // unchanged > } > > vs an ftrace/kprobe approach that needs a conditional `noinline` > > KUNIT_STUBBABLE int func(char* arg1, int arg2) { > ... // unchanged > } > > The latter is definitely simpler and less burdensome. > But I don't know if it's simpler enough to warrant a second > implementation existing for me personally.
Instead of KUNIT_STUBBABLE macros, I was thinking of: diff --git a/Makefile b/Makefile index 35e6e5240c61..40319083f58b 100644 --- a/Makefile +++ b/Makefile @@ -979,6 +979,10 @@ ifdef CONFIG_DEBUG_SECTION_MISMATCH KBUILD_CFLAGS += -fno-inline-functions-called-once endif +ifdef CONFIG_KUNIT_KPROBE_STUBS +KBUILD_CFLAGS += -fno-inline +endif + # `rustc`'s `-Zfunction-sections` applies to data too (as of 1.59.0). ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION KBUILD_CFLAGS_KERNEL += -ffunction-sections -fdata-sections I don't know what are most people's usages. I always run KUnit tests in qemu or at least in some real devices that I less care about the performance. Thus, turning inline off globally in such environments is totally acceptable.
