Re: [LTP] [PATCH 1/3] libltpswap: Add get_maxswapfiles api

Cyril Hrubis
2024-01-03T14:53:38Z

Hi!
> +unsigned int get_maxswapfiles(void)
> +{
> + unsigned int max_swapfile = 32;
> + unsigned int swp_migration_num = 0, swp_hwpoison_num = 0, swp_device_num = 0, swp_pte_marker_num = 0;
> + struct tst_kconfig_var migration_kconfig = TST_KCONFIG_INIT("CONFIG_MIGRATION");
> + struct tst_kconfig_var memory_kconfig = TST_KCONFIG_INIT("CONFIG_MEMORY_FAILURE");
> + struct tst_kconfig_var device_kconfig = TST_KCONFIG_INIT("CONFIG_DEVICE_PRIVATE");
> + struct tst_kconfig_var marker_kconfig = TST_KCONFIG_INIT("CONFIG_PTE_MARKER");
> +
> + tst_kconfig_read(&migration_kconfig, 1);
> + tst_kconfig_read(&memory_kconfig, 1);
> + tst_kconfig_read(&device_kconfig, 1);
> + tst_kconfig_read(&marker_kconfig, 1);

This API is designed so that we can pass an array and parse all values
in a single call. So this should be done as:

struct tst_kconfig_var kconfig[] = {
TST_KCONFIG_INIT("CONFIG_MIGRATION"),
TST_KCONFIG_INIT("CONFIG_MEMORY_FAILURE"),
...
};

tst_kconfig_read(kconfig, ARRAY_SIZE(kconfigs));

If you want to have a nice indexes into that array, you can create an
enum as:

enum cfg_idx {
CFG_MIGRATION,
CFG_MEMORY_FAILURE,
...
};

Then use them in the array initialization to make sure they match:

struct tst_kconfig_var kconfig[] = {
[CFG_MIGRATION] = TST_KCONFIG_INIT("CONFIG_MIGRATION"),
...
};

And finally we can use these as:

if (kconfig[CFG_MIGRATION].choice == 'y')

I guess that this is quite cumbersome to use, maybe we need optional
pointer in the tst_kconfig_var structure so we can pass a pointer to a
char that would be set to the value of choice then we could do:

char migration_choice;

struct tst_kconfig_var kconfig[] = {
TST_KCONFIG_INIT2("CONFIG_MIGRATION", &migration_choice),
...
};

if (migration_choice == 'y')
...

--
Cyril Hrubis
chrubis@suse.cz