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 [off-list ref] wrote:
quoted
On Tue, May 20, 2025 at 09:04:53AM -0700, Daniel Latypov wrote:
quoted
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.
quoted
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.
...
quoted
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.