[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <aGPSfaC1AohSV3_H@google.com>
Date: Tue, 1 Jul 2025 12:20:13 +0000
From: Tzung-Bi Shih <tzungbi@...nel.org>
To: Daniel Latypov <dlatypov@...gle.com>
Cc: bleung@...omium.org, brendan.higgins@...ux.dev, davidgow@...gle.com,
rmoar@...gle.com, rostedt@...dmis.org, mhiramat@...nel.org,
naveen@...nel.org, anil.s.keshavamurthy@...el.com,
davem@...emloft.net, chrome-platform@...ts.linux.dev,
linux-kselftest@...r.kernel.org, kunit-dev@...glegroups.com,
linux-trace-kernel@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [RFC PATCH 0/7] platform/chrome: Add Kunit tests for protocol
device drivers
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 <tzungbi@...nel.org> 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.
Powered by blists - more mailing lists