Hi,
On Fri, 2025-06-27 at 06:20 +0200, Thomas Weißschuh wrote:
On Thu, Jun 26, 2025 at 08:11:17PM +0200, Benjamin Berg wrote:
I ran into two minor issues trying out the patches, see inline.
Thanks for testing the series.
On Thu, 2025-06-26 at 08:10 +0200, Thomas Weißschuh wrote:
Enable running UAPI tests as part of kunit. The selftests are embedded into the kernel image and their output is forwarded to kunit for unified reporting.
The implementation reuses parts of usermode drivers and usermode helpers. However these frameworks are not used directly as they make it impossible to retrieve a thread's exit code.
Signed-off-by: Thomas Weißschuh thomas.weissschuh@linutronix.de
[SNIP] +/**
- KUNIT_UAPI_EMBED_BLOB() - Embed another build artifact into the kernel
- @_name: The name of symbol under which the artifact is embedded.
- @_path: Path to the artifact on disk.
- Embeds a build artifact like a userspace executable into the kernel or current module.
- The build artifact is read from disk and needs to be already built.
- */
+#define KUNIT_UAPI_EMBED_BLOB(_name, _path) \
- asm ( \
- " .pushsection .rodata, "a" \n" \
- " .global " __stringify(CONCATENATE(_name, _data)) " \n" \
- __stringify(CONCATENATE(_name, _data)) ": \n" \
- " .incbin " __stringify(_path) " \n" \
- " .size " __stringify(CONCATENATE(_name, _data)) ", " \
". - " __stringify(CONCATENATE(_name, _data)) " \n" \
- " .global " __stringify(CONCATENATE(_name, _end)) " \n" \
- __stringify(CONCATENATE(_name, _end)) ": \n" \
- " .popsection \n" \
- ); \
\
- extern const char CONCATENATE(_name, _data)[]; \
- extern const char CONCATENATE(_name, _end)[]; \
\
- static const struct kunit_uapi_blob _name = { \
.path = _path, \
.data = CONCATENATE(_name, _data), \
.end = CONCATENATE(_name, _end), \
- } \
For me, the compiler could not find the files for the ".incbin" unless I added an include path. i.e. adding ccflags-y := -I$(obj) to lib/kunit/Makefile fixed the problem for me.
Can you share some more details on your build setup? This worked for me as-is and also passed 0day build testing.
Funny, I ran this on a Fedora 41 with gcc --version saying gcc (GCC) 14.3.1 20250523 (Red Hat 14.3.1-1)
I tried both 32 and 64 bit builds for ARCH=um.
Attaching my current kernel configuration and the last few lines of a V=1 build.
The kernel I used is a bit newer than what you had. Applied on top of ee88bddf7f2f5d1f1da87dd7bedc734048b70e88 (bpf-fixes merge).
Benjamin
[SNIP] +static int kunit_uapi_run_executable_in_mount(struct kunit *test, const char *executable,
struct vfsmount *mnt)
+{
- struct kunit_uapi_user_mode_thread_ctx ctx = {
.setup_done = COMPLETION_INITIALIZER_ONSTACK(ctx.setup_done),
.executable = executable,
.pwd = {
.mnt = mnt,
.dentry = mnt->mnt_root,
},
- };
- int forward_err, wait_err, ret;
ret needs to be initialized to zero here as the kernel_wait function will only set "ret" if wo.wo_stat is non-zero.
Ack.
[SNIP]
Thomas