Linux Audio

Check our new training course

Loading...
v5.14.15
  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>
  6
  7static __init int memset16_selftest(void)
  8{
  9	unsigned i, j, k;
 10	u16 v, *p;
 11
 12	p = kmalloc(256 * 2 * 2, GFP_KERNEL);
 13	if (!p)
 14		return -1;
 15
 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++) {
 21				v = p[k];
 22				if (k < i) {
 23					if (v != 0xa1a1)
 24						goto fail;
 25				} else if (k < i + j) {
 26					if (v != 0xb1b2)
 27						goto fail;
 28				} else {
 29					if (v != 0xa1a1)
 30						goto fail;
 31				}
 32			}
 33		}
 34	}
 35
 36fail:
 37	kfree(p);
 38	if (i < 256)
 39		return (i << 24) | (j << 16) | k | 0x8000;
 40	return 0;
 41}
 42
 43static __init int memset32_selftest(void)
 44{
 45	unsigned i, j, k;
 46	u32 v, *p;
 47
 48	p = kmalloc(256 * 2 * 4, GFP_KERNEL);
 49	if (!p)
 50		return -1;
 51
 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++) {
 57				v = p[k];
 58				if (k < i) {
 59					if (v != 0xa1a1a1a1)
 60						goto fail;
 61				} else if (k < i + j) {
 62					if (v != 0xb1b2b3b4)
 63						goto fail;
 64				} else {
 65					if (v != 0xa1a1a1a1)
 66						goto fail;
 67				}
 68			}
 69		}
 70	}
 71
 72fail:
 73	kfree(p);
 74	if (i < 256)
 75		return (i << 24) | (j << 16) | k | 0x8000;
 76	return 0;
 77}
 78
 79static __init int memset64_selftest(void)
 80{
 81	unsigned i, j, k;
 82	u64 v, *p;
 83
 84	p = kmalloc(256 * 2 * 8, GFP_KERNEL);
 85	if (!p)
 86		return -1;
 87
 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++) {
 93				v = p[k];
 94				if (k < i) {
 95					if (v != 0xa1a1a1a1a1a1a1a1ULL)
 96						goto fail;
 97				} else if (k < i + j) {
 98					if (v != 0xb1b2b3b4b5b6b7b8ULL)
 99						goto fail;
100				} else {
101					if (v != 0xa1a1a1a1a1a1a1a1ULL)
102						goto fail;
103				}
104			}
105		}
106	}
107
108fail:
109	kfree(p);
110	if (i < 256)
111		return (i << 24) | (j << 16) | k | 0x8000;
112	return 0;
113}
114
115static __init int strchr_selftest(void)
116{
117	const char *test_string = "abcdefghijkl";
118	const char *empty_string = "";
119	char *result;
120	int i;
121
122	for (i = 0; i < strlen(test_string) + 1; i++) {
123		result = strchr(test_string, test_string[i]);
124		if (result - test_string != i)
125			return i + 'a';
126	}
127
128	result = strchr(empty_string, '\0');
129	if (result != empty_string)
130		return 0x101;
131
132	result = strchr(empty_string, 'a');
133	if (result)
134		return 0x102;
135
136	result = strchr(test_string, 'z');
137	if (result)
138		return 0x103;
139
140	return 0;
141}
142
143static __init int strnchr_selftest(void)
144{
145	const char *test_string = "abcdefghijkl";
146	const char *empty_string = "";
147	char *result;
148	int i, j;
149
150	for (i = 0; i < strlen(test_string) + 1; i++) {
151		for (j = 0; j < strlen(test_string) + 2; j++) {
152			result = strnchr(test_string, j, test_string[i]);
153			if (j <= i) {
154				if (!result)
155					continue;
156				return ((i + 'a') << 8) | j;
157			}
158			if (result - test_string != i)
159				return ((i + 'a') << 8) | j;
160		}
161	}
162
163	result = strnchr(empty_string, 0, '\0');
164	if (result)
165		return 0x10001;
166
167	result = strnchr(empty_string, 1, '\0');
168	if (result != empty_string)
169		return 0x10002;
170
171	result = strnchr(empty_string, 1, 'a');
172	if (result)
173		return 0x10003;
174
175	result = strnchr(NULL, 0, '\0');
176	if (result)
177		return 0x10004;
178
179	return 0;
180}
181
182static __exit void string_selftest_remove(void)
183{
184}
185
186static __init int string_selftest_init(void)
187{
188	int test, subtest;
189
190	test = 1;
191	subtest = memset16_selftest();
192	if (subtest)
193		goto fail;
194
195	test = 2;
196	subtest = memset32_selftest();
197	if (subtest)
198		goto fail;
199
200	test = 3;
201	subtest = memset64_selftest();
202	if (subtest)
203		goto fail;
204
205	test = 4;
206	subtest = strchr_selftest();
207	if (subtest)
208		goto fail;
209
210	test = 5;
211	subtest = strnchr_selftest();
212	if (subtest)
213		goto fail;
214
215	pr_info("String selftests succeeded\n");
216	return 0;
217fail:
218	pr_crit("String selftest failure %d.%08x\n", test, subtest);
219	return 0;
220}
221
222module_init(string_selftest_init);
223module_exit(string_selftest_remove);
224MODULE_LICENSE("GPL v2");
v4.17
 
  1#include <linux/module.h>
  2#include <linux/printk.h>
  3#include <linux/slab.h>
  4#include <linux/string.h>
  5
  6static __init int memset16_selftest(void)
  7{
  8	unsigned i, j, k;
  9	u16 v, *p;
 10
 11	p = kmalloc(256 * 2 * 2, GFP_KERNEL);
 12	if (!p)
 13		return -1;
 14
 15	for (i = 0; i < 256; i++) {
 16		for (j = 0; j < 256; j++) {
 17			memset(p, 0xa1, 256 * 2 * sizeof(v));
 18			memset16(p + i, 0xb1b2, j);
 19			for (k = 0; k < 512; k++) {
 20				v = p[k];
 21				if (k < i) {
 22					if (v != 0xa1a1)
 23						goto fail;
 24				} else if (k < i + j) {
 25					if (v != 0xb1b2)
 26						goto fail;
 27				} else {
 28					if (v != 0xa1a1)
 29						goto fail;
 30				}
 31			}
 32		}
 33	}
 34
 35fail:
 36	kfree(p);
 37	if (i < 256)
 38		return (i << 24) | (j << 16) | k;
 39	return 0;
 40}
 41
 42static __init int memset32_selftest(void)
 43{
 44	unsigned i, j, k;
 45	u32 v, *p;
 46
 47	p = kmalloc(256 * 2 * 4, GFP_KERNEL);
 48	if (!p)
 49		return -1;
 50
 51	for (i = 0; i < 256; i++) {
 52		for (j = 0; j < 256; j++) {
 53			memset(p, 0xa1, 256 * 2 * sizeof(v));
 54			memset32(p + i, 0xb1b2b3b4, j);
 55			for (k = 0; k < 512; k++) {
 56				v = p[k];
 57				if (k < i) {
 58					if (v != 0xa1a1a1a1)
 59						goto fail;
 60				} else if (k < i + j) {
 61					if (v != 0xb1b2b3b4)
 62						goto fail;
 63				} else {
 64					if (v != 0xa1a1a1a1)
 65						goto fail;
 66				}
 67			}
 68		}
 69	}
 70
 71fail:
 72	kfree(p);
 73	if (i < 256)
 74		return (i << 24) | (j << 16) | k;
 75	return 0;
 76}
 77
 78static __init int memset64_selftest(void)
 79{
 80	unsigned i, j, k;
 81	u64 v, *p;
 82
 83	p = kmalloc(256 * 2 * 8, GFP_KERNEL);
 84	if (!p)
 85		return -1;
 86
 87	for (i = 0; i < 256; i++) {
 88		for (j = 0; j < 256; j++) {
 89			memset(p, 0xa1, 256 * 2 * sizeof(v));
 90			memset64(p + i, 0xb1b2b3b4b5b6b7b8ULL, j);
 91			for (k = 0; k < 512; k++) {
 92				v = p[k];
 93				if (k < i) {
 94					if (v != 0xa1a1a1a1a1a1a1a1ULL)
 95						goto fail;
 96				} else if (k < i + j) {
 97					if (v != 0xb1b2b3b4b5b6b7b8ULL)
 98						goto fail;
 99				} else {
100					if (v != 0xa1a1a1a1a1a1a1a1ULL)
101						goto fail;
102				}
103			}
104		}
105	}
106
107fail:
108	kfree(p);
109	if (i < 256)
110		return (i << 24) | (j << 16) | k;
111	return 0;
112}
113
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114static __init int string_selftest_init(void)
115{
116	int test, subtest;
117
118	test = 1;
119	subtest = memset16_selftest();
120	if (subtest)
121		goto fail;
122
123	test = 2;
124	subtest = memset32_selftest();
125	if (subtest)
126		goto fail;
127
128	test = 3;
129	subtest = memset64_selftest();
130	if (subtest)
131		goto fail;
132
 
 
 
 
 
 
 
 
 
 
133	pr_info("String selftests succeeded\n");
134	return 0;
135fail:
136	pr_crit("String selftest failure %d.%08x\n", test, subtest);
137	return 0;
138}
139
140module_init(string_selftest_init);
 
141MODULE_LICENSE("GPL v2");