Blame view

lib/test_bitops.c 2.48 KB
c348c1630   Jesse Brandeburg   lib: make a test ...
1
2
3
4
5
6
7
8
9
10
  // SPDX-License-Identifier: GPL-2.0-only
  /*
   * Copyright (C) 2020 Intel Corporation
   */
  
  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  
  #include <linux/init.h>
  #include <linux/module.h>
  #include <linux/printk.h>
6af132f3a   Wei Yang   lib: test get_cou...
11
12
13
14
15
  /* a tiny module only meant to test
   *
   *   set/clear_bit
   *   get_count_order/long
   */
c348c1630   Jesse Brandeburg   lib: make a test ...
16
17
18
19
20
21
22
23
24
25
26
27
28
  
  /* use an enum because thats the most common BITMAP usage */
  enum bitops_fun {
  	BITOPS_4 = 4,
  	BITOPS_7 = 7,
  	BITOPS_11 = 11,
  	BITOPS_31 = 31,
  	BITOPS_88 = 88,
  	BITOPS_LAST = 255,
  	BITOPS_LENGTH = 256
  };
  
  static DECLARE_BITMAP(g_bitmap, BITOPS_LENGTH);
6af132f3a   Wei Yang   lib: test get_cou...
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
  static unsigned int order_comb[][2] = {
  	{0x00000003,  2},
  	{0x00000004,  2},
  	{0x00001fff, 13},
  	{0x00002000, 13},
  	{0x50000000, 31},
  	{0x80000000, 31},
  	{0x80003000, 32},
  };
  
  #ifdef CONFIG_64BIT
  static unsigned long order_comb_long[][2] = {
  	{0x0000000300000000, 34},
  	{0x0000000400000000, 34},
  	{0x00001fff00000000, 45},
  	{0x0000200000000000, 45},
  	{0x5000000000000000, 63},
  	{0x8000000000000000, 63},
  	{0x8000300000000000, 64},
  };
  #endif
c348c1630   Jesse Brandeburg   lib: make a test ...
50
51
  static int __init test_bitops_startup(void)
  {
403f17730   Geert Uytterhoeven   lib/test_bitops: ...
52
  	int i, bit_set;
6af132f3a   Wei Yang   lib: test get_cou...
53

403f17730   Geert Uytterhoeven   lib/test_bitops: ...
54
55
  	pr_info("Starting bitops test
  ");
c348c1630   Jesse Brandeburg   lib: make a test ...
56
57
58
59
60
  	set_bit(BITOPS_4, g_bitmap);
  	set_bit(BITOPS_7, g_bitmap);
  	set_bit(BITOPS_11, g_bitmap);
  	set_bit(BITOPS_31, g_bitmap);
  	set_bit(BITOPS_88, g_bitmap);
6af132f3a   Wei Yang   lib: test get_cou...
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
  
  	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
  ",
  				       order_comb[i][0]);
  	}
  
  	for (i = 0; i < ARRAY_SIZE(order_comb); i++) {
  		if (order_comb[i][1] != get_count_order_long(order_comb[i][0]))
  			pr_warn("get_count_order_long wrong for %x
  ",
  				       order_comb[i][0]);
  	}
  
  #ifdef CONFIG_64BIT
  	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
  ",
  				       order_comb_long[i][0]);
  	}
  #endif
c348c1630   Jesse Brandeburg   lib: make a test ...
85

403f17730   Geert Uytterhoeven   lib/test_bitops: ...
86
  	barrier();
c348c1630   Jesse Brandeburg   lib: make a test ...
87
88
89
90
91
92
93
94
95
96
97
  
  	clear_bit(BITOPS_4, g_bitmap);
  	clear_bit(BITOPS_7, g_bitmap);
  	clear_bit(BITOPS_11, g_bitmap);
  	clear_bit(BITOPS_31, g_bitmap);
  	clear_bit(BITOPS_88, g_bitmap);
  
  	bit_set = find_first_bit(g_bitmap, BITOPS_LAST);
  	if (bit_set != BITOPS_LAST)
  		pr_err("ERROR: FOUND SET BIT %d
  ", bit_set);
403f17730   Geert Uytterhoeven   lib/test_bitops: ...
98
99
100
101
102
103
104
105
  	pr_info("Completed bitops test
  ");
  
  	return 0;
  }
  
  static void __exit test_bitops_unstartup(void)
  {
c348c1630   Jesse Brandeburg   lib: make a test ...
106
107
108
109
  }
  
  module_init(test_bitops_startup);
  module_exit(test_bitops_unstartup);
6af132f3a   Wei Yang   lib: test get_cou...
110
  MODULE_AUTHOR("Jesse Brandeburg <jesse.brandeburg@intel.com>, Wei Yang <richard.weiyang@gmail.com>");
c348c1630   Jesse Brandeburg   lib: make a test ...
111
112
  MODULE_LICENSE("GPL");
  MODULE_DESCRIPTION("Bit testing module");