summaryrefslogtreecommitdiffstats
path: root/lib/test_bitmap.c
diff options
context:
space:
mode:
authorMatthew Wilcox <mawilcox@microsoft.com>2017-07-10 18:51:26 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-07-10 19:32:34 -0400
commit3cc78125a081bb79eb38f3e9a585e5a81bb81cb1 (patch)
tree40300149b948941895c31b64cdb9d657b064a8df /lib/test_bitmap.c
parentb689d4a72fae7a8c4f4d097ef2f6e56643933bfd (diff)
lib/test_bitmap.c: add optimisation tests
Patch series "Bitmap optimisations", v2. These three bitmap patches use more efficient specialisations when the compiler can figure out that it's safe to do so. Thanks to Rasmus's eagle eyes, a nasty bug in v1 was avoided, and I've added a test case which would have caught it. This patch (of 4): This version of the test is actually a no-op; the next patch will enable it. Link: http://lkml.kernel.org/r/20170628153221.11322-2-willy@infradead.org Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com> Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Matthew Wilcox <willy@infradead.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'lib/test_bitmap.c')
-rw-r--r--lib/test_bitmap.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/test_bitmap.c b/lib/test_bitmap.c
index e2cbd43d193c..252d3bddbe7d 100644
--- a/lib/test_bitmap.c
+++ b/lib/test_bitmap.c
@@ -333,10 +333,42 @@ static void __init test_bitmap_u32_array_conversions(void)
333 } 333 }
334} 334}
335 335
336#define __bitmap_set(a, b, c) bitmap_set(a, b, c)
337#define __bitmap_clear(a, b, c) bitmap_clear(a, b, c)
338
339static void noinline __init test_mem_optimisations(void)
340{
341 DECLARE_BITMAP(bmap1, 1024);
342 DECLARE_BITMAP(bmap2, 1024);
343 unsigned int start, nbits;
344
345 for (start = 0; start < 1024; start += 8) {
346 memset(bmap1, 0x5a, sizeof(bmap1));
347 memset(bmap2, 0x5a, sizeof(bmap2));
348 for (nbits = 0; nbits < 1024 - start; nbits += 8) {
349 bitmap_set(bmap1, start, nbits);
350 __bitmap_set(bmap2, start, nbits);
351 if (!bitmap_equal(bmap1, bmap2, 1024))
352 printk("set not equal %d %d\n", start, nbits);
353 if (!__bitmap_equal(bmap1, bmap2, 1024))
354 printk("set not __equal %d %d\n", start, nbits);
355
356 bitmap_clear(bmap1, start, nbits);
357 __bitmap_clear(bmap2, start, nbits);
358 if (!bitmap_equal(bmap1, bmap2, 1024))
359 printk("clear not equal %d %d\n", start, nbits);
360 if (!__bitmap_equal(bmap1, bmap2, 1024))
361 printk("clear not __equal %d %d\n", start,
362 nbits);
363 }
364 }
365}
366
336static int __init test_bitmap_init(void) 367static int __init test_bitmap_init(void)
337{ 368{
338 test_zero_fill_copy(); 369 test_zero_fill_copy();
339 test_bitmap_u32_array_conversions(); 370 test_bitmap_u32_array_conversions();
371 test_mem_optimisations();
340 372
341 if (failed_tests == 0) 373 if (failed_tests == 0)
342 pr_info("all %u tests passed\n", total_tests); 374 pr_info("all %u tests passed\n", total_tests);