[LTP] [PATCH v5 3/7] lib: Add support for max_kver to struct tst_test and tst_fs
Petr Vorel
pvorel@suse.cz
Wed Aug 12 14:30:07 CEST 2026
Hi Cyril,
> Hi!
> > +/*
> > + * Check for the maximal required kernel version.
> > + *
> > + * return: true if the kernel version is low enough, false otherwise.
> > + */
> > +static bool check_max_kver(const char *max_kver, const int brk_nosupp)
> > +{
> > + char *msg;
> > + int dots, i, v1, v2, v3;
> > +
> > + tst_parse_kver(max_kver, &v1, &v2, &v3);
> > +
> > + for (i = 0, dots = 0; max_kver[i]; i++)
> > + dots += (max_kver[i] == '.');
> > +
> > + /*
> > + * For mainline kernel release without patch level (single dot e.g. "7.1")
> > + * ignore v3 (the sublevel): 7.1.x is always ok.
> > + * Do *not* ignore v3 on stable kernel release (2 dots, e.g. 7.1.5).
> > + */
> > + if (tst_kvercmp(v1, v2, v3) > (dots == 1 ? 1023 : 0)) {
> Uff, this is quite ugly. What exactly are we trying to do?
I hoped that was explained in the comment above the code:
.max_kver = "7.0" should run the test not only kernel <= 7.0,
but also all stable kernels: 7.0.x.
OTOH if there is something backported to stable kernel and one specifies:
.max_kver = "7.0.5" it will be compared just to <= 7.0.5.
Sure, this can be avoided if .max_kver = "7.0" is not inclusive,
i.e. < 7.0 (one would have to use .max_kver = "7.1"), which is less
intuitive, because .min_kver is inclusive).
> Also we are missing wiring for the shell test executor:
I deliberately did not add it and documented my intention in
doc/developers/writing_tests.rst LTP C And Shell Test API Comparison table
+ * - .max_kver
+ - not implemented
The reason is that it's not needed now for shell tests. But sure I can add it.
Kind regards,
Petr
> iff --git a/testcases/lib/tst_run_shell.c b/testcases/lib/tst_run_shell.c
> index 2778fb6d5..263a319bc 100644
> --- a/testcases/lib/tst_run_shell.c
> +++ b/testcases/lib/tst_run_shell.c
> @@ -57,6 +57,7 @@ enum test_attr_ids {
> DEV_MIN_SIZE,
> FILESYSTEMS,
> FORMAT_DEVICE,
> + MAX_KVER,
> MIN_CPUS,
> MIN_MEM_AVAIL,
> MIN_KVER,
> @@ -91,6 +92,7 @@ static ujson_obj_attr test_attrs[] = {
> UJSON_OBJ_ATTR_IDX(DEV_MIN_SIZE, "dev_min_size", UJSON_INT),
> UJSON_OBJ_ATTR_IDX(FILESYSTEMS, "filesystems", UJSON_ARR),
> UJSON_OBJ_ATTR_IDX(FORMAT_DEVICE, "format_device", UJSON_BOOL),
> + UJSON_OBJ_ATTR_IDX(MAX_KVER, "max_kver", UJSON_STR),
> UJSON_OBJ_ATTR_IDX(MIN_CPUS, "min_cpus", UJSON_INT),
> UJSON_OBJ_ATTR_IDX(MIN_MEM_AVAIL, "min_mem_avail", UJSON_INT),
> UJSON_OBJ_ATTR_IDX(MIN_KVER, "min_kver", UJSON_STR),
> @@ -462,6 +464,9 @@ static void parse_metadata(void)
> case FORMAT_DEVICE:
> test.format_device = val.val_bool;
> break;
> + case MAX_KVER:
> + test.max_kver = strdup(val.val_str);
> + break;
> case MIN_CPUS:
> if (val.val_int <= 0)
> ujson_err(&reader, "Minimal number of cpus must be > 0");
More information about the ltp
mailing list