lib: bitmap: add performance test for bitmap_print_to_pagebuf
authorYury Norov <yury.norov@gmail.com>
Sat, 14 Aug 2021 21:17:12 +0000 (14:17 -0700)
committerYury Norov <yury.norov@gmail.com>
Sat, 15 Jan 2022 16:47:31 +0000 (08:47 -0800)
Functional tests for bitmap_print_to_pagebuf() are provided
in lib/test_printf.c. This patch adds performance test for
a case of fully set bitmap.

Signed-off-by: Yury Norov <yury.norov@gmail.com>
Tested-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
lib/test_bitmap.c

index d33fa5a61b95845e3a3e09a876968ae0fecd0872..0c82f07f74fcba6ae31ea7603da7c57a111339ad 100644 (file)
@@ -446,6 +446,42 @@ static void __init test_bitmap_parselist(void)
        }
 }
 
+static void __init test_bitmap_printlist(void)
+{
+       unsigned long *bmap = kmalloc(PAGE_SIZE, GFP_KERNEL);
+       char *buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
+       char expected[256];
+       int ret, slen;
+       ktime_t time;
+
+       if (!buf || !bmap)
+               goto out;
+
+       memset(bmap, -1, PAGE_SIZE);
+       slen = snprintf(expected, 256, "0-%ld", PAGE_SIZE * 8 - 1);
+       if (slen < 0)
+               goto out;
+
+       time = ktime_get();
+       ret = bitmap_print_to_pagebuf(true, buf, bmap, PAGE_SIZE * 8);
+       time = ktime_get() - time;
+
+       if (ret != slen + 1) {
+               pr_err("bitmap_print_to_pagebuf: result is %d, expected %d\n", ret, slen);
+               goto out;
+       }
+
+       if (strncmp(buf, expected, slen)) {
+               pr_err("bitmap_print_to_pagebuf: result is %s, expected %s\n", buf, expected);
+               goto out;
+       }
+
+       pr_err("bitmap_print_to_pagebuf: input is '%s', Time: %llu\n", buf, time);
+out:
+       kfree(buf);
+       kfree(bmap);
+}
+
 static const unsigned long parse_test[] __initconst = {
        BITMAP_FROM_U64(0),
        BITMAP_FROM_U64(1),
@@ -818,6 +854,7 @@ static void __init selftest(void)
        test_bitmap_arr32();
        test_bitmap_parse();
        test_bitmap_parselist();
+       test_bitmap_printlist();
        test_mem_optimisations();
        test_for_each_set_clump8();
        test_bitmap_cut();