* [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
@ 2026-02-05 13:57 Cyril Hrubis
2026-02-05 17:47 ` Petr Vorel
` (2 more replies)
0 siblings, 3 replies; 23+ messages in thread
From: Cyril Hrubis @ 2026-02-05 13:57 UTC (permalink / raw)
To: ltp
So far for CONFIG_*_NS.
Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
---
lib/newlib_tests/test_kconfig.c | 1 +
lib/tst_kconfig.c | 35 +++++++++++++++++++++++++++++++++
lib/tst_ns_checks.h | 32 ++++++++++++++++++++++++++++++
3 files changed, 68 insertions(+)
create mode 100644 lib/tst_ns_checks.h
diff --git a/lib/newlib_tests/test_kconfig.c b/lib/newlib_tests/test_kconfig.c
index cea36b5ee..ed2c4610a 100644
--- a/lib/newlib_tests/test_kconfig.c
+++ b/lib/newlib_tests/test_kconfig.c
@@ -18,6 +18,7 @@ static const char *kconfigs[] = {
"CONFIG_MMU & CONFIG_EXT4_FS=m",
"CONFIG_EXT4_FS=m | CONFIG_MMU",
"CONFIG_DEFAULT_HOSTNAME=\"(none)\"",
+ "CONFIG_USER_NS",
NULL
};
diff --git a/lib/tst_kconfig.c b/lib/tst_kconfig.c
index 9bcd57721..8d0f8ae3a 100644
--- a/lib/tst_kconfig.c
+++ b/lib/tst_kconfig.c
@@ -16,6 +16,8 @@
#include "tst_bool_expr.h"
#include "tst_safe_stdio.h"
+#include "tst_ns_checks.h"
+
static int kconfig_skip_check(void)
{
char *skipped = getenv("KCONFIG_SKIP_CHECK");
@@ -110,6 +112,37 @@ static void close_kconfig(FILE *fp)
fclose(fp);
}
+static struct runtime_check {
+ const char *config;
+ bool (*runtime_check)(void);
+} runtime_checks[] = {
+ {"CONFIG_USER_NS", tst_user_ns_enabled},
+ {"CONFIG_NET_NS", tst_net_ns_enabled},
+ {"CONFIG_PID_NS", tst_pid_ns_enabled},
+ {"CONFIG_MNT_NS", tst_mnt_ns_enabled},
+ {"CONFIG_IPC_NS", tst_ipc_ns_enabled},
+ {}
+};
+
+static void runtime_check(struct tst_kconfig_var *var)
+{
+ size_t i;
+
+ for (i = 0; runtime_checks[i].config; i++) {
+ if (strcmp(runtime_checks[i].config, var->id))
+ continue;
+
+ tst_res(TDEBUG, "Running runtime check for '%s'", var->id);
+
+ if (!runtime_checks[i].runtime_check()) {
+ tst_res(TINFO,
+ "%s=%c present but disabled at runtime",
+ var->id, var->choice);
+ var->choice = 'n';
+ }
+ }
+}
+
static inline int kconfig_parse_line(const char *line,
struct tst_kconfig_var *vars,
unsigned int vars_len)
@@ -183,9 +216,11 @@ out:
switch (val[0]) {
case 'y':
vars[i].choice = 'y';
+ runtime_check(&vars[i]);
return 1;
case 'm':
vars[i].choice = 'm';
+ runtime_check(&vars[i]);
return 1;
}
}
diff --git a/lib/tst_ns_checks.h b/lib/tst_ns_checks.h
new file mode 100644
index 000000000..743d3d09d
--- /dev/null
+++ b/lib/tst_ns_checks.h
@@ -0,0 +1,32 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2026 Cyril Hrubis <chrubis@suse.cz>
+ */
+
+#include <unistd.h>
+#include <stdbool.h>
+
+static inline bool tst_user_ns_enabled(void)
+{
+ return access("/proc/self/ns/user", F_OK) == 0;
+}
+
+static inline bool tst_net_ns_enabled(void)
+{
+ return access("/proc/self/ns/net", F_OK) == 0;
+}
+
+static inline bool tst_pid_ns_enabled(void)
+{
+ return access("/proc/self/ns/pid", F_OK) == 0;
+}
+
+static inline bool tst_mnt_ns_enabled(void)
+{
+ return access("/proc/self/ns/mnt", F_OK) == 0;
+}
+
+static inline bool tst_ipc_ns_enabled(void)
+{
+ return access("/proc/self/ns/ipc", F_OK) == 0;
+}
--
2.52.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-02-05 13:57 [LTP] [PATCH] lib: tst_kconfig: Add runtime checks Cyril Hrubis
@ 2026-02-05 17:47 ` Petr Vorel
2026-02-06 7:58 ` Li Wang via ltp
2026-03-26 14:38 ` Cyril Hrubis
2026-03-11 8:59 ` Petr Vorel
2026-03-24 8:33 ` Andrea Cervesato via ltp
2 siblings, 2 replies; 23+ messages in thread
From: Petr Vorel @ 2026-02-05 17:47 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp
Hi Cyril, Li,
Thanks!
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Few notes below.
> So far for CONFIG_*_NS.
> Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
> ---
> lib/newlib_tests/test_kconfig.c | 1 +
> lib/tst_kconfig.c | 35 +++++++++++++++++++++++++++++++++
> lib/tst_ns_checks.h | 32 ++++++++++++++++++++++++++++++
> 3 files changed, 68 insertions(+)
> create mode 100644 lib/tst_ns_checks.h
> diff --git a/lib/newlib_tests/test_kconfig.c b/lib/newlib_tests/test_kconfig.c
> index cea36b5ee..ed2c4610a 100644
> --- a/lib/newlib_tests/test_kconfig.c
> +++ b/lib/newlib_tests/test_kconfig.c
> @@ -18,6 +18,7 @@ static const char *kconfigs[] = {
> "CONFIG_MMU & CONFIG_EXT4_FS=m",
> "CONFIG_EXT4_FS=m | CONFIG_MMU",
> "CONFIG_DEFAULT_HOSTNAME=\"(none)\"",
> + "CONFIG_USER_NS",
> NULL
> };
> diff --git a/lib/tst_kconfig.c b/lib/tst_kconfig.c
> index 9bcd57721..8d0f8ae3a 100644
> --- a/lib/tst_kconfig.c
> +++ b/lib/tst_kconfig.c
> @@ -16,6 +16,8 @@
> #include "tst_bool_expr.h"
> #include "tst_safe_stdio.h"
> +#include "tst_ns_checks.h"
nit: don't we want to have tst_kconfig_checks.h which would have all configs?
Sure it can be this way, but I tend to have less files with more content.
I would be even ok with having everything in tst_kconfig.c, but understand you
don't want it.
> +
> static int kconfig_skip_check(void)
> {
> char *skipped = getenv("KCONFIG_SKIP_CHECK");
> @@ -110,6 +112,37 @@ static void close_kconfig(FILE *fp)
> fclose(fp);
> }
> +static struct runtime_check {
> + const char *config;
> + bool (*runtime_check)(void);
> +} runtime_checks[] = {
> + {"CONFIG_USER_NS", tst_user_ns_enabled},
> + {"CONFIG_NET_NS", tst_net_ns_enabled},
> + {"CONFIG_PID_NS", tst_pid_ns_enabled},
> + {"CONFIG_MNT_NS", tst_mnt_ns_enabled},
> + {"CONFIG_IPC_NS", tst_ipc_ns_enabled},
> + {}
> +};
> +
> +static void runtime_check(struct tst_kconfig_var *var)
> +{
> + size_t i;
> +
> + for (i = 0; runtime_checks[i].config; i++) {
> + if (strcmp(runtime_checks[i].config, var->id))
> + continue;
> +
> + tst_res(TDEBUG, "Running runtime check for '%s'", var->id);
This will not work since Li's change:
aa5a6fcdcd ("lib: suppress early TDEBUG output before context initialization")
@Li I'm not sure what "unless explicitly enabled" means, but I guess we cannot
simple enable it for the test library (following patch). I vote to either revert
aa5a6fcdcd or change it (effectively revert it, but keep doc and the rest of the
code).
I understand having the output in each test is not ideal:
utsname01.c:39: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33, -1, 0)
utsname01.c:40: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33, -1, 0)
but better more output code than no code.
+++ lib/tst_test.c
@@ -492,16 +492,12 @@ void tst_res_(const char *file, const int lineno, int ttype,
/*
* Suppress TDEBUG output in these cases:
* 1. No context available (e.g., called before IPC initialization)
- * 2. Called from the library process, unless explicitly enabled
- * 3. Debug output is not enabled (context->tdebug == 0)
+ * 2. Debug output is not enabled (context->tdebug == 0)
*/
if (ttype == TDEBUG) {
if (!context)
return;
- if (context->lib_pid == getpid())
- return;
-
if (!context->tdebug)
return;
}
> +
> + if (!runtime_checks[i].runtime_check()) {
> + tst_res(TINFO,
> + "%s=%c present but disabled at runtime",
> + var->id, var->choice);
> + var->choice = 'n';
> + }
> + }
> +}
> +
> static inline int kconfig_parse_line(const char *line,
> struct tst_kconfig_var *vars,
> unsigned int vars_len)
> @@ -183,9 +216,11 @@ out:
> switch (val[0]) {
> case 'y':
> vars[i].choice = 'y';
> + runtime_check(&vars[i]);
> return 1;
> case 'm':
> vars[i].choice = 'm';
> + runtime_check(&vars[i]);
> return 1;
> }
> }
> diff --git a/lib/tst_ns_checks.h b/lib/tst_ns_checks.h
> new file mode 100644
> index 000000000..743d3d09d
> --- /dev/null
> +++ b/lib/tst_ns_checks.h
> @@ -0,0 +1,32 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
nit: please use /* */ otherwise checkpatch complains.
/* SPDX-License-Identifier: GPL-2.0-or-later */
Kind regards,
Petr
> +/*
> + * Copyright (c) 2026 Cyril Hrubis <chrubis@suse.cz>
> + */
> +
> +#include <unistd.h>
> +#include <stdbool.h>
> +
> +static inline bool tst_user_ns_enabled(void)
> +{
> + return access("/proc/self/ns/user", F_OK) == 0;
> +}
> +
> +static inline bool tst_net_ns_enabled(void)
> +{
> + return access("/proc/self/ns/net", F_OK) == 0;
> +}
> +
> +static inline bool tst_pid_ns_enabled(void)
> +{
> + return access("/proc/self/ns/pid", F_OK) == 0;
> +}
> +
> +static inline bool tst_mnt_ns_enabled(void)
> +{
> + return access("/proc/self/ns/mnt", F_OK) == 0;
> +}
> +
> +static inline bool tst_ipc_ns_enabled(void)
> +{
> + return access("/proc/self/ns/ipc", F_OK) == 0;
> +}
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-02-05 17:47 ` Petr Vorel
@ 2026-02-06 7:58 ` Li Wang via ltp
2026-02-06 8:23 ` Petr Vorel
` (2 more replies)
2026-03-26 14:38 ` Cyril Hrubis
1 sibling, 3 replies; 23+ messages in thread
From: Li Wang via ltp @ 2026-02-06 7:58 UTC (permalink / raw)
To: Petr Vorel; +Cc: ltp
> > +static void runtime_check(struct tst_kconfig_var *var)
> > +{
> > + size_t i;
> > +
> > + for (i = 0; runtime_checks[i].config; i++) {
> > + if (strcmp(runtime_checks[i].config, var->id))
> > + continue;
> > +
> > + tst_res(TDEBUG, "Running runtime check for '%s'", var->id);
> This will not work since Li's change:
> aa5a6fcdcd ("lib: suppress early TDEBUG output before context initialization")
>
> @Li I'm not sure what "unless explicitly enabled" means, but I guess we cannot
> simple enable it for the test library (following patch). I vote to either revert
> aa5a6fcdcd or change it (effectively revert it, but keep doc and the rest of the
> code).
>
> I understand having the output in each test is not ideal:
>
> utsname01.c:39: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33, -1, 0)
> utsname01.c:40: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33, -1, 0)
>
> but better more output code than no code.
Well, I don't like that noisy logging style, that's why I did aa5a6fcdcd.
Maybe can we add more levels of TDEBUG log to LTP:
-D0: no debug logs print
-D1: only generic logs print
-D2: more veroes logs include library debuginfo
What do you think?
--
Regards,
Li Wang
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-02-06 7:58 ` Li Wang via ltp
@ 2026-02-06 8:23 ` Petr Vorel
2026-02-06 12:23 ` Li Wang via ltp
2026-02-06 8:23 ` Petr Vorel
2026-02-06 8:33 ` Cyril Hrubis
2 siblings, 1 reply; 23+ messages in thread
From: Petr Vorel @ 2026-02-06 8:23 UTC (permalink / raw)
To: Li Wang; +Cc: ltp
> > > +static void runtime_check(struct tst_kconfig_var *var)
> > > +{
> > > + size_t i;
> > > +
> > > + for (i = 0; runtime_checks[i].config; i++) {
> > > + if (strcmp(runtime_checks[i].config, var->id))
> > > + continue;
> > > +
> > > + tst_res(TDEBUG, "Running runtime check for '%s'", var->id);
> > This will not work since Li's change:
> > aa5a6fcdcd ("lib: suppress early TDEBUG output before context initialization")
> > @Li I'm not sure what "unless explicitly enabled" means, but I guess we cannot
> > simple enable it for the test library (following patch). I vote to either revert
> > aa5a6fcdcd or change it (effectively revert it, but keep doc and the rest of the
> > code).
> > I understand having the output in each test is not ideal:
> > utsname01.c:39: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33, -1, 0)
> > utsname01.c:40: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33, -1, 0)
> > but better more output code than no code.
> Well, I don't like that noisy logging style, that's why I did aa5a6fcdcd.
> Maybe can we add more levels of TDEBUG log to LTP:
> -D0: no debug logs print
> -D1: only generic logs print
> -D2: more veroes logs include library debuginfo
> What do you think?
For the level we would need to track the level state.
Also, we now support
-D
LTP_ENABLE_DEBUG=y (or n to disable)
Now, user would have to always use '-D1' or '-D2' to get logging or not use
getopts. IMHO getopts does not support both '-D' (without value) and '-D1' (with
value).
IMHO that's why ssh supports multiple '-v', e.g. '-v -v -v' or '-vvv' instead of
-v2 or -v3).
Anyway I'd prefer solving this somehow in the code so that users don't have to
bother about log levels, but I have no idea how. Maybe yet another enum
tst_res_flags member? Because aa5a6fcdcd skipped messages, which are likely
useful when run by child process (the test), but not by library process. And I
want to print message which is always run by library process. Maybe to have some
#define in source code, which would force logging even for library process? (not
sure what will be needed more often).
But sure, this would work if there no other way to detect these 2 cases.
OT we have:
in tst_test.c:
if (context->tdebug)
tst_res(TINFO, "Restored metadata for PID %d", getpid());
=> shouldn't it use TDEBUG instead of TINFO?
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-02-06 7:58 ` Li Wang via ltp
2026-02-06 8:23 ` Petr Vorel
@ 2026-02-06 8:23 ` Petr Vorel
2026-02-06 8:33 ` Cyril Hrubis
2 siblings, 0 replies; 23+ messages in thread
From: Petr Vorel @ 2026-02-06 8:23 UTC (permalink / raw)
To: Li Wang; +Cc: ltp
Also, the above TDEBUG is a separate issue, which should not block this kconfig
improvement.
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-02-06 7:58 ` Li Wang via ltp
2026-02-06 8:23 ` Petr Vorel
2026-02-06 8:23 ` Petr Vorel
@ 2026-02-06 8:33 ` Cyril Hrubis
2026-02-06 9:31 ` Petr Vorel
2026-02-06 9:37 ` Petr Vorel
2 siblings, 2 replies; 23+ messages in thread
From: Cyril Hrubis @ 2026-02-06 8:33 UTC (permalink / raw)
To: Li Wang; +Cc: ltp
Hi!
> > utsname01.c:39: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33, -1, 0)
> > utsname01.c:40: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33, -1, 0)
Maybe we need TTRACE that would print syscall tracing like that and
TDEBUG for the rest of the messages.
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-02-06 8:33 ` Cyril Hrubis
@ 2026-02-06 9:31 ` Petr Vorel
2026-02-06 9:37 ` Petr Vorel
1 sibling, 0 replies; 23+ messages in thread
From: Petr Vorel @ 2026-02-06 9:31 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp
> Hi!
> > > utsname01.c:39: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33, -1, 0)
> > > utsname01.c:40: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33, -1, 0)
> Maybe we need TTRACE that would print syscall tracing like that and
> TDEBUG for the rest of the messages.
Sounds like a solution to me. I'll send a patch for it.
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-02-06 8:33 ` Cyril Hrubis
2026-02-06 9:31 ` Petr Vorel
@ 2026-02-06 9:37 ` Petr Vorel
2026-02-06 9:45 ` Cyril Hrubis
1 sibling, 1 reply; 23+ messages in thread
From: Petr Vorel @ 2026-02-06 9:37 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp
> Hi!
> > > utsname01.c:39: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33, -1, 0)
> > > utsname01.c:40: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33, -1, 0)
> Maybe we need TTRACE that would print syscall tracing like that and
> TDEBUG for the rest of the messages.
I suppose TTRACE would be printed only for test process and not for the library,
right? And it'd be enabled only for debugging (existing -D or
LTP_ENABLE_DEBUG=1):
if (ttype == TTRACE && context->lib_pid == getpid())
return;
Other would we need a new switch and variable? (e.g. -T and
LTP_ENABLE_TRACING_DEBUG=1)
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-02-06 9:37 ` Petr Vorel
@ 2026-02-06 9:45 ` Cyril Hrubis
2026-02-06 10:31 ` Petr Vorel
0 siblings, 1 reply; 23+ messages in thread
From: Cyril Hrubis @ 2026-02-06 9:45 UTC (permalink / raw)
To: Petr Vorel; +Cc: ltp
Hi!
> > > > utsname01.c:39: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33, -1, 0)
> > > > utsname01.c:40: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33, -1, 0)
>
> > Maybe we need TTRACE that would print syscall tracing like that and
> > TDEBUG for the rest of the messages.
>
> I suppose TTRACE would be printed only for test process and not for the library,
> right?
Yes.
> And it'd be enabled only for debugging (existing -D or
> LTP_ENABLE_DEBUG=1):
>
> if (ttype == TTRACE && context->lib_pid == getpid())
> return;
>
> Other would we need a new switch and variable? (e.g. -T and
> LTP_ENABLE_TRACING_DEBUG=1)
I would go for LTP_ENABLE_TRACING=1.
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-02-06 9:45 ` Cyril Hrubis
@ 2026-02-06 10:31 ` Petr Vorel
0 siblings, 0 replies; 23+ messages in thread
From: Petr Vorel @ 2026-02-06 10:31 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp
> Hi!
> > > > > utsname01.c:39: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33, -1, 0)
> > > > > utsname01.c:40: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33, -1, 0)
> > > Maybe we need TTRACE that would print syscall tracing like that and
> > > TDEBUG for the rest of the messages.
> > I suppose TTRACE would be printed only for test process and not for the library,
> > right?
> Yes.
> > And it'd be enabled only for debugging (existing -D or
> > LTP_ENABLE_DEBUG=1):
> > if (ttype == TTRACE && context->lib_pid == getpid())
> > return;
> > Other would we need a new switch and variable? (e.g. -T and
> > LTP_ENABLE_TRACING_DEBUG=1)
> I would go for LTP_ENABLE_TRACING=1.
OK.
+ some switch I guess (I suggest -T).
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-02-06 8:23 ` Petr Vorel
@ 2026-02-06 12:23 ` Li Wang via ltp
2026-03-26 14:09 ` Cyril Hrubis
0 siblings, 1 reply; 23+ messages in thread
From: Li Wang via ltp @ 2026-02-06 12:23 UTC (permalink / raw)
To: Petr Vorel; +Cc: ltp
On Fri, Feb 6, 2026 at 4:23 PM Petr Vorel <pvorel@suse.cz> wrote:
> > > > +static void runtime_check(struct tst_kconfig_var *var)
> > > > +{
> > > > + size_t i;
> > > > +
> > > > + for (i = 0; runtime_checks[i].config; i++) {
> > > > + if (strcmp(runtime_checks[i].config, var->id))
> > > > + continue;
> > > > +
> > > > + tst_res(TDEBUG, "Running runtime check for '%s'", var->id);
> > > This will not work since Li's change:
> > > aa5a6fcdcd ("lib: suppress early TDEBUG output before context
> initialization")
>
> > > @Li I'm not sure what "unless explicitly enabled" means, but I guess
> we cannot
> > > simple enable it for the test library (following patch). I vote to
> either revert
> > > aa5a6fcdcd or change it (effectively revert it, but keep doc and the
> rest of the
> > > code).
>
> > > I understand having the output in each test is not ideal:
>
> > > utsname01.c:39: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33,
> -1, 0)
> > > utsname01.c:40: TDEBUG: mmap((nil), 64, PROT_READ | PROT_WRITE(3), 33,
> -1, 0)
>
> > > but better more output code than no code.
>
> > Well, I don't like that noisy logging style, that's why I did aa5a6fcdcd.
>
> > Maybe can we add more levels of TDEBUG log to LTP:
>
> > -D0: no debug logs print
> > -D1: only generic logs print
> > -D2: more veroes logs include library debuginfo
>
> > What do you think?
>
> For the level we would need to track the level state.
>
> Also, we now support
> -D
> LTP_ENABLE_DEBUG=y (or n to disable)
>
> Now, user would have to always use '-D1' or '-D2' to get logging or not use
> getopts. IMHO getopts does not support both '-D' (without value) and '-D1'
> (with
> value).
>
No no, I was saying '-D' only controls the TDEBUG logging in levels,
but not affect normal logs.
Level 0: suppress all TDEBUG info
Level 1: current “generic” TDEBUG
Level 2: verbose, including library TDEBUG
This wouldn't be so hard to achieve with refactoring the '-D' parameter.
>
> IMHO that's why ssh supports multiple '-v', e.g. '-v -v -v' or '-vvv'
> instead of
> -v2 or -v3).
>
> Anyway I'd prefer solving this somehow in the code so that users don't
> have to
> bother about log levels, but I have no idea how. Maybe yet another enum
> tst_res_flags member? Because aa5a6fcdcd skipped messages, which are likely
> useful when run by child process (the test), but not by library process.
> And I
> want to print message which is always run by library process. Maybe to
> have some
> #define in source code, which would force logging even for library
> process? (not
> sure what will be needed more often).
>
This is something worth thinking about carefully, btw, next week is
our spring festival hoday. I maybe reply you a bit later :).
>
> But sure, this would work if there no other way to detect these 2 cases.
>
> OT we have:
>
> in tst_test.c:
>
> if (context->tdebug)
> tst_res(TINFO, "Restored metadata for PID %d", getpid());
>
> => shouldn't it use TDEBUG instead of TINFO?
>
Yes, that's a typo.
--
Regards,
Li Wang
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-02-05 13:57 [LTP] [PATCH] lib: tst_kconfig: Add runtime checks Cyril Hrubis
2026-02-05 17:47 ` Petr Vorel
@ 2026-03-11 8:59 ` Petr Vorel
2026-03-24 8:33 ` Andrea Cervesato via ltp
2 siblings, 0 replies; 23+ messages in thread
From: Petr Vorel @ 2026-03-11 8:59 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp
Hi Cyril,
because Li fixed debugging via -D, you could merge this, right?
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-02-05 13:57 [LTP] [PATCH] lib: tst_kconfig: Add runtime checks Cyril Hrubis
2026-02-05 17:47 ` Petr Vorel
2026-03-11 8:59 ` Petr Vorel
@ 2026-03-24 8:33 ` Andrea Cervesato via ltp
2026-03-26 14:17 ` Cyril Hrubis
2 siblings, 1 reply; 23+ messages in thread
From: Andrea Cervesato via ltp @ 2026-03-24 8:33 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp
Hi!
> diff --git a/lib/tst_ns_checks.h b/lib/tst_ns_checks.h
> new file mode 100644
> index 000000000..743d3d09d
> --- /dev/null
> +++ b/lib/tst_ns_checks.h
> @@ -0,0 +1,32 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2026 Cyril Hrubis <chrubis@suse.cz>
> + */
> +
> +#include <unistd.h>
> +#include <stdbool.h>
> +
> +static inline bool tst_user_ns_enabled(void)
> +{
> + return access("/proc/self/ns/user", F_OK) == 0;
> +}
> +
> +static inline bool tst_net_ns_enabled(void)
> +{
> + return access("/proc/self/ns/net", F_OK) == 0;
> +}
> +
> +static inline bool tst_pid_ns_enabled(void)
> +{
> + return access("/proc/self/ns/pid", F_OK) == 0;
> +}
> +
> +static inline bool tst_mnt_ns_enabled(void)
> +{
> + return access("/proc/self/ns/mnt", F_OK) == 0;
> +}
> +
> +static inline bool tst_ipc_ns_enabled(void)
> +{
> + return access("/proc/self/ns/ipc", F_OK) == 0;
> +}
I know header is used only once in the code, but we are missing header
guards in this file anyway. Otherwise there's a risk to break LTP compiling
if imported twice in the future.
Regards,
--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-02-06 12:23 ` Li Wang via ltp
@ 2026-03-26 14:09 ` Cyril Hrubis
2026-03-26 14:16 ` Cyril Hrubis
2026-03-26 16:39 ` Petr Vorel
0 siblings, 2 replies; 23+ messages in thread
From: Cyril Hrubis @ 2026-03-26 14:09 UTC (permalink / raw)
To: Li Wang; +Cc: ltp
Hi!
> > IMHO that's why ssh supports multiple '-v', e.g. '-v -v -v' or '-vvv'
> > instead of
> > -v2 or -v3).
> >
> > Anyway I'd prefer solving this somehow in the code so that users don't
> > have to
> > bother about log levels, but I have no idea how. Maybe yet another enum
> > tst_res_flags member? Because aa5a6fcdcd skipped messages, which are likely
> > useful when run by child process (the test), but not by library process.
> > And I
> > want to print message which is always run by library process. Maybe to
> > have some
> > #define in source code, which would force logging even for library
> > process? (not
> > sure what will be needed more often).
> >
>
> This is something worth thinking about carefully, btw, next week is
> our spring festival hoday. I maybe reply you a bit later :).
Did we reach any conclusion here?
I think that we should implement different debug levels in LTP and drop
LTP_QUIET in the process. Does that sounds reasonable?
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-03-26 14:09 ` Cyril Hrubis
@ 2026-03-26 14:16 ` Cyril Hrubis
2026-03-26 16:39 ` Petr Vorel
1 sibling, 0 replies; 23+ messages in thread
From: Cyril Hrubis @ 2026-03-26 14:16 UTC (permalink / raw)
To: Li Wang; +Cc: ltp
Hi!
> > This is something worth thinking about carefully, btw, next week is
> > our spring festival hoday. I maybe reply you a bit later :).
>
> Did we reach any conclusion here?
We already have the fix in LTP, I should have checked.
> I think that we should implement different debug levels in LTP and drop
> LTP_QUIET in the process. Does that sounds reasonable?
So maybe LTP_QUIET can be replaced with debug level 0?
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-03-24 8:33 ` Andrea Cervesato via ltp
@ 2026-03-26 14:17 ` Cyril Hrubis
0 siblings, 0 replies; 23+ messages in thread
From: Cyril Hrubis @ 2026-03-26 14:17 UTC (permalink / raw)
To: Andrea Cervesato; +Cc: ltp
Hi!
> I know header is used only once in the code, but we are missing header
> guards in this file anyway. Otherwise there's a risk to break LTP compiling
> if imported twice in the future.
Sure will add. And also rename the header to tst_kconfig_checks.h since
Peter complained that we may want to add other types of checks that are
not namespace related there eventually.
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-02-05 17:47 ` Petr Vorel
2026-02-06 7:58 ` Li Wang via ltp
@ 2026-03-26 14:38 ` Cyril Hrubis
2026-03-26 15:44 ` Petr Vorel
1 sibling, 1 reply; 23+ messages in thread
From: Cyril Hrubis @ 2026-03-26 14:38 UTC (permalink / raw)
To: Petr Vorel; +Cc: ltp
Hi!
> > +// SPDX-License-Identifier: GPL-2.0-or-later
> nit: please use /* */ otherwise checkpatch complains.
Hmm, so apparently kernel has a bit crazy rule that the SPDX has to be
between /* */ in headers and start with // in C sources. Because of some
tooling that parses kernel headers couldn't handle //.
I do not think that there will be any tooling parsing LTP internal
headers. Maybe we can silence that rule in checkpatch?
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
@ 2026-03-26 14:40 Cyril Hrubis
2026-03-26 15:15 ` Petr Vorel
2026-03-27 7:02 ` Li Wang via ltp
0 siblings, 2 replies; 23+ messages in thread
From: Cyril Hrubis @ 2026-03-26 14:40 UTC (permalink / raw)
To: ltp
So far for CONFIG_*_NS.
Signed-off-by: Cyril Hrubis <chrubis@suse.cz>
Reviewed-by: Petr Vorel <pvorel@suse.cz>
---
lib/newlib_tests/test_kconfig.c | 1 +
lib/tst_kconfig.c | 37 ++++++++++++++++++++++++++++++++-
lib/tst_kconfig_checks.h | 37 +++++++++++++++++++++++++++++++++
3 files changed, 74 insertions(+), 1 deletion(-)
create mode 100644 lib/tst_kconfig_checks.h
diff --git a/lib/newlib_tests/test_kconfig.c b/lib/newlib_tests/test_kconfig.c
index cea36b5ee..ed2c4610a 100644
--- a/lib/newlib_tests/test_kconfig.c
+++ b/lib/newlib_tests/test_kconfig.c
@@ -18,6 +18,7 @@ static const char *kconfigs[] = {
"CONFIG_MMU & CONFIG_EXT4_FS=m",
"CONFIG_EXT4_FS=m | CONFIG_MMU",
"CONFIG_DEFAULT_HOSTNAME=\"(none)\"",
+ "CONFIG_USER_NS",
NULL
};
diff --git a/lib/tst_kconfig.c b/lib/tst_kconfig.c
index adc56503e..5c2f4e044 100644
--- a/lib/tst_kconfig.c
+++ b/lib/tst_kconfig.c
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
- * Copyright (c) 2018 Cyril Hrubis <chrubis@suse.cz>
+ * Copyright (c) 2018-2026 Cyril Hrubis <chrubis@suse.cz>
*/
#include <stdlib.h>
@@ -16,6 +16,8 @@
#include "tst_bool_expr.h"
#include "tst_safe_stdio.h"
+#include "tst_kconfig_checks.h"
+
static int kconfig_skip_check(void)
{
char *skipped = getenv("KCONFIG_SKIP_CHECK");
@@ -110,6 +112,37 @@ static void close_kconfig(FILE *fp)
fclose(fp);
}
+static struct runtime_check {
+ const char *config;
+ bool (*runtime_check)(void);
+} runtime_checks[] = {
+ {"CONFIG_USER_NS", tst_user_ns_enabled},
+ {"CONFIG_NET_NS", tst_net_ns_enabled},
+ {"CONFIG_PID_NS", tst_pid_ns_enabled},
+ {"CONFIG_MNT_NS", tst_mnt_ns_enabled},
+ {"CONFIG_IPC_NS", tst_ipc_ns_enabled},
+ {}
+};
+
+static void runtime_check(struct tst_kconfig_var *var)
+{
+ size_t i;
+
+ for (i = 0; runtime_checks[i].config; i++) {
+ if (strcmp(runtime_checks[i].config, var->id))
+ continue;
+
+ tst_res(TDEBUG, "Running runtime check for '%s'", var->id);
+
+ if (!runtime_checks[i].runtime_check()) {
+ tst_res(TINFO,
+ "%s=%c present but disabled at runtime",
+ var->id, var->choice);
+ var->choice = 'n';
+ }
+ }
+}
+
static inline int kconfig_parse_line(const char *line,
struct tst_kconfig_var *vars,
unsigned int vars_len)
@@ -183,9 +216,11 @@ out:
switch (val[0]) {
case 'y':
vars[i].choice = 'y';
+ runtime_check(&vars[i]);
return 1;
case 'm':
vars[i].choice = 'm';
+ runtime_check(&vars[i]);
return 1;
}
}
diff --git a/lib/tst_kconfig_checks.h b/lib/tst_kconfig_checks.h
new file mode 100644
index 000000000..e117ab640
--- /dev/null
+++ b/lib/tst_kconfig_checks.h
@@ -0,0 +1,37 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (c) 2026 Cyril Hrubis <chrubis@suse.cz>
+ */
+
+#ifndef TST_KCONFIG_CHECKS
+#define TST_KCONFIG_CHECKS
+
+#include <unistd.h>
+#include <stdbool.h>
+
+static inline bool tst_user_ns_enabled(void)
+{
+ return access("/proc/self/ns/user", F_OK) == 0;
+}
+
+static inline bool tst_net_ns_enabled(void)
+{
+ return access("/proc/self/ns/net", F_OK) == 0;
+}
+
+static inline bool tst_pid_ns_enabled(void)
+{
+ return access("/proc/self/ns/pid", F_OK) == 0;
+}
+
+static inline bool tst_mnt_ns_enabled(void)
+{
+ return access("/proc/self/ns/mnt", F_OK) == 0;
+}
+
+static inline bool tst_ipc_ns_enabled(void)
+{
+ return access("/proc/self/ns/ipc", F_OK) == 0;
+}
+
+#endif /* TST_KCONFIG_CHECKS */
--
2.52.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-03-26 14:40 Cyril Hrubis
@ 2026-03-26 15:15 ` Petr Vorel
2026-03-27 7:02 ` Li Wang via ltp
1 sibling, 0 replies; 23+ messages in thread
From: Petr Vorel @ 2026-03-26 15:15 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp
Hi Cyril,
> So far for CONFIG_*_NS.
Thanks! I guess you send than patch which uses them. Or just let me know if you
want me to do the follow up cleanup.
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-03-26 14:38 ` Cyril Hrubis
@ 2026-03-26 15:44 ` Petr Vorel
0 siblings, 0 replies; 23+ messages in thread
From: Petr Vorel @ 2026-03-26 15:44 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp
> Hi!
> > > +// SPDX-License-Identifier: GPL-2.0-or-later
> > nit: please use /* */ otherwise checkpatch complains.
> Hmm, so apparently kernel has a bit crazy rule that the SPDX has to be
> between /* */ in headers and start with // in C sources. Because of some
> tooling that parses kernel headers couldn't handle //.
Yes:
https://docs.kernel.org/process/license-rules.html#license-identifier-syntax
If a specific tool cannot handle the standard comment style, then the
appropriate comment mechanism which the tool accepts shall be used. This is
the reason for having the “/* */” style comment in C header files. There was
build breakage observed with generated .lds files where ‘ld’ failed to parse
the C++ comment. This has been fixed by now, but there are still older
assembler tools which cannot handle C++ style comments.
=> older assembler tools.
> I do not think that there will be any tooling parsing LTP internal
> headers. Maybe we can silence that rule in checkpatch?
I'd prefer to keep changes in our vendored checkpatch pl to bare minimum
to not complicate updating. Unfortunately there is a single tag
SPDX_LICENSE_TAG for many checkpatch errors. It'd be great if this could be
configurable.
Kind regards,
Petr
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-03-26 14:09 ` Cyril Hrubis
2026-03-26 14:16 ` Cyril Hrubis
@ 2026-03-26 16:39 ` Petr Vorel
1 sibling, 0 replies; 23+ messages in thread
From: Petr Vorel @ 2026-03-26 16:39 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp
> Hi!
> > > IMHO that's why ssh supports multiple '-v', e.g. '-v -v -v' or '-vvv'
> > > instead of
> > > -v2 or -v3).
> > > Anyway I'd prefer solving this somehow in the code so that users don't
> > > have to
> > > bother about log levels, but I have no idea how. Maybe yet another enum
> > > tst_res_flags member? Because aa5a6fcdcd skipped messages, which are likely
> > > useful when run by child process (the test), but not by library process.
> > > And I
> > > want to print message which is always run by library process. Maybe to
> > > have some
> > > #define in source code, which would force logging even for library
> > > process? (not
> > > sure what will be needed more often).
> > This is something worth thinking about carefully, btw, next week is
> > our spring festival hoday. I maybe reply you a bit later :).
> Did we reach any conclusion here?
> I think that we should implement different debug levels in LTP and drop
I guess this was implemented in:
cfeefc5114 ("lib: Extend -D flag to support multiple debug levels")
I also Cced you with minor fix warning on LTP_ENABLE_DEBUG=
> LTP_QUIET in the process. Does that sounds reasonable?
I planned to merge LTP_REPRODUCIBLE_OUTPUT and LTP_QUIET functionality into
single variable [1]. Let's keep the discussion there.
Kind regards,
Petr
[1] https://lore.kernel.org/ltp/20260325145243.daqrazagomckexgj@lida.tpb.lab.eng.brq.redhat.com/
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-03-26 14:40 Cyril Hrubis
2026-03-26 15:15 ` Petr Vorel
@ 2026-03-27 7:02 ` Li Wang via ltp
2026-03-27 11:06 ` Cyril Hrubis
1 sibling, 1 reply; 23+ messages in thread
From: Li Wang via ltp @ 2026-03-27 7:02 UTC (permalink / raw)
To: Cyril Hrubis; +Cc: ltp
> So far for CONFIG_*_NS.
It would be great to have a description for the feature:
Something maybe like:
"Currently, LTP Kconfig parsing logic only checks if a feature was
enabled during kernel compilation (e.g., CONFIG_USER_NS=y). However,
some kernel features can be compiled in but disabled at runtime via
kernel command-line parameter or sysctls. When this happens, tests
relying on these Kconfig variables attempt to run and fail, rather
than being gracefully skipped.
This patch introduces a runtime check mechanism for Kconfig variables.
When a monitored CONFIG_* variable is parsed as 'y' or 'm', the framework
now executes an associated runtime check function. If the runtime check
fails, the framework logs an info message and internally overrides the
variable's state to 'n'. This allows the existing LTP dependency logic
to properly skip tests that require the disabled feature."
Also, add test_kconfig04.c in newlib_tests/ to verify this works?
--
Regards,
Li Wang
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [LTP] [PATCH] lib: tst_kconfig: Add runtime checks
2026-03-27 7:02 ` Li Wang via ltp
@ 2026-03-27 11:06 ` Cyril Hrubis
0 siblings, 0 replies; 23+ messages in thread
From: Cyril Hrubis @ 2026-03-27 11:06 UTC (permalink / raw)
To: Li Wang; +Cc: ltp
Hi!
> It would be great to have a description for the feature:
>
> Something maybe like:
>
> "Currently, LTP Kconfig parsing logic only checks if a feature was
> enabled during kernel compilation (e.g., CONFIG_USER_NS=y). However,
> some kernel features can be compiled in but disabled at runtime via
> kernel command-line parameter or sysctls. When this happens, tests
> relying on these Kconfig variables attempt to run and fail, rather
> than being gracefully skipped.
>
> This patch introduces a runtime check mechanism for Kconfig variables.
> When a monitored CONFIG_* variable is parsed as 'y' or 'm', the framework
> now executes an associated runtime check function. If the runtime check
> fails, the framework logs an info message and internally overrides the
> variable's state to 'n'. This allows the existing LTP dependency logic
> to properly skip tests that require the disabled feature."
Ah, sorry I've fixed the code but kept the description single line, I
will fix that.
> Also, add test_kconfig04.c in newlib_tests/ to verify this works?
I've added a new config variable to newlib_tests/test_kconfig.c (it does
not show in the output unless you boot with namespaces disabled).
If you do and run it:
$ ./test_kconfig
tst_kconfig.c:90: TINFO: Parsing kernel config '/lib/modules/6.16.0/build/.config'
tst_kconfig.c:138: TINFO: CONFIG_USER_NS=y present but disabled at runtime
...
tst_kconfig.c:566: TINFO: Constraint 'CONFIG_USER_NS' not satisfied!
tst_kconfig.c:512: TINFO: Variables:
tst_kconfig.c:530: TINFO: CONFIG_USER_NS=n
tst_test.c:1461: TCONF: Aborting due to unsuitable kernel config, see above!
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2026-03-27 11:07 UTC | newest]
Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-05 13:57 [LTP] [PATCH] lib: tst_kconfig: Add runtime checks Cyril Hrubis
2026-02-05 17:47 ` Petr Vorel
2026-02-06 7:58 ` Li Wang via ltp
2026-02-06 8:23 ` Petr Vorel
2026-02-06 12:23 ` Li Wang via ltp
2026-03-26 14:09 ` Cyril Hrubis
2026-03-26 14:16 ` Cyril Hrubis
2026-03-26 16:39 ` Petr Vorel
2026-02-06 8:23 ` Petr Vorel
2026-02-06 8:33 ` Cyril Hrubis
2026-02-06 9:31 ` Petr Vorel
2026-02-06 9:37 ` Petr Vorel
2026-02-06 9:45 ` Cyril Hrubis
2026-02-06 10:31 ` Petr Vorel
2026-03-26 14:38 ` Cyril Hrubis
2026-03-26 15:44 ` Petr Vorel
2026-03-11 8:59 ` Petr Vorel
2026-03-24 8:33 ` Andrea Cervesato via ltp
2026-03-26 14:17 ` Cyril Hrubis
-- strict thread matches above, loose matches on Subject: below --
2026-03-26 14:40 Cyril Hrubis
2026-03-26 15:15 ` Petr Vorel
2026-03-27 7:02 ` Li Wang via ltp
2026-03-27 11:06 ` Cyril Hrubis
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox