Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.15.
  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");