1 // SPDX-License-Identifier: GPL-2.0-only
2 #include <linux/module.h>
3 #include <linux/printk.h>
4 #include <linux/slab.h>
5 #include <linux/string.h>
7 static __init
int memset16_selftest(void)
12 p
= kmalloc(256 * 2 * 2, GFP_KERNEL
);
16 for (i
= 0; i
< 256; i
++) {
17 for (j
= 0; j
< 256; j
++) {
18 memset(p
, 0xa1, 256 * 2 * sizeof(v
));
19 memset16(p
+ i
, 0xb1b2, j
);
20 for (k
= 0; k
< 512; k
++) {
25 } else if (k
< i
+ j
) {
39 return (i
<< 24) | (j
<< 16) | k
;
43 static __init
int memset32_selftest(void)
48 p
= kmalloc(256 * 2 * 4, GFP_KERNEL
);
52 for (i
= 0; i
< 256; i
++) {
53 for (j
= 0; j
< 256; j
++) {
54 memset(p
, 0xa1, 256 * 2 * sizeof(v
));
55 memset32(p
+ i
, 0xb1b2b3b4, j
);
56 for (k
= 0; k
< 512; k
++) {
61 } else if (k
< i
+ j
) {
75 return (i
<< 24) | (j
<< 16) | k
;
79 static __init
int memset64_selftest(void)
84 p
= kmalloc(256 * 2 * 8, GFP_KERNEL
);
88 for (i
= 0; i
< 256; i
++) {
89 for (j
= 0; j
< 256; j
++) {
90 memset(p
, 0xa1, 256 * 2 * sizeof(v
));
91 memset64(p
+ i
, 0xb1b2b3b4b5b6b7b8ULL
, j
);
92 for (k
= 0; k
< 512; k
++) {
95 if (v
!= 0xa1a1a1a1a1a1a1a1ULL
)
97 } else if (k
< i
+ j
) {
98 if (v
!= 0xb1b2b3b4b5b6b7b8ULL
)
101 if (v
!= 0xa1a1a1a1a1a1a1a1ULL
)
111 return (i
<< 24) | (j
<< 16) | k
;
115 static __init
int string_selftest_init(void)
120 subtest
= memset16_selftest();
125 subtest
= memset32_selftest();
130 subtest
= memset64_selftest();
134 pr_info("String selftests succeeded\n");
137 pr_crit("String selftest failure %d.%08x\n", test
, subtest
);
141 module_init(string_selftest_init
);
142 MODULE_LICENSE("GPL v2");