lib/test_kmod.c: fix rmmod double free
[platform/kernel/linux-rpi.git] / lib / test-kstrtox.c
1 #include <linux/init.h>
2 #include <linux/kernel.h>
3 #include <linux/module.h>
4
5 #define for_each_test(i, test)  \
6         for (i = 0; i < ARRAY_SIZE(test); i++)
7
8 struct test_fail {
9         const char *str;
10         unsigned int base;
11 };
12
13 #define DEFINE_TEST_FAIL(test)  \
14         const struct test_fail test[] __initconst
15
16 #define DECLARE_TEST_OK(type, test_type)        \
17         test_type {                             \
18                 const char *str;                \
19                 unsigned int base;              \
20                 type expected_res;              \
21         }
22
23 #define DEFINE_TEST_OK(type, test)      \
24         const type test[] __initconst
25
26 #define TEST_FAIL(fn, type, fmt, test)                                  \
27 {                                                                       \
28         unsigned int i;                                                 \
29                                                                         \
30         for_each_test(i, test) {                                        \
31                 const struct test_fail *t = &test[i];                   \
32                 type tmp;                                               \
33                 int rv;                                                 \
34                                                                         \
35                 tmp = 0;                                                \
36                 rv = fn(t->str, t->base, &tmp);                         \
37                 if (rv >= 0) {                                          \
38                         WARN(1, "str '%s', base %u, expected -E, got %d/" fmt "\n",     \
39                                 t->str, t->base, rv, tmp);              \
40                         continue;                                       \
41                 }                                                       \
42         }                                                               \
43 }
44
45 #define TEST_OK(fn, type, fmt, test)                                    \
46 {                                                                       \
47         unsigned int i;                                                 \
48                                                                         \
49         for_each_test(i, test) {                                        \
50                 const typeof(test[0]) *t = &test[i];                    \
51                 type res;                                               \
52                 int rv;                                                 \
53                                                                         \
54                 rv = fn(t->str, t->base, &res);                         \
55                 if (rv != 0) {                                          \
56                         WARN(1, "str '%s', base %u, expected 0/" fmt ", got %d\n",      \
57                                 t->str, t->base, t->expected_res, rv);  \
58                         continue;                                       \
59                 }                                                       \
60                 if (res != t->expected_res) {                           \
61                         WARN(1, "str '%s', base %u, expected " fmt ", got " fmt "\n",   \
62                                 t->str, t->base, t->expected_res, res); \
63                         continue;                                       \
64                 }                                                       \
65         }                                                               \
66 }
67
68 static void __init test_kstrtoull_ok(void)
69 {
70         DECLARE_TEST_OK(unsigned long long, struct test_ull);
71         static DEFINE_TEST_OK(struct test_ull, test_ull_ok) = {
72                 {"0",   10,     0ULL},
73                 {"1",   10,     1ULL},
74                 {"127", 10,     127ULL},
75                 {"128", 10,     128ULL},
76                 {"129", 10,     129ULL},
77                 {"255", 10,     255ULL},
78                 {"256", 10,     256ULL},
79                 {"257", 10,     257ULL},
80                 {"32767",       10,     32767ULL},
81                 {"32768",       10,     32768ULL},
82                 {"32769",       10,     32769ULL},
83                 {"65535",       10,     65535ULL},
84                 {"65536",       10,     65536ULL},
85                 {"65537",       10,     65537ULL},
86                 {"2147483647",  10,     2147483647ULL},
87                 {"2147483648",  10,     2147483648ULL},
88                 {"2147483649",  10,     2147483649ULL},
89                 {"4294967295",  10,     4294967295ULL},
90                 {"4294967296",  10,     4294967296ULL},
91                 {"4294967297",  10,     4294967297ULL},
92                 {"9223372036854775807", 10,     9223372036854775807ULL},
93                 {"9223372036854775808", 10,     9223372036854775808ULL},
94                 {"9223372036854775809", 10,     9223372036854775809ULL},
95                 {"18446744073709551614",        10,     18446744073709551614ULL},
96                 {"18446744073709551615",        10,     18446744073709551615ULL},
97
98                 {"00",          8,      00ULL},
99                 {"01",          8,      01ULL},
100                 {"0177",        8,      0177ULL},
101                 {"0200",        8,      0200ULL},
102                 {"0201",        8,      0201ULL},
103                 {"0377",        8,      0377ULL},
104                 {"0400",        8,      0400ULL},
105                 {"0401",        8,      0401ULL},
106                 {"077777",      8,      077777ULL},
107                 {"0100000",     8,      0100000ULL},
108                 {"0100001",     8,      0100001ULL},
109                 {"0177777",     8,      0177777ULL},
110                 {"0200000",     8,      0200000ULL},
111                 {"0200001",     8,      0200001ULL},
112                 {"017777777777",        8,      017777777777ULL},
113                 {"020000000000",        8,      020000000000ULL},
114                 {"020000000001",        8,      020000000001ULL},
115                 {"037777777777",        8,      037777777777ULL},
116                 {"040000000000",        8,      040000000000ULL},
117                 {"040000000001",        8,      040000000001ULL},
118                 {"0777777777777777777777",      8,      0777777777777777777777ULL},
119                 {"01000000000000000000000",     8,      01000000000000000000000ULL},
120                 {"01000000000000000000001",     8,      01000000000000000000001ULL},
121                 {"01777777777777777777776",     8,      01777777777777777777776ULL},
122                 {"01777777777777777777777",     8,      01777777777777777777777ULL},
123
124                 {"0x0",         16,     0x0ULL},
125                 {"0x1",         16,     0x1ULL},
126                 {"0x7f",        16,     0x7fULL},
127                 {"0x80",        16,     0x80ULL},
128                 {"0x81",        16,     0x81ULL},
129                 {"0xff",        16,     0xffULL},
130                 {"0x100",       16,     0x100ULL},
131                 {"0x101",       16,     0x101ULL},
132                 {"0x7fff",      16,     0x7fffULL},
133                 {"0x8000",      16,     0x8000ULL},
134                 {"0x8001",      16,     0x8001ULL},
135                 {"0xffff",      16,     0xffffULL},
136                 {"0x10000",     16,     0x10000ULL},
137                 {"0x10001",     16,     0x10001ULL},
138                 {"0x7fffffff",  16,     0x7fffffffULL},
139                 {"0x80000000",  16,     0x80000000ULL},
140                 {"0x80000001",  16,     0x80000001ULL},
141                 {"0xffffffff",  16,     0xffffffffULL},
142                 {"0x100000000", 16,     0x100000000ULL},
143                 {"0x100000001", 16,     0x100000001ULL},
144                 {"0x7fffffffffffffff",  16,     0x7fffffffffffffffULL},
145                 {"0x8000000000000000",  16,     0x8000000000000000ULL},
146                 {"0x8000000000000001",  16,     0x8000000000000001ULL},
147                 {"0xfffffffffffffffe",  16,     0xfffffffffffffffeULL},
148                 {"0xffffffffffffffff",  16,     0xffffffffffffffffULL},
149
150                 {"0\n", 0,      0ULL},
151         };
152         TEST_OK(kstrtoull, unsigned long long, "%llu", test_ull_ok);
153 }
154
155 static void __init test_kstrtoull_fail(void)
156 {
157         static DEFINE_TEST_FAIL(test_ull_fail) = {
158                 {"",    0},
159                 {"",    8},
160                 {"",    10},
161                 {"",    16},
162                 {"\n",  0},
163                 {"\n",  8},
164                 {"\n",  10},
165                 {"\n",  16},
166                 {"\n0", 0},
167                 {"\n0", 8},
168                 {"\n0", 10},
169                 {"\n0", 16},
170                 {"+",   0},
171                 {"+",   8},
172                 {"+",   10},
173                 {"+",   16},
174                 {"-",   0},
175                 {"-",   8},
176                 {"-",   10},
177                 {"-",   16},
178                 {"0x",  0},
179                 {"0x",  16},
180                 {"0X",  0},
181                 {"0X",  16},
182                 {"0 ",  0},
183                 {"1+",  0},
184                 {"1-",  0},
185                 {" 2",  0},
186                 /* base autodetection */
187                 {"0x0z",        0},
188                 {"0z",          0},
189                 {"a",           0},
190                 /* digit >= base */
191                 {"2",   2},
192                 {"8",   8},
193                 {"a",   10},
194                 {"A",   10},
195                 {"g",   16},
196                 {"G",   16},
197                 /* overflow */
198                 {"10000000000000000000000000000000000000000000000000000000000000000",   2},
199                 {"2000000000000000000000",      8},
200                 {"18446744073709551616",        10},
201                 {"10000000000000000",   16},
202                 /* negative */
203                 {"-0", 0},
204                 {"-0", 8},
205                 {"-0", 10},
206                 {"-0", 16},
207                 {"-1", 0},
208                 {"-1", 8},
209                 {"-1", 10},
210                 {"-1", 16},
211                 /* sign is first character if any */
212                 {"-+1", 0},
213                 {"-+1", 8},
214                 {"-+1", 10},
215                 {"-+1", 16},
216                 /* nothing after \n */
217                 {"0\n0", 0},
218                 {"0\n0", 8},
219                 {"0\n0", 10},
220                 {"0\n0", 16},
221                 {"0\n+", 0},
222                 {"0\n+", 8},
223                 {"0\n+", 10},
224                 {"0\n+", 16},
225                 {"0\n-", 0},
226                 {"0\n-", 8},
227                 {"0\n-", 10},
228                 {"0\n-", 16},
229                 {"0\n ", 0},
230                 {"0\n ", 8},
231                 {"0\n ", 10},
232                 {"0\n ", 16},
233         };
234         TEST_FAIL(kstrtoull, unsigned long long, "%llu", test_ull_fail);
235 }
236
237 static void __init test_kstrtoll_ok(void)
238 {
239         DECLARE_TEST_OK(long long, struct test_ll);
240         static DEFINE_TEST_OK(struct test_ll, test_ll_ok) = {
241                 {"0",   10,     0LL},
242                 {"1",   10,     1LL},
243                 {"127", 10,     127LL},
244                 {"128", 10,     128LL},
245                 {"129", 10,     129LL},
246                 {"255", 10,     255LL},
247                 {"256", 10,     256LL},
248                 {"257", 10,     257LL},
249                 {"32767",       10,     32767LL},
250                 {"32768",       10,     32768LL},
251                 {"32769",       10,     32769LL},
252                 {"65535",       10,     65535LL},
253                 {"65536",       10,     65536LL},
254                 {"65537",       10,     65537LL},
255                 {"2147483647",  10,     2147483647LL},
256                 {"2147483648",  10,     2147483648LL},
257                 {"2147483649",  10,     2147483649LL},
258                 {"4294967295",  10,     4294967295LL},
259                 {"4294967296",  10,     4294967296LL},
260                 {"4294967297",  10,     4294967297LL},
261                 {"9223372036854775807", 10,     9223372036854775807LL},
262
263                 {"-0",  10,     0LL},
264                 {"-1",  10,     -1LL},
265                 {"-2",  10,     -2LL},
266                 {"-9223372036854775808",        10,     LLONG_MIN},
267         };
268         TEST_OK(kstrtoll, long long, "%lld", test_ll_ok);
269 }
270
271 static void __init test_kstrtoll_fail(void)
272 {
273         static DEFINE_TEST_FAIL(test_ll_fail) = {
274                 {"9223372036854775808", 10},
275                 {"9223372036854775809", 10},
276                 {"18446744073709551614",        10},
277                 {"18446744073709551615",        10},
278                 {"-9223372036854775809",        10},
279                 {"-18446744073709551614",       10},
280                 {"-18446744073709551615",       10},
281                 /* sign is first character if any */
282                 {"-+1", 0},
283                 {"-+1", 8},
284                 {"-+1", 10},
285                 {"-+1", 16},
286         };
287         TEST_FAIL(kstrtoll, long long, "%lld", test_ll_fail);
288 }
289
290 static void __init test_kstrtou64_ok(void)
291 {
292         DECLARE_TEST_OK(u64, struct test_u64);
293         static DEFINE_TEST_OK(struct test_u64, test_u64_ok) = {
294                 {"0",   10,     0},
295                 {"1",   10,     1},
296                 {"126", 10,     126},
297                 {"127", 10,     127},
298                 {"128", 10,     128},
299                 {"129", 10,     129},
300                 {"254", 10,     254},
301                 {"255", 10,     255},
302                 {"256", 10,     256},
303                 {"257", 10,     257},
304                 {"32766",       10,     32766},
305                 {"32767",       10,     32767},
306                 {"32768",       10,     32768},
307                 {"32769",       10,     32769},
308                 {"65534",       10,     65534},
309                 {"65535",       10,     65535},
310                 {"65536",       10,     65536},
311                 {"65537",       10,     65537},
312                 {"2147483646",  10,     2147483646},
313                 {"2147483647",  10,     2147483647},
314                 {"2147483648",  10,     2147483648ULL},
315                 {"2147483649",  10,     2147483649ULL},
316                 {"4294967294",  10,     4294967294ULL},
317                 {"4294967295",  10,     4294967295ULL},
318                 {"4294967296",  10,     4294967296ULL},
319                 {"4294967297",  10,     4294967297ULL},
320                 {"9223372036854775806", 10,     9223372036854775806ULL},
321                 {"9223372036854775807", 10,     9223372036854775807ULL},
322                 {"9223372036854775808", 10,     9223372036854775808ULL},
323                 {"9223372036854775809", 10,     9223372036854775809ULL},
324                 {"18446744073709551614",        10,     18446744073709551614ULL},
325                 {"18446744073709551615",        10,     18446744073709551615ULL},
326         };
327         TEST_OK(kstrtou64, u64, "%llu", test_u64_ok);
328 }
329
330 static void __init test_kstrtou64_fail(void)
331 {
332         static DEFINE_TEST_FAIL(test_u64_fail) = {
333                 {"-2",  10},
334                 {"-1",  10},
335                 {"18446744073709551616",        10},
336                 {"18446744073709551617",        10},
337         };
338         TEST_FAIL(kstrtou64, u64, "%llu", test_u64_fail);
339 }
340
341 static void __init test_kstrtos64_ok(void)
342 {
343         DECLARE_TEST_OK(s64, struct test_s64);
344         static DEFINE_TEST_OK(struct test_s64, test_s64_ok) = {
345                 {"-128",        10,     -128},
346                 {"-127",        10,     -127},
347                 {"-1",  10,     -1},
348                 {"0",   10,     0},
349                 {"1",   10,     1},
350                 {"126", 10,     126},
351                 {"127", 10,     127},
352                 {"128", 10,     128},
353                 {"129", 10,     129},
354                 {"254", 10,     254},
355                 {"255", 10,     255},
356                 {"256", 10,     256},
357                 {"257", 10,     257},
358                 {"32766",       10,     32766},
359                 {"32767",       10,     32767},
360                 {"32768",       10,     32768},
361                 {"32769",       10,     32769},
362                 {"65534",       10,     65534},
363                 {"65535",       10,     65535},
364                 {"65536",       10,     65536},
365                 {"65537",       10,     65537},
366                 {"2147483646",  10,     2147483646},
367                 {"2147483647",  10,     2147483647},
368                 {"2147483648",  10,     2147483648LL},
369                 {"2147483649",  10,     2147483649LL},
370                 {"4294967294",  10,     4294967294LL},
371                 {"4294967295",  10,     4294967295LL},
372                 {"4294967296",  10,     4294967296LL},
373                 {"4294967297",  10,     4294967297LL},
374                 {"9223372036854775806", 10,     9223372036854775806LL},
375                 {"9223372036854775807", 10,     9223372036854775807LL},
376         };
377         TEST_OK(kstrtos64, s64, "%lld", test_s64_ok);
378 }
379
380 static void __init test_kstrtos64_fail(void)
381 {
382         static DEFINE_TEST_FAIL(test_s64_fail) = {
383                 {"9223372036854775808", 10},
384                 {"9223372036854775809", 10},
385                 {"18446744073709551614",        10},
386                 {"18446744073709551615",        10},
387                 {"18446744073709551616",        10},
388                 {"18446744073709551617",        10},
389         };
390         TEST_FAIL(kstrtos64, s64, "%lld", test_s64_fail);
391 }
392
393 static void __init test_kstrtou32_ok(void)
394 {
395         DECLARE_TEST_OK(u32, struct test_u32);
396         static DEFINE_TEST_OK(struct test_u32, test_u32_ok) = {
397                 {"0",   10,     0},
398                 {"1",   10,     1},
399                 {"126", 10,     126},
400                 {"127", 10,     127},
401                 {"128", 10,     128},
402                 {"129", 10,     129},
403                 {"254", 10,     254},
404                 {"255", 10,     255},
405                 {"256", 10,     256},
406                 {"257", 10,     257},
407                 {"32766",       10,     32766},
408                 {"32767",       10,     32767},
409                 {"32768",       10,     32768},
410                 {"32769",       10,     32769},
411                 {"65534",       10,     65534},
412                 {"65535",       10,     65535},
413                 {"65536",       10,     65536},
414                 {"65537",       10,     65537},
415                 {"2147483646",  10,     2147483646},
416                 {"2147483647",  10,     2147483647},
417                 {"2147483648",  10,     2147483648U},
418                 {"2147483649",  10,     2147483649U},
419                 {"4294967294",  10,     4294967294U},
420                 {"4294967295",  10,     4294967295U},
421         };
422         TEST_OK(kstrtou32, u32, "%u", test_u32_ok);
423 }
424
425 static void __init test_kstrtou32_fail(void)
426 {
427         static DEFINE_TEST_FAIL(test_u32_fail) = {
428                 {"-2",  10},
429                 {"-1",  10},
430                 {"4294967296",  10},
431                 {"4294967297",  10},
432                 {"9223372036854775806", 10},
433                 {"9223372036854775807", 10},
434                 {"9223372036854775808", 10},
435                 {"9223372036854775809", 10},
436                 {"18446744073709551614",        10},
437                 {"18446744073709551615",        10},
438                 {"18446744073709551616",        10},
439                 {"18446744073709551617",        10},
440         };
441         TEST_FAIL(kstrtou32, u32, "%u", test_u32_fail);
442 }
443
444 static void __init test_kstrtos32_ok(void)
445 {
446         DECLARE_TEST_OK(s32, struct test_s32);
447         static DEFINE_TEST_OK(struct test_s32, test_s32_ok) = {
448                 {"-128",        10,     -128},
449                 {"-127",        10,     -127},
450                 {"-1",  10,     -1},
451                 {"0",   10,     0},
452                 {"1",   10,     1},
453                 {"126", 10,     126},
454                 {"127", 10,     127},
455                 {"128", 10,     128},
456                 {"129", 10,     129},
457                 {"254", 10,     254},
458                 {"255", 10,     255},
459                 {"256", 10,     256},
460                 {"257", 10,     257},
461                 {"32766",       10,     32766},
462                 {"32767",       10,     32767},
463                 {"32768",       10,     32768},
464                 {"32769",       10,     32769},
465                 {"65534",       10,     65534},
466                 {"65535",       10,     65535},
467                 {"65536",       10,     65536},
468                 {"65537",       10,     65537},
469                 {"2147483646",  10,     2147483646},
470                 {"2147483647",  10,     2147483647},
471         };
472         TEST_OK(kstrtos32, s32, "%d", test_s32_ok);
473 }
474
475 static void __init test_kstrtos32_fail(void)
476 {
477         static DEFINE_TEST_FAIL(test_s32_fail) = {
478                 {"2147483648",  10},
479                 {"2147483649",  10},
480                 {"4294967294",  10},
481                 {"4294967295",  10},
482                 {"4294967296",  10},
483                 {"4294967297",  10},
484                 {"9223372036854775806", 10},
485                 {"9223372036854775807", 10},
486                 {"9223372036854775808", 10},
487                 {"9223372036854775809", 10},
488                 {"18446744073709551614",        10},
489                 {"18446744073709551615",        10},
490                 {"18446744073709551616",        10},
491                 {"18446744073709551617",        10},
492         };
493         TEST_FAIL(kstrtos32, s32, "%d", test_s32_fail);
494 }
495
496 static void __init test_kstrtou16_ok(void)
497 {
498         DECLARE_TEST_OK(u16, struct test_u16);
499         static DEFINE_TEST_OK(struct test_u16, test_u16_ok) = {
500                 {"0",   10,     0},
501                 {"1",   10,     1},
502                 {"126", 10,     126},
503                 {"127", 10,     127},
504                 {"128", 10,     128},
505                 {"129", 10,     129},
506                 {"254", 10,     254},
507                 {"255", 10,     255},
508                 {"256", 10,     256},
509                 {"257", 10,     257},
510                 {"32766",       10,     32766},
511                 {"32767",       10,     32767},
512                 {"32768",       10,     32768},
513                 {"32769",       10,     32769},
514                 {"65534",       10,     65534},
515                 {"65535",       10,     65535},
516         };
517         TEST_OK(kstrtou16, u16, "%hu", test_u16_ok);
518 }
519
520 static void __init test_kstrtou16_fail(void)
521 {
522         static DEFINE_TEST_FAIL(test_u16_fail) = {
523                 {"-2",  10},
524                 {"-1",  10},
525                 {"65536",       10},
526                 {"65537",       10},
527                 {"2147483646",  10},
528                 {"2147483647",  10},
529                 {"2147483648",  10},
530                 {"2147483649",  10},
531                 {"4294967294",  10},
532                 {"4294967295",  10},
533                 {"4294967296",  10},
534                 {"4294967297",  10},
535                 {"9223372036854775806", 10},
536                 {"9223372036854775807", 10},
537                 {"9223372036854775808", 10},
538                 {"9223372036854775809", 10},
539                 {"18446744073709551614",        10},
540                 {"18446744073709551615",        10},
541                 {"18446744073709551616",        10},
542                 {"18446744073709551617",        10},
543         };
544         TEST_FAIL(kstrtou16, u16, "%hu", test_u16_fail);
545 }
546
547 static void __init test_kstrtos16_ok(void)
548 {
549         DECLARE_TEST_OK(s16, struct test_s16);
550         static DEFINE_TEST_OK(struct test_s16, test_s16_ok) = {
551                 {"-130",        10,     -130},
552                 {"-129",        10,     -129},
553                 {"-128",        10,     -128},
554                 {"-127",        10,     -127},
555                 {"-1",  10,     -1},
556                 {"0",   10,     0},
557                 {"1",   10,     1},
558                 {"126", 10,     126},
559                 {"127", 10,     127},
560                 {"128", 10,     128},
561                 {"129", 10,     129},
562                 {"254", 10,     254},
563                 {"255", 10,     255},
564                 {"256", 10,     256},
565                 {"257", 10,     257},
566                 {"32766",       10,     32766},
567                 {"32767",       10,     32767},
568         };
569         TEST_OK(kstrtos16, s16, "%hd", test_s16_ok);
570 }
571
572 static void __init test_kstrtos16_fail(void)
573 {
574         static DEFINE_TEST_FAIL(test_s16_fail) = {
575                 {"32768",       10},
576                 {"32769",       10},
577                 {"65534",       10},
578                 {"65535",       10},
579                 {"65536",       10},
580                 {"65537",       10},
581                 {"2147483646",  10},
582                 {"2147483647",  10},
583                 {"2147483648",  10},
584                 {"2147483649",  10},
585                 {"4294967294",  10},
586                 {"4294967295",  10},
587                 {"4294967296",  10},
588                 {"4294967297",  10},
589                 {"9223372036854775806", 10},
590                 {"9223372036854775807", 10},
591                 {"9223372036854775808", 10},
592                 {"9223372036854775809", 10},
593                 {"18446744073709551614",        10},
594                 {"18446744073709551615",        10},
595                 {"18446744073709551616",        10},
596                 {"18446744073709551617",        10},
597         };
598         TEST_FAIL(kstrtos16, s16, "%hd", test_s16_fail);
599 }
600
601 static void __init test_kstrtou8_ok(void)
602 {
603         DECLARE_TEST_OK(u8, struct test_u8);
604         static DEFINE_TEST_OK(struct test_u8, test_u8_ok) = {
605                 {"0",   10,     0},
606                 {"1",   10,     1},
607                 {"126", 10,     126},
608                 {"127", 10,     127},
609                 {"128", 10,     128},
610                 {"129", 10,     129},
611                 {"254", 10,     254},
612                 {"255", 10,     255},
613         };
614         TEST_OK(kstrtou8, u8, "%hhu", test_u8_ok);
615 }
616
617 static void __init test_kstrtou8_fail(void)
618 {
619         static DEFINE_TEST_FAIL(test_u8_fail) = {
620                 {"-2",  10},
621                 {"-1",  10},
622                 {"256", 10},
623                 {"257", 10},
624                 {"32766",       10},
625                 {"32767",       10},
626                 {"32768",       10},
627                 {"32769",       10},
628                 {"65534",       10},
629                 {"65535",       10},
630                 {"65536",       10},
631                 {"65537",       10},
632                 {"2147483646",  10},
633                 {"2147483647",  10},
634                 {"2147483648",  10},
635                 {"2147483649",  10},
636                 {"4294967294",  10},
637                 {"4294967295",  10},
638                 {"4294967296",  10},
639                 {"4294967297",  10},
640                 {"9223372036854775806", 10},
641                 {"9223372036854775807", 10},
642                 {"9223372036854775808", 10},
643                 {"9223372036854775809", 10},
644                 {"18446744073709551614",        10},
645                 {"18446744073709551615",        10},
646                 {"18446744073709551616",        10},
647                 {"18446744073709551617",        10},
648         };
649         TEST_FAIL(kstrtou8, u8, "%hhu", test_u8_fail);
650 }
651
652 static void __init test_kstrtos8_ok(void)
653 {
654         DECLARE_TEST_OK(s8, struct test_s8);
655         static DEFINE_TEST_OK(struct test_s8, test_s8_ok) = {
656                 {"-128",        10,     -128},
657                 {"-127",        10,     -127},
658                 {"-1",  10,     -1},
659                 {"0",   10,     0},
660                 {"1",   10,     1},
661                 {"126", 10,     126},
662                 {"127", 10,     127},
663         };
664         TEST_OK(kstrtos8, s8, "%hhd", test_s8_ok);
665 }
666
667 static void __init test_kstrtos8_fail(void)
668 {
669         static DEFINE_TEST_FAIL(test_s8_fail) = {
670                 {"-130",        10},
671                 {"-129",        10},
672                 {"128", 10},
673                 {"129", 10},
674                 {"254", 10},
675                 {"255", 10},
676                 {"256", 10},
677                 {"257", 10},
678                 {"32766",       10},
679                 {"32767",       10},
680                 {"32768",       10},
681                 {"32769",       10},
682                 {"65534",       10},
683                 {"65535",       10},
684                 {"65536",       10},
685                 {"65537",       10},
686                 {"2147483646",  10},
687                 {"2147483647",  10},
688                 {"2147483648",  10},
689                 {"2147483649",  10},
690                 {"4294967294",  10},
691                 {"4294967295",  10},
692                 {"4294967296",  10},
693                 {"4294967297",  10},
694                 {"9223372036854775806", 10},
695                 {"9223372036854775807", 10},
696                 {"9223372036854775808", 10},
697                 {"9223372036854775809", 10},
698                 {"18446744073709551614",        10},
699                 {"18446744073709551615",        10},
700                 {"18446744073709551616",        10},
701                 {"18446744073709551617",        10},
702         };
703         TEST_FAIL(kstrtos8, s8, "%hhd", test_s8_fail);
704 }
705
706 static int __init test_kstrtox_init(void)
707 {
708         test_kstrtoull_ok();
709         test_kstrtoull_fail();
710         test_kstrtoll_ok();
711         test_kstrtoll_fail();
712
713         test_kstrtou64_ok();
714         test_kstrtou64_fail();
715         test_kstrtos64_ok();
716         test_kstrtos64_fail();
717
718         test_kstrtou32_ok();
719         test_kstrtou32_fail();
720         test_kstrtos32_ok();
721         test_kstrtos32_fail();
722
723         test_kstrtou16_ok();
724         test_kstrtou16_fail();
725         test_kstrtos16_ok();
726         test_kstrtos16_fail();
727
728         test_kstrtou8_ok();
729         test_kstrtou8_fail();
730         test_kstrtos8_ok();
731         test_kstrtos8_fail();
732         return -EINVAL;
733 }
734 module_init(test_kstrtox_init);
735 MODULE_LICENSE("Dual BSD/GPL");