Re: [Patch v2] lib: test get_count_order/long in test_bitops.c

From: Andy Shevchenko
Date: Wed Jun 03 2020 - 05:18:04 EST


On Tue, Jun 02, 2020 at 10:37:28PM +0000, Wei Yang wrote:
> Add some test for get_count_order/long in test_bitops.c.

Thanks! LGTM,
Reviewed-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>

Note, we can have as many MODULE_AUTHOR() lines as we want.

> Signed-off-by: Wei Yang <richard.weiyang@xxxxxxxxx>
>
> ---
> v2: merge the test into test_bitops.c
> ---
> lib/Kconfig.debug | 10 +++++-----
> lib/test_bitops.c | 40 ++++++++++++++++++++++++++++++++++++++--
> 2 files changed, 43 insertions(+), 7 deletions(-)
>
> diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
> index f80d5609798f..512111a72e34 100644
> --- a/lib/Kconfig.debug
> +++ b/lib/Kconfig.debug
> @@ -1987,15 +1987,15 @@ config TEST_LKM
> If unsure, say N.
>
> config TEST_BITOPS
> - tristate "Test module for compilation of clear_bit/set_bit operations"
> + tristate "Test module for compilation of bitops operations"
> depends on m
> help
> This builds the "test_bitops" module that is much like the
> TEST_LKM module except that it does a basic exercise of the
> - clear_bit and set_bit macros to make sure there are no compiler
> - warnings from C=1 sparse checker or -Wextra compilations. It has
> - no dependencies and doesn't run or load unless explicitly requested
> - by name. for example: modprobe test_bitops.
> + set/clear_bit macros and get_count_order/long to make sure there are
> + no compiler warnings from C=1 sparse checker or -Wextra
> + compilations. It has no dependencies and doesn't run or load unless
> + explicitly requested by name. for example: modprobe test_bitops.
>
> If unsure, say N.
>
> diff --git a/lib/test_bitops.c b/lib/test_bitops.c
> index fd50b3ae4a14..702d5973a5b6 100644
> --- a/lib/test_bitops.c
> +++ b/lib/test_bitops.c
> @@ -9,7 +9,11 @@
> #include <linux/module.h>
> #include <linux/printk.h>
>
> -/* a tiny module only meant to test set/clear_bit */
> +/* a tiny module only meant to test
> + *
> + * set/clear_bit
> + * get_count_order/long
> + */
>
> /* use an enum because thats the most common BITMAP usage */
> enum bitops_fun {
> @@ -24,6 +28,26 @@ enum bitops_fun {
>
> static DECLARE_BITMAP(g_bitmap, BITOPS_LENGTH);
>
> +unsigned int order_comb[][2] = {
> + {0x00000003, 2},
> + {0x00000004, 2},
> + {0x00001fff, 13},
> + {0x00002000, 13},
> + {0x50000000, 31},
> + {0x80000000, 31},
> + {0x80003000, 32},
> +};
> +
> +unsigned long order_comb_long[][2] = {
> + {0x0000000300000000, 34},
> + {0x0000000400000000, 34},
> + {0x00001fff00000000, 45},
> + {0x0000200000000000, 45},
> + {0x5000000000000000, 63},
> + {0x8000000000000000, 63},
> + {0x8000300000000000, 64},
> +};
> +
> static int __init test_bitops_startup(void)
> {
> pr_warn("Loaded test module\n");
> @@ -32,6 +56,18 @@ static int __init test_bitops_startup(void)
> set_bit(BITOPS_11, g_bitmap);
> set_bit(BITOPS_31, g_bitmap);
> set_bit(BITOPS_88, g_bitmap);
> +
> + for (i = 0; i < ARRAY_SIZE(order_comb); i++) {
> + if (order_comb[i][1] != get_count_order(order_comb[i][0]))
> + pr_warn("get_count_order wrong for %x\n",
> + order_comb[i][0]); }
> +
> + for (i = 0; i < ARRAY_SIZE(order_comb_long); i++) {
> + if (order_comb_long[i][1] !=
> + get_count_order_long(order_comb_long[i][0]))
> + pr_warn("get_count_order_long wrong for %lx\n",
> + order_comb_long[i][0]); }
> +
> return 0;
> }
>
> @@ -55,6 +91,6 @@ static void __exit test_bitops_unstartup(void)
> module_init(test_bitops_startup);
> module_exit(test_bitops_unstartup);
>
> -MODULE_AUTHOR("Jesse Brandeburg <jesse.brandeburg@xxxxxxxxx>");
> +MODULE_AUTHOR("Jesse Brandeburg <jesse.brandeburg@xxxxxxxxx>, Wei Yang <richard.weiyang@xxxxxxxxx>");
> MODULE_LICENSE("GPL");
> MODULE_DESCRIPTION("Bit testing module");
> --
> 2.23.0
>

--
With Best Regards,
Andy Shevchenko