xref: /openbmc/linux/crypto/tcrypt.c (revision 07c7c6bf)
1 /*
2  * Quick & dirty crypto testing module.
3  *
4  * This will only exist until we have a better testing mechanism
5  * (e.g. a char device).
6  *
7  * Copyright (c) 2002 James Morris <jmorris@intercode.com.au>
8  * Copyright (c) 2002 Jean-Francois Dive <jef@linuxbe.org>
9  * Copyright (c) 2007 Nokia Siemens Networks
10  *
11  * Updated RFC4106 AES-GCM testing.
12  *    Authors: Aidan O'Mahony (aidan.o.mahony@intel.com)
13  *             Adrian Hoban <adrian.hoban@intel.com>
14  *             Gabriele Paoloni <gabriele.paoloni@intel.com>
15  *             Tadeusz Struk (tadeusz.struk@intel.com)
16  *             Copyright (c) 2010, Intel Corporation.
17  *
18  * This program is free software; you can redistribute it and/or modify it
19  * under the terms of the GNU General Public License as published by the Free
20  * Software Foundation; either version 2 of the License, or (at your option)
21  * any later version.
22  *
23  */
24 
25 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
26 
27 #include <crypto/aead.h>
28 #include <crypto/hash.h>
29 #include <crypto/skcipher.h>
30 #include <linux/err.h>
31 #include <linux/fips.h>
32 #include <linux/init.h>
33 #include <linux/gfp.h>
34 #include <linux/module.h>
35 #include <linux/scatterlist.h>
36 #include <linux/string.h>
37 #include <linux/moduleparam.h>
38 #include <linux/jiffies.h>
39 #include <linux/timex.h>
40 #include <linux/interrupt.h>
41 #include "tcrypt.h"
42 
43 /*
44  * Need slab memory for testing (size in number of pages).
45  */
46 #define TVMEMSIZE	4
47 
48 /*
49 * Used by test_cipher_speed()
50 */
51 #define ENCRYPT 1
52 #define DECRYPT 0
53 
54 #define MAX_DIGEST_SIZE		64
55 
56 /*
57  * return a string with the driver name
58  */
59 #define get_driver_name(tfm_type, tfm) crypto_tfm_alg_driver_name(tfm_type ## _tfm(tfm))
60 
61 /*
62  * Used by test_cipher_speed()
63  */
64 static unsigned int sec;
65 
66 static char *alg = NULL;
67 static u32 type;
68 static u32 mask;
69 static int mode;
70 static u32 num_mb = 8;
71 static char *tvmem[TVMEMSIZE];
72 
73 static char *check[] = {
74 	"des", "md5", "des3_ede", "rot13", "sha1", "sha224", "sha256", "sm3",
75 	"blowfish", "twofish", "serpent", "sha384", "sha512", "md4", "aes",
76 	"cast6", "arc4", "michael_mic", "deflate", "crc32c", "tea", "xtea",
77 	"khazad", "wp512", "wp384", "wp256", "tnepres", "xeta",  "fcrypt",
78 	"camellia", "seed", "salsa20", "rmd128", "rmd160", "rmd256", "rmd320",
79 	"lzo", "lzo-rle", "cts", "sha3-224", "sha3-256", "sha3-384",
80 	"sha3-512", "streebog256", "streebog512",
81 	NULL
82 };
83 
84 static u32 block_sizes[] = { 16, 64, 256, 1024, 1472, 8192, 0 };
85 static u32 aead_sizes[] = { 16, 64, 256, 512, 1024, 2048, 4096, 8192, 0 };
86 
87 #define XBUFSIZE 8
88 #define MAX_IVLEN 32
89 
90 static int testmgr_alloc_buf(char *buf[XBUFSIZE])
91 {
92 	int i;
93 
94 	for (i = 0; i < XBUFSIZE; i++) {
95 		buf[i] = (void *)__get_free_page(GFP_KERNEL);
96 		if (!buf[i])
97 			goto err_free_buf;
98 	}
99 
100 	return 0;
101 
102 err_free_buf:
103 	while (i-- > 0)
104 		free_page((unsigned long)buf[i]);
105 
106 	return -ENOMEM;
107 }
108 
109 static void testmgr_free_buf(char *buf[XBUFSIZE])
110 {
111 	int i;
112 
113 	for (i = 0; i < XBUFSIZE; i++)
114 		free_page((unsigned long)buf[i]);
115 }
116 
117 static void sg_init_aead(struct scatterlist *sg, char *xbuf[XBUFSIZE],
118 			 unsigned int buflen, const void *assoc,
119 			 unsigned int aad_size)
120 {
121 	int np = (buflen + PAGE_SIZE - 1)/PAGE_SIZE;
122 	int k, rem;
123 
124 	if (np > XBUFSIZE) {
125 		rem = PAGE_SIZE;
126 		np = XBUFSIZE;
127 	} else {
128 		rem = buflen % PAGE_SIZE;
129 	}
130 
131 	sg_init_table(sg, np + 1);
132 
133 	sg_set_buf(&sg[0], assoc, aad_size);
134 
135 	if (rem)
136 		np--;
137 	for (k = 0; k < np; k++)
138 		sg_set_buf(&sg[k + 1], xbuf[k], PAGE_SIZE);
139 
140 	if (rem)
141 		sg_set_buf(&sg[k + 1], xbuf[k], rem);
142 }
143 
144 static inline int do_one_aead_op(struct aead_request *req, int ret)
145 {
146 	struct crypto_wait *wait = req->base.data;
147 
148 	return crypto_wait_req(ret, wait);
149 }
150 
151 struct test_mb_aead_data {
152 	struct scatterlist sg[XBUFSIZE];
153 	struct scatterlist sgout[XBUFSIZE];
154 	struct aead_request *req;
155 	struct crypto_wait wait;
156 	char *xbuf[XBUFSIZE];
157 	char *xoutbuf[XBUFSIZE];
158 	char *axbuf[XBUFSIZE];
159 };
160 
161 static int do_mult_aead_op(struct test_mb_aead_data *data, int enc,
162 				u32 num_mb, int *rc)
163 {
164 	int i, err = 0;
165 
166 	/* Fire up a bunch of concurrent requests */
167 	for (i = 0; i < num_mb; i++) {
168 		if (enc == ENCRYPT)
169 			rc[i] = crypto_aead_encrypt(data[i].req);
170 		else
171 			rc[i] = crypto_aead_decrypt(data[i].req);
172 	}
173 
174 	/* Wait for all requests to finish */
175 	for (i = 0; i < num_mb; i++) {
176 		rc[i] = crypto_wait_req(rc[i], &data[i].wait);
177 
178 		if (rc[i]) {
179 			pr_info("concurrent request %d error %d\n", i, rc[i]);
180 			err = rc[i];
181 		}
182 	}
183 
184 	return err;
185 }
186 
187 static int test_mb_aead_jiffies(struct test_mb_aead_data *data, int enc,
188 				int blen, int secs, u32 num_mb)
189 {
190 	unsigned long start, end;
191 	int bcount;
192 	int ret = 0;
193 	int *rc;
194 
195 	rc = kcalloc(num_mb, sizeof(*rc), GFP_KERNEL);
196 	if (!rc)
197 		return -ENOMEM;
198 
199 	for (start = jiffies, end = start + secs * HZ, bcount = 0;
200 	     time_before(jiffies, end); bcount++) {
201 		ret = do_mult_aead_op(data, enc, num_mb, rc);
202 		if (ret)
203 			goto out;
204 	}
205 
206 	pr_cont("%d operations in %d seconds (%ld bytes)\n",
207 		bcount * num_mb, secs, (long)bcount * blen * num_mb);
208 
209 out:
210 	kfree(rc);
211 	return ret;
212 }
213 
214 static int test_mb_aead_cycles(struct test_mb_aead_data *data, int enc,
215 			       int blen, u32 num_mb)
216 {
217 	unsigned long cycles = 0;
218 	int ret = 0;
219 	int i;
220 	int *rc;
221 
222 	rc = kcalloc(num_mb, sizeof(*rc), GFP_KERNEL);
223 	if (!rc)
224 		return -ENOMEM;
225 
226 	/* Warm-up run. */
227 	for (i = 0; i < 4; i++) {
228 		ret = do_mult_aead_op(data, enc, num_mb, rc);
229 		if (ret)
230 			goto out;
231 	}
232 
233 	/* The real thing. */
234 	for (i = 0; i < 8; i++) {
235 		cycles_t start, end;
236 
237 		start = get_cycles();
238 		ret = do_mult_aead_op(data, enc, num_mb, rc);
239 		end = get_cycles();
240 
241 		if (ret)
242 			goto out;
243 
244 		cycles += end - start;
245 	}
246 
247 	pr_cont("1 operation in %lu cycles (%d bytes)\n",
248 		(cycles + 4) / (8 * num_mb), blen);
249 
250 out:
251 	kfree(rc);
252 	return ret;
253 }
254 
255 static void test_mb_aead_speed(const char *algo, int enc, int secs,
256 			       struct aead_speed_template *template,
257 			       unsigned int tcount, u8 authsize,
258 			       unsigned int aad_size, u8 *keysize, u32 num_mb)
259 {
260 	struct test_mb_aead_data *data;
261 	struct crypto_aead *tfm;
262 	unsigned int i, j, iv_len;
263 	const char *key;
264 	const char *e;
265 	void *assoc;
266 	u32 *b_size;
267 	char *iv;
268 	int ret;
269 
270 
271 	if (aad_size >= PAGE_SIZE) {
272 		pr_err("associate data length (%u) too big\n", aad_size);
273 		return;
274 	}
275 
276 	iv = kzalloc(MAX_IVLEN, GFP_KERNEL);
277 	if (!iv)
278 		return;
279 
280 	if (enc == ENCRYPT)
281 		e = "encryption";
282 	else
283 		e = "decryption";
284 
285 	data = kcalloc(num_mb, sizeof(*data), GFP_KERNEL);
286 	if (!data)
287 		goto out_free_iv;
288 
289 	tfm = crypto_alloc_aead(algo, 0, 0);
290 	if (IS_ERR(tfm)) {
291 		pr_err("failed to load transform for %s: %ld\n",
292 			algo, PTR_ERR(tfm));
293 		goto out_free_data;
294 	}
295 
296 	ret = crypto_aead_setauthsize(tfm, authsize);
297 
298 	for (i = 0; i < num_mb; ++i)
299 		if (testmgr_alloc_buf(data[i].xbuf)) {
300 			while (i--)
301 				testmgr_free_buf(data[i].xbuf);
302 			goto out_free_tfm;
303 		}
304 
305 	for (i = 0; i < num_mb; ++i)
306 		if (testmgr_alloc_buf(data[i].axbuf)) {
307 			while (i--)
308 				testmgr_free_buf(data[i].axbuf);
309 			goto out_free_xbuf;
310 		}
311 
312 	for (i = 0; i < num_mb; ++i)
313 		if (testmgr_alloc_buf(data[i].xoutbuf)) {
314 			while (i--)
315 				testmgr_free_buf(data[i].xoutbuf);
316 			goto out_free_axbuf;
317 		}
318 
319 	for (i = 0; i < num_mb; ++i) {
320 		data[i].req = aead_request_alloc(tfm, GFP_KERNEL);
321 		if (!data[i].req) {
322 			pr_err("alg: skcipher: Failed to allocate request for %s\n",
323 			       algo);
324 			while (i--)
325 				aead_request_free(data[i].req);
326 			goto out_free_xoutbuf;
327 		}
328 	}
329 
330 	for (i = 0; i < num_mb; ++i) {
331 		crypto_init_wait(&data[i].wait);
332 		aead_request_set_callback(data[i].req,
333 					  CRYPTO_TFM_REQ_MAY_BACKLOG,
334 					  crypto_req_done, &data[i].wait);
335 	}
336 
337 	pr_info("\ntesting speed of multibuffer %s (%s) %s\n", algo,
338 		get_driver_name(crypto_aead, tfm), e);
339 
340 	i = 0;
341 	do {
342 		b_size = aead_sizes;
343 		do {
344 			if (*b_size + authsize > XBUFSIZE * PAGE_SIZE) {
345 				pr_err("template (%u) too big for buffer (%lu)\n",
346 				       authsize + *b_size,
347 				       XBUFSIZE * PAGE_SIZE);
348 				goto out;
349 			}
350 
351 			pr_info("test %u (%d bit key, %d byte blocks): ", i,
352 				*keysize * 8, *b_size);
353 
354 			/* Set up tfm global state, i.e. the key */
355 
356 			memset(tvmem[0], 0xff, PAGE_SIZE);
357 			key = tvmem[0];
358 			for (j = 0; j < tcount; j++) {
359 				if (template[j].klen == *keysize) {
360 					key = template[j].key;
361 					break;
362 				}
363 			}
364 
365 			crypto_aead_clear_flags(tfm, ~0);
366 
367 			ret = crypto_aead_setkey(tfm, key, *keysize);
368 			if (ret) {
369 				pr_err("setkey() failed flags=%x\n",
370 				       crypto_aead_get_flags(tfm));
371 				goto out;
372 			}
373 
374 			iv_len = crypto_aead_ivsize(tfm);
375 			if (iv_len)
376 				memset(iv, 0xff, iv_len);
377 
378 			/* Now setup per request stuff, i.e. buffers */
379 
380 			for (j = 0; j < num_mb; ++j) {
381 				struct test_mb_aead_data *cur = &data[j];
382 
383 				assoc = cur->axbuf[0];
384 				memset(assoc, 0xff, aad_size);
385 
386 				sg_init_aead(cur->sg, cur->xbuf,
387 					     *b_size + (enc ? 0 : authsize),
388 					     assoc, aad_size);
389 
390 				sg_init_aead(cur->sgout, cur->xoutbuf,
391 					     *b_size + (enc ? authsize : 0),
392 					     assoc, aad_size);
393 
394 				aead_request_set_ad(cur->req, aad_size);
395 
396 				if (!enc) {
397 
398 					aead_request_set_crypt(cur->req,
399 							       cur->sgout,
400 							       cur->sg,
401 							       *b_size, iv);
402 					ret = crypto_aead_encrypt(cur->req);
403 					ret = do_one_aead_op(cur->req, ret);
404 
405 					if (ret) {
406 						pr_err("calculating auth failed failed (%d)\n",
407 						       ret);
408 						break;
409 					}
410 				}
411 
412 				aead_request_set_crypt(cur->req, cur->sg,
413 						       cur->sgout, *b_size +
414 						       (enc ? 0 : authsize),
415 						       iv);
416 
417 			}
418 
419 			if (secs) {
420 				ret = test_mb_aead_jiffies(data, enc, *b_size,
421 							   secs, num_mb);
422 				cond_resched();
423 			} else {
424 				ret = test_mb_aead_cycles(data, enc, *b_size,
425 							  num_mb);
426 			}
427 
428 			if (ret) {
429 				pr_err("%s() failed return code=%d\n", e, ret);
430 				break;
431 			}
432 			b_size++;
433 			i++;
434 		} while (*b_size);
435 		keysize++;
436 	} while (*keysize);
437 
438 out:
439 	for (i = 0; i < num_mb; ++i)
440 		aead_request_free(data[i].req);
441 out_free_xoutbuf:
442 	for (i = 0; i < num_mb; ++i)
443 		testmgr_free_buf(data[i].xoutbuf);
444 out_free_axbuf:
445 	for (i = 0; i < num_mb; ++i)
446 		testmgr_free_buf(data[i].axbuf);
447 out_free_xbuf:
448 	for (i = 0; i < num_mb; ++i)
449 		testmgr_free_buf(data[i].xbuf);
450 out_free_tfm:
451 	crypto_free_aead(tfm);
452 out_free_data:
453 	kfree(data);
454 out_free_iv:
455 	kfree(iv);
456 }
457 
458 static int test_aead_jiffies(struct aead_request *req, int enc,
459 				int blen, int secs)
460 {
461 	unsigned long start, end;
462 	int bcount;
463 	int ret;
464 
465 	for (start = jiffies, end = start + secs * HZ, bcount = 0;
466 	     time_before(jiffies, end); bcount++) {
467 		if (enc)
468 			ret = do_one_aead_op(req, crypto_aead_encrypt(req));
469 		else
470 			ret = do_one_aead_op(req, crypto_aead_decrypt(req));
471 
472 		if (ret)
473 			return ret;
474 	}
475 
476 	printk("%d operations in %d seconds (%ld bytes)\n",
477 	       bcount, secs, (long)bcount * blen);
478 	return 0;
479 }
480 
481 static int test_aead_cycles(struct aead_request *req, int enc, int blen)
482 {
483 	unsigned long cycles = 0;
484 	int ret = 0;
485 	int i;
486 
487 	/* Warm-up run. */
488 	for (i = 0; i < 4; i++) {
489 		if (enc)
490 			ret = do_one_aead_op(req, crypto_aead_encrypt(req));
491 		else
492 			ret = do_one_aead_op(req, crypto_aead_decrypt(req));
493 
494 		if (ret)
495 			goto out;
496 	}
497 
498 	/* The real thing. */
499 	for (i = 0; i < 8; i++) {
500 		cycles_t start, end;
501 
502 		start = get_cycles();
503 		if (enc)
504 			ret = do_one_aead_op(req, crypto_aead_encrypt(req));
505 		else
506 			ret = do_one_aead_op(req, crypto_aead_decrypt(req));
507 		end = get_cycles();
508 
509 		if (ret)
510 			goto out;
511 
512 		cycles += end - start;
513 	}
514 
515 out:
516 	if (ret == 0)
517 		printk("1 operation in %lu cycles (%d bytes)\n",
518 		       (cycles + 4) / 8, blen);
519 
520 	return ret;
521 }
522 
523 static void test_aead_speed(const char *algo, int enc, unsigned int secs,
524 			    struct aead_speed_template *template,
525 			    unsigned int tcount, u8 authsize,
526 			    unsigned int aad_size, u8 *keysize)
527 {
528 	unsigned int i, j;
529 	struct crypto_aead *tfm;
530 	int ret = -ENOMEM;
531 	const char *key;
532 	struct aead_request *req;
533 	struct scatterlist *sg;
534 	struct scatterlist *sgout;
535 	const char *e;
536 	void *assoc;
537 	char *iv;
538 	char *xbuf[XBUFSIZE];
539 	char *xoutbuf[XBUFSIZE];
540 	char *axbuf[XBUFSIZE];
541 	unsigned int *b_size;
542 	unsigned int iv_len;
543 	struct crypto_wait wait;
544 
545 	iv = kzalloc(MAX_IVLEN, GFP_KERNEL);
546 	if (!iv)
547 		return;
548 
549 	if (aad_size >= PAGE_SIZE) {
550 		pr_err("associate data length (%u) too big\n", aad_size);
551 		goto out_noxbuf;
552 	}
553 
554 	if (enc == ENCRYPT)
555 		e = "encryption";
556 	else
557 		e = "decryption";
558 
559 	if (testmgr_alloc_buf(xbuf))
560 		goto out_noxbuf;
561 	if (testmgr_alloc_buf(axbuf))
562 		goto out_noaxbuf;
563 	if (testmgr_alloc_buf(xoutbuf))
564 		goto out_nooutbuf;
565 
566 	sg = kmalloc(sizeof(*sg) * 9 * 2, GFP_KERNEL);
567 	if (!sg)
568 		goto out_nosg;
569 	sgout = &sg[9];
570 
571 	tfm = crypto_alloc_aead(algo, 0, 0);
572 
573 	if (IS_ERR(tfm)) {
574 		pr_err("alg: aead: Failed to load transform for %s: %ld\n", algo,
575 		       PTR_ERR(tfm));
576 		goto out_notfm;
577 	}
578 
579 	crypto_init_wait(&wait);
580 	printk(KERN_INFO "\ntesting speed of %s (%s) %s\n", algo,
581 			get_driver_name(crypto_aead, tfm), e);
582 
583 	req = aead_request_alloc(tfm, GFP_KERNEL);
584 	if (!req) {
585 		pr_err("alg: aead: Failed to allocate request for %s\n",
586 		       algo);
587 		goto out_noreq;
588 	}
589 
590 	aead_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
591 				  crypto_req_done, &wait);
592 
593 	i = 0;
594 	do {
595 		b_size = aead_sizes;
596 		do {
597 			assoc = axbuf[0];
598 			memset(assoc, 0xff, aad_size);
599 
600 			if ((*keysize + *b_size) > TVMEMSIZE * PAGE_SIZE) {
601 				pr_err("template (%u) too big for tvmem (%lu)\n",
602 				       *keysize + *b_size,
603 					TVMEMSIZE * PAGE_SIZE);
604 				goto out;
605 			}
606 
607 			key = tvmem[0];
608 			for (j = 0; j < tcount; j++) {
609 				if (template[j].klen == *keysize) {
610 					key = template[j].key;
611 					break;
612 				}
613 			}
614 			ret = crypto_aead_setkey(tfm, key, *keysize);
615 			ret = crypto_aead_setauthsize(tfm, authsize);
616 
617 			iv_len = crypto_aead_ivsize(tfm);
618 			if (iv_len)
619 				memset(iv, 0xff, iv_len);
620 
621 			crypto_aead_clear_flags(tfm, ~0);
622 			printk(KERN_INFO "test %u (%d bit key, %d byte blocks): ",
623 					i, *keysize * 8, *b_size);
624 
625 
626 			memset(tvmem[0], 0xff, PAGE_SIZE);
627 
628 			if (ret) {
629 				pr_err("setkey() failed flags=%x\n",
630 						crypto_aead_get_flags(tfm));
631 				goto out;
632 			}
633 
634 			sg_init_aead(sg, xbuf, *b_size + (enc ? 0 : authsize),
635 				     assoc, aad_size);
636 
637 			sg_init_aead(sgout, xoutbuf,
638 				     *b_size + (enc ? authsize : 0), assoc,
639 				     aad_size);
640 
641 			aead_request_set_ad(req, aad_size);
642 
643 			if (!enc) {
644 
645 				/*
646 				 * For decryption we need a proper auth so
647 				 * we do the encryption path once with buffers
648 				 * reversed (input <-> output) to calculate it
649 				 */
650 				aead_request_set_crypt(req, sgout, sg,
651 						       *b_size, iv);
652 				ret = do_one_aead_op(req,
653 						     crypto_aead_encrypt(req));
654 
655 				if (ret) {
656 					pr_err("calculating auth failed failed (%d)\n",
657 					       ret);
658 					break;
659 				}
660 			}
661 
662 			aead_request_set_crypt(req, sg, sgout,
663 					       *b_size + (enc ? 0 : authsize),
664 					       iv);
665 
666 			if (secs) {
667 				ret = test_aead_jiffies(req, enc, *b_size,
668 							secs);
669 				cond_resched();
670 			} else {
671 				ret = test_aead_cycles(req, enc, *b_size);
672 			}
673 
674 			if (ret) {
675 				pr_err("%s() failed return code=%d\n", e, ret);
676 				break;
677 			}
678 			b_size++;
679 			i++;
680 		} while (*b_size);
681 		keysize++;
682 	} while (*keysize);
683 
684 out:
685 	aead_request_free(req);
686 out_noreq:
687 	crypto_free_aead(tfm);
688 out_notfm:
689 	kfree(sg);
690 out_nosg:
691 	testmgr_free_buf(xoutbuf);
692 out_nooutbuf:
693 	testmgr_free_buf(axbuf);
694 out_noaxbuf:
695 	testmgr_free_buf(xbuf);
696 out_noxbuf:
697 	kfree(iv);
698 }
699 
700 static void test_hash_sg_init(struct scatterlist *sg)
701 {
702 	int i;
703 
704 	sg_init_table(sg, TVMEMSIZE);
705 	for (i = 0; i < TVMEMSIZE; i++) {
706 		sg_set_buf(sg + i, tvmem[i], PAGE_SIZE);
707 		memset(tvmem[i], 0xff, PAGE_SIZE);
708 	}
709 }
710 
711 static inline int do_one_ahash_op(struct ahash_request *req, int ret)
712 {
713 	struct crypto_wait *wait = req->base.data;
714 
715 	return crypto_wait_req(ret, wait);
716 }
717 
718 struct test_mb_ahash_data {
719 	struct scatterlist sg[XBUFSIZE];
720 	char result[64];
721 	struct ahash_request *req;
722 	struct crypto_wait wait;
723 	char *xbuf[XBUFSIZE];
724 };
725 
726 static inline int do_mult_ahash_op(struct test_mb_ahash_data *data, u32 num_mb,
727 				   int *rc)
728 {
729 	int i, err = 0;
730 
731 	/* Fire up a bunch of concurrent requests */
732 	for (i = 0; i < num_mb; i++)
733 		rc[i] = crypto_ahash_digest(data[i].req);
734 
735 	/* Wait for all requests to finish */
736 	for (i = 0; i < num_mb; i++) {
737 		rc[i] = crypto_wait_req(rc[i], &data[i].wait);
738 
739 		if (rc[i]) {
740 			pr_info("concurrent request %d error %d\n", i, rc[i]);
741 			err = rc[i];
742 		}
743 	}
744 
745 	return err;
746 }
747 
748 static int test_mb_ahash_jiffies(struct test_mb_ahash_data *data, int blen,
749 				 int secs, u32 num_mb)
750 {
751 	unsigned long start, end;
752 	int bcount;
753 	int ret = 0;
754 	int *rc;
755 
756 	rc = kcalloc(num_mb, sizeof(*rc), GFP_KERNEL);
757 	if (!rc)
758 		return -ENOMEM;
759 
760 	for (start = jiffies, end = start + secs * HZ, bcount = 0;
761 	     time_before(jiffies, end); bcount++) {
762 		ret = do_mult_ahash_op(data, num_mb, rc);
763 		if (ret)
764 			goto out;
765 	}
766 
767 	pr_cont("%d operations in %d seconds (%ld bytes)\n",
768 		bcount * num_mb, secs, (long)bcount * blen * num_mb);
769 
770 out:
771 	kfree(rc);
772 	return ret;
773 }
774 
775 static int test_mb_ahash_cycles(struct test_mb_ahash_data *data, int blen,
776 				u32 num_mb)
777 {
778 	unsigned long cycles = 0;
779 	int ret = 0;
780 	int i;
781 	int *rc;
782 
783 	rc = kcalloc(num_mb, sizeof(*rc), GFP_KERNEL);
784 	if (!rc)
785 		return -ENOMEM;
786 
787 	/* Warm-up run. */
788 	for (i = 0; i < 4; i++) {
789 		ret = do_mult_ahash_op(data, num_mb, rc);
790 		if (ret)
791 			goto out;
792 	}
793 
794 	/* The real thing. */
795 	for (i = 0; i < 8; i++) {
796 		cycles_t start, end;
797 
798 		start = get_cycles();
799 		ret = do_mult_ahash_op(data, num_mb, rc);
800 		end = get_cycles();
801 
802 		if (ret)
803 			goto out;
804 
805 		cycles += end - start;
806 	}
807 
808 	pr_cont("1 operation in %lu cycles (%d bytes)\n",
809 		(cycles + 4) / (8 * num_mb), blen);
810 
811 out:
812 	kfree(rc);
813 	return ret;
814 }
815 
816 static void test_mb_ahash_speed(const char *algo, unsigned int secs,
817 				struct hash_speed *speed, u32 num_mb)
818 {
819 	struct test_mb_ahash_data *data;
820 	struct crypto_ahash *tfm;
821 	unsigned int i, j, k;
822 	int ret;
823 
824 	data = kcalloc(num_mb, sizeof(*data), GFP_KERNEL);
825 	if (!data)
826 		return;
827 
828 	tfm = crypto_alloc_ahash(algo, 0, 0);
829 	if (IS_ERR(tfm)) {
830 		pr_err("failed to load transform for %s: %ld\n",
831 			algo, PTR_ERR(tfm));
832 		goto free_data;
833 	}
834 
835 	for (i = 0; i < num_mb; ++i) {
836 		if (testmgr_alloc_buf(data[i].xbuf))
837 			goto out;
838 
839 		crypto_init_wait(&data[i].wait);
840 
841 		data[i].req = ahash_request_alloc(tfm, GFP_KERNEL);
842 		if (!data[i].req) {
843 			pr_err("alg: hash: Failed to allocate request for %s\n",
844 			       algo);
845 			goto out;
846 		}
847 
848 		ahash_request_set_callback(data[i].req, 0, crypto_req_done,
849 					   &data[i].wait);
850 
851 		sg_init_table(data[i].sg, XBUFSIZE);
852 		for (j = 0; j < XBUFSIZE; j++) {
853 			sg_set_buf(data[i].sg + j, data[i].xbuf[j], PAGE_SIZE);
854 			memset(data[i].xbuf[j], 0xff, PAGE_SIZE);
855 		}
856 	}
857 
858 	pr_info("\ntesting speed of multibuffer %s (%s)\n", algo,
859 		get_driver_name(crypto_ahash, tfm));
860 
861 	for (i = 0; speed[i].blen != 0; i++) {
862 		/* For some reason this only tests digests. */
863 		if (speed[i].blen != speed[i].plen)
864 			continue;
865 
866 		if (speed[i].blen > XBUFSIZE * PAGE_SIZE) {
867 			pr_err("template (%u) too big for tvmem (%lu)\n",
868 			       speed[i].blen, XBUFSIZE * PAGE_SIZE);
869 			goto out;
870 		}
871 
872 		if (speed[i].klen)
873 			crypto_ahash_setkey(tfm, tvmem[0], speed[i].klen);
874 
875 		for (k = 0; k < num_mb; k++)
876 			ahash_request_set_crypt(data[k].req, data[k].sg,
877 						data[k].result, speed[i].blen);
878 
879 		pr_info("test%3u "
880 			"(%5u byte blocks,%5u bytes per update,%4u updates): ",
881 			i, speed[i].blen, speed[i].plen,
882 			speed[i].blen / speed[i].plen);
883 
884 		if (secs) {
885 			ret = test_mb_ahash_jiffies(data, speed[i].blen, secs,
886 						    num_mb);
887 			cond_resched();
888 		} else {
889 			ret = test_mb_ahash_cycles(data, speed[i].blen, num_mb);
890 		}
891 
892 
893 		if (ret) {
894 			pr_err("At least one hashing failed ret=%d\n", ret);
895 			break;
896 		}
897 	}
898 
899 out:
900 	for (k = 0; k < num_mb; ++k)
901 		ahash_request_free(data[k].req);
902 
903 	for (k = 0; k < num_mb; ++k)
904 		testmgr_free_buf(data[k].xbuf);
905 
906 	crypto_free_ahash(tfm);
907 
908 free_data:
909 	kfree(data);
910 }
911 
912 static int test_ahash_jiffies_digest(struct ahash_request *req, int blen,
913 				     char *out, int secs)
914 {
915 	unsigned long start, end;
916 	int bcount;
917 	int ret;
918 
919 	for (start = jiffies, end = start + secs * HZ, bcount = 0;
920 	     time_before(jiffies, end); bcount++) {
921 		ret = do_one_ahash_op(req, crypto_ahash_digest(req));
922 		if (ret)
923 			return ret;
924 	}
925 
926 	printk("%6u opers/sec, %9lu bytes/sec\n",
927 	       bcount / secs, ((long)bcount * blen) / secs);
928 
929 	return 0;
930 }
931 
932 static int test_ahash_jiffies(struct ahash_request *req, int blen,
933 			      int plen, char *out, int secs)
934 {
935 	unsigned long start, end;
936 	int bcount, pcount;
937 	int ret;
938 
939 	if (plen == blen)
940 		return test_ahash_jiffies_digest(req, blen, out, secs);
941 
942 	for (start = jiffies, end = start + secs * HZ, bcount = 0;
943 	     time_before(jiffies, end); bcount++) {
944 		ret = do_one_ahash_op(req, crypto_ahash_init(req));
945 		if (ret)
946 			return ret;
947 		for (pcount = 0; pcount < blen; pcount += plen) {
948 			ret = do_one_ahash_op(req, crypto_ahash_update(req));
949 			if (ret)
950 				return ret;
951 		}
952 		/* we assume there is enough space in 'out' for the result */
953 		ret = do_one_ahash_op(req, crypto_ahash_final(req));
954 		if (ret)
955 			return ret;
956 	}
957 
958 	pr_cont("%6u opers/sec, %9lu bytes/sec\n",
959 		bcount / secs, ((long)bcount * blen) / secs);
960 
961 	return 0;
962 }
963 
964 static int test_ahash_cycles_digest(struct ahash_request *req, int blen,
965 				    char *out)
966 {
967 	unsigned long cycles = 0;
968 	int ret, i;
969 
970 	/* Warm-up run. */
971 	for (i = 0; i < 4; i++) {
972 		ret = do_one_ahash_op(req, crypto_ahash_digest(req));
973 		if (ret)
974 			goto out;
975 	}
976 
977 	/* The real thing. */
978 	for (i = 0; i < 8; i++) {
979 		cycles_t start, end;
980 
981 		start = get_cycles();
982 
983 		ret = do_one_ahash_op(req, crypto_ahash_digest(req));
984 		if (ret)
985 			goto out;
986 
987 		end = get_cycles();
988 
989 		cycles += end - start;
990 	}
991 
992 out:
993 	if (ret)
994 		return ret;
995 
996 	pr_cont("%6lu cycles/operation, %4lu cycles/byte\n",
997 		cycles / 8, cycles / (8 * blen));
998 
999 	return 0;
1000 }
1001 
1002 static int test_ahash_cycles(struct ahash_request *req, int blen,
1003 			     int plen, char *out)
1004 {
1005 	unsigned long cycles = 0;
1006 	int i, pcount, ret;
1007 
1008 	if (plen == blen)
1009 		return test_ahash_cycles_digest(req, blen, out);
1010 
1011 	/* Warm-up run. */
1012 	for (i = 0; i < 4; i++) {
1013 		ret = do_one_ahash_op(req, crypto_ahash_init(req));
1014 		if (ret)
1015 			goto out;
1016 		for (pcount = 0; pcount < blen; pcount += plen) {
1017 			ret = do_one_ahash_op(req, crypto_ahash_update(req));
1018 			if (ret)
1019 				goto out;
1020 		}
1021 		ret = do_one_ahash_op(req, crypto_ahash_final(req));
1022 		if (ret)
1023 			goto out;
1024 	}
1025 
1026 	/* The real thing. */
1027 	for (i = 0; i < 8; i++) {
1028 		cycles_t start, end;
1029 
1030 		start = get_cycles();
1031 
1032 		ret = do_one_ahash_op(req, crypto_ahash_init(req));
1033 		if (ret)
1034 			goto out;
1035 		for (pcount = 0; pcount < blen; pcount += plen) {
1036 			ret = do_one_ahash_op(req, crypto_ahash_update(req));
1037 			if (ret)
1038 				goto out;
1039 		}
1040 		ret = do_one_ahash_op(req, crypto_ahash_final(req));
1041 		if (ret)
1042 			goto out;
1043 
1044 		end = get_cycles();
1045 
1046 		cycles += end - start;
1047 	}
1048 
1049 out:
1050 	if (ret)
1051 		return ret;
1052 
1053 	pr_cont("%6lu cycles/operation, %4lu cycles/byte\n",
1054 		cycles / 8, cycles / (8 * blen));
1055 
1056 	return 0;
1057 }
1058 
1059 static void test_ahash_speed_common(const char *algo, unsigned int secs,
1060 				    struct hash_speed *speed, unsigned mask)
1061 {
1062 	struct scatterlist sg[TVMEMSIZE];
1063 	struct crypto_wait wait;
1064 	struct ahash_request *req;
1065 	struct crypto_ahash *tfm;
1066 	char *output;
1067 	int i, ret;
1068 
1069 	tfm = crypto_alloc_ahash(algo, 0, mask);
1070 	if (IS_ERR(tfm)) {
1071 		pr_err("failed to load transform for %s: %ld\n",
1072 		       algo, PTR_ERR(tfm));
1073 		return;
1074 	}
1075 
1076 	printk(KERN_INFO "\ntesting speed of async %s (%s)\n", algo,
1077 			get_driver_name(crypto_ahash, tfm));
1078 
1079 	if (crypto_ahash_digestsize(tfm) > MAX_DIGEST_SIZE) {
1080 		pr_err("digestsize(%u) > %d\n", crypto_ahash_digestsize(tfm),
1081 		       MAX_DIGEST_SIZE);
1082 		goto out;
1083 	}
1084 
1085 	test_hash_sg_init(sg);
1086 	req = ahash_request_alloc(tfm, GFP_KERNEL);
1087 	if (!req) {
1088 		pr_err("ahash request allocation failure\n");
1089 		goto out;
1090 	}
1091 
1092 	crypto_init_wait(&wait);
1093 	ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
1094 				   crypto_req_done, &wait);
1095 
1096 	output = kmalloc(MAX_DIGEST_SIZE, GFP_KERNEL);
1097 	if (!output)
1098 		goto out_nomem;
1099 
1100 	for (i = 0; speed[i].blen != 0; i++) {
1101 		if (speed[i].blen > TVMEMSIZE * PAGE_SIZE) {
1102 			pr_err("template (%u) too big for tvmem (%lu)\n",
1103 			       speed[i].blen, TVMEMSIZE * PAGE_SIZE);
1104 			break;
1105 		}
1106 
1107 		if (speed[i].klen)
1108 			crypto_ahash_setkey(tfm, tvmem[0], speed[i].klen);
1109 
1110 		pr_info("test%3u "
1111 			"(%5u byte blocks,%5u bytes per update,%4u updates): ",
1112 			i, speed[i].blen, speed[i].plen, speed[i].blen / speed[i].plen);
1113 
1114 		ahash_request_set_crypt(req, sg, output, speed[i].plen);
1115 
1116 		if (secs) {
1117 			ret = test_ahash_jiffies(req, speed[i].blen,
1118 						 speed[i].plen, output, secs);
1119 			cond_resched();
1120 		} else {
1121 			ret = test_ahash_cycles(req, speed[i].blen,
1122 						speed[i].plen, output);
1123 		}
1124 
1125 		if (ret) {
1126 			pr_err("hashing failed ret=%d\n", ret);
1127 			break;
1128 		}
1129 	}
1130 
1131 	kfree(output);
1132 
1133 out_nomem:
1134 	ahash_request_free(req);
1135 
1136 out:
1137 	crypto_free_ahash(tfm);
1138 }
1139 
1140 static void test_ahash_speed(const char *algo, unsigned int secs,
1141 			     struct hash_speed *speed)
1142 {
1143 	return test_ahash_speed_common(algo, secs, speed, 0);
1144 }
1145 
1146 static void test_hash_speed(const char *algo, unsigned int secs,
1147 			    struct hash_speed *speed)
1148 {
1149 	return test_ahash_speed_common(algo, secs, speed, CRYPTO_ALG_ASYNC);
1150 }
1151 
1152 struct test_mb_skcipher_data {
1153 	struct scatterlist sg[XBUFSIZE];
1154 	struct skcipher_request *req;
1155 	struct crypto_wait wait;
1156 	char *xbuf[XBUFSIZE];
1157 };
1158 
1159 static int do_mult_acipher_op(struct test_mb_skcipher_data *data, int enc,
1160 				u32 num_mb, int *rc)
1161 {
1162 	int i, err = 0;
1163 
1164 	/* Fire up a bunch of concurrent requests */
1165 	for (i = 0; i < num_mb; i++) {
1166 		if (enc == ENCRYPT)
1167 			rc[i] = crypto_skcipher_encrypt(data[i].req);
1168 		else
1169 			rc[i] = crypto_skcipher_decrypt(data[i].req);
1170 	}
1171 
1172 	/* Wait for all requests to finish */
1173 	for (i = 0; i < num_mb; i++) {
1174 		rc[i] = crypto_wait_req(rc[i], &data[i].wait);
1175 
1176 		if (rc[i]) {
1177 			pr_info("concurrent request %d error %d\n", i, rc[i]);
1178 			err = rc[i];
1179 		}
1180 	}
1181 
1182 	return err;
1183 }
1184 
1185 static int test_mb_acipher_jiffies(struct test_mb_skcipher_data *data, int enc,
1186 				int blen, int secs, u32 num_mb)
1187 {
1188 	unsigned long start, end;
1189 	int bcount;
1190 	int ret = 0;
1191 	int *rc;
1192 
1193 	rc = kcalloc(num_mb, sizeof(*rc), GFP_KERNEL);
1194 	if (!rc)
1195 		return -ENOMEM;
1196 
1197 	for (start = jiffies, end = start + secs * HZ, bcount = 0;
1198 	     time_before(jiffies, end); bcount++) {
1199 		ret = do_mult_acipher_op(data, enc, num_mb, rc);
1200 		if (ret)
1201 			goto out;
1202 	}
1203 
1204 	pr_cont("%d operations in %d seconds (%ld bytes)\n",
1205 		bcount * num_mb, secs, (long)bcount * blen * num_mb);
1206 
1207 out:
1208 	kfree(rc);
1209 	return ret;
1210 }
1211 
1212 static int test_mb_acipher_cycles(struct test_mb_skcipher_data *data, int enc,
1213 			       int blen, u32 num_mb)
1214 {
1215 	unsigned long cycles = 0;
1216 	int ret = 0;
1217 	int i;
1218 	int *rc;
1219 
1220 	rc = kcalloc(num_mb, sizeof(*rc), GFP_KERNEL);
1221 	if (!rc)
1222 		return -ENOMEM;
1223 
1224 	/* Warm-up run. */
1225 	for (i = 0; i < 4; i++) {
1226 		ret = do_mult_acipher_op(data, enc, num_mb, rc);
1227 		if (ret)
1228 			goto out;
1229 	}
1230 
1231 	/* The real thing. */
1232 	for (i = 0; i < 8; i++) {
1233 		cycles_t start, end;
1234 
1235 		start = get_cycles();
1236 		ret = do_mult_acipher_op(data, enc, num_mb, rc);
1237 		end = get_cycles();
1238 
1239 		if (ret)
1240 			goto out;
1241 
1242 		cycles += end - start;
1243 	}
1244 
1245 	pr_cont("1 operation in %lu cycles (%d bytes)\n",
1246 		(cycles + 4) / (8 * num_mb), blen);
1247 
1248 out:
1249 	kfree(rc);
1250 	return ret;
1251 }
1252 
1253 static void test_mb_skcipher_speed(const char *algo, int enc, int secs,
1254 				   struct cipher_speed_template *template,
1255 				   unsigned int tcount, u8 *keysize, u32 num_mb)
1256 {
1257 	struct test_mb_skcipher_data *data;
1258 	struct crypto_skcipher *tfm;
1259 	unsigned int i, j, iv_len;
1260 	const char *key;
1261 	const char *e;
1262 	u32 *b_size;
1263 	char iv[128];
1264 	int ret;
1265 
1266 	if (enc == ENCRYPT)
1267 		e = "encryption";
1268 	else
1269 		e = "decryption";
1270 
1271 	data = kcalloc(num_mb, sizeof(*data), GFP_KERNEL);
1272 	if (!data)
1273 		return;
1274 
1275 	tfm = crypto_alloc_skcipher(algo, 0, 0);
1276 	if (IS_ERR(tfm)) {
1277 		pr_err("failed to load transform for %s: %ld\n",
1278 			algo, PTR_ERR(tfm));
1279 		goto out_free_data;
1280 	}
1281 
1282 	for (i = 0; i < num_mb; ++i)
1283 		if (testmgr_alloc_buf(data[i].xbuf)) {
1284 			while (i--)
1285 				testmgr_free_buf(data[i].xbuf);
1286 			goto out_free_tfm;
1287 		}
1288 
1289 
1290 	for (i = 0; i < num_mb; ++i)
1291 		if (testmgr_alloc_buf(data[i].xbuf)) {
1292 			while (i--)
1293 				testmgr_free_buf(data[i].xbuf);
1294 			goto out_free_tfm;
1295 		}
1296 
1297 
1298 	for (i = 0; i < num_mb; ++i) {
1299 		data[i].req = skcipher_request_alloc(tfm, GFP_KERNEL);
1300 		if (!data[i].req) {
1301 			pr_err("alg: skcipher: Failed to allocate request for %s\n",
1302 			       algo);
1303 			while (i--)
1304 				skcipher_request_free(data[i].req);
1305 			goto out_free_xbuf;
1306 		}
1307 	}
1308 
1309 	for (i = 0; i < num_mb; ++i) {
1310 		skcipher_request_set_callback(data[i].req,
1311 					      CRYPTO_TFM_REQ_MAY_BACKLOG,
1312 					      crypto_req_done, &data[i].wait);
1313 		crypto_init_wait(&data[i].wait);
1314 	}
1315 
1316 	pr_info("\ntesting speed of multibuffer %s (%s) %s\n", algo,
1317 		get_driver_name(crypto_skcipher, tfm), e);
1318 
1319 	i = 0;
1320 	do {
1321 		b_size = block_sizes;
1322 		do {
1323 			if (*b_size > XBUFSIZE * PAGE_SIZE) {
1324 				pr_err("template (%u) too big for buffer (%lu)\n",
1325 				       *b_size, XBUFSIZE * PAGE_SIZE);
1326 				goto out;
1327 			}
1328 
1329 			pr_info("test %u (%d bit key, %d byte blocks): ", i,
1330 				*keysize * 8, *b_size);
1331 
1332 			/* Set up tfm global state, i.e. the key */
1333 
1334 			memset(tvmem[0], 0xff, PAGE_SIZE);
1335 			key = tvmem[0];
1336 			for (j = 0; j < tcount; j++) {
1337 				if (template[j].klen == *keysize) {
1338 					key = template[j].key;
1339 					break;
1340 				}
1341 			}
1342 
1343 			crypto_skcipher_clear_flags(tfm, ~0);
1344 
1345 			ret = crypto_skcipher_setkey(tfm, key, *keysize);
1346 			if (ret) {
1347 				pr_err("setkey() failed flags=%x\n",
1348 				       crypto_skcipher_get_flags(tfm));
1349 				goto out;
1350 			}
1351 
1352 			iv_len = crypto_skcipher_ivsize(tfm);
1353 			if (iv_len)
1354 				memset(&iv, 0xff, iv_len);
1355 
1356 			/* Now setup per request stuff, i.e. buffers */
1357 
1358 			for (j = 0; j < num_mb; ++j) {
1359 				struct test_mb_skcipher_data *cur = &data[j];
1360 				unsigned int k = *b_size;
1361 				unsigned int pages = DIV_ROUND_UP(k, PAGE_SIZE);
1362 				unsigned int p = 0;
1363 
1364 				sg_init_table(cur->sg, pages);
1365 
1366 				while (k > PAGE_SIZE) {
1367 					sg_set_buf(cur->sg + p, cur->xbuf[p],
1368 						   PAGE_SIZE);
1369 					memset(cur->xbuf[p], 0xff, PAGE_SIZE);
1370 					p++;
1371 					k -= PAGE_SIZE;
1372 				}
1373 
1374 				sg_set_buf(cur->sg + p, cur->xbuf[p], k);
1375 				memset(cur->xbuf[p], 0xff, k);
1376 
1377 				skcipher_request_set_crypt(cur->req, cur->sg,
1378 							   cur->sg, *b_size,
1379 							   iv);
1380 			}
1381 
1382 			if (secs) {
1383 				ret = test_mb_acipher_jiffies(data, enc,
1384 							      *b_size, secs,
1385 							      num_mb);
1386 				cond_resched();
1387 			} else {
1388 				ret = test_mb_acipher_cycles(data, enc,
1389 							     *b_size, num_mb);
1390 			}
1391 
1392 			if (ret) {
1393 				pr_err("%s() failed flags=%x\n", e,
1394 				       crypto_skcipher_get_flags(tfm));
1395 				break;
1396 			}
1397 			b_size++;
1398 			i++;
1399 		} while (*b_size);
1400 		keysize++;
1401 	} while (*keysize);
1402 
1403 out:
1404 	for (i = 0; i < num_mb; ++i)
1405 		skcipher_request_free(data[i].req);
1406 out_free_xbuf:
1407 	for (i = 0; i < num_mb; ++i)
1408 		testmgr_free_buf(data[i].xbuf);
1409 out_free_tfm:
1410 	crypto_free_skcipher(tfm);
1411 out_free_data:
1412 	kfree(data);
1413 }
1414 
1415 static inline int do_one_acipher_op(struct skcipher_request *req, int ret)
1416 {
1417 	struct crypto_wait *wait = req->base.data;
1418 
1419 	return crypto_wait_req(ret, wait);
1420 }
1421 
1422 static int test_acipher_jiffies(struct skcipher_request *req, int enc,
1423 				int blen, int secs)
1424 {
1425 	unsigned long start, end;
1426 	int bcount;
1427 	int ret;
1428 
1429 	for (start = jiffies, end = start + secs * HZ, bcount = 0;
1430 	     time_before(jiffies, end); bcount++) {
1431 		if (enc)
1432 			ret = do_one_acipher_op(req,
1433 						crypto_skcipher_encrypt(req));
1434 		else
1435 			ret = do_one_acipher_op(req,
1436 						crypto_skcipher_decrypt(req));
1437 
1438 		if (ret)
1439 			return ret;
1440 	}
1441 
1442 	pr_cont("%d operations in %d seconds (%ld bytes)\n",
1443 		bcount, secs, (long)bcount * blen);
1444 	return 0;
1445 }
1446 
1447 static int test_acipher_cycles(struct skcipher_request *req, int enc,
1448 			       int blen)
1449 {
1450 	unsigned long cycles = 0;
1451 	int ret = 0;
1452 	int i;
1453 
1454 	/* Warm-up run. */
1455 	for (i = 0; i < 4; i++) {
1456 		if (enc)
1457 			ret = do_one_acipher_op(req,
1458 						crypto_skcipher_encrypt(req));
1459 		else
1460 			ret = do_one_acipher_op(req,
1461 						crypto_skcipher_decrypt(req));
1462 
1463 		if (ret)
1464 			goto out;
1465 	}
1466 
1467 	/* The real thing. */
1468 	for (i = 0; i < 8; i++) {
1469 		cycles_t start, end;
1470 
1471 		start = get_cycles();
1472 		if (enc)
1473 			ret = do_one_acipher_op(req,
1474 						crypto_skcipher_encrypt(req));
1475 		else
1476 			ret = do_one_acipher_op(req,
1477 						crypto_skcipher_decrypt(req));
1478 		end = get_cycles();
1479 
1480 		if (ret)
1481 			goto out;
1482 
1483 		cycles += end - start;
1484 	}
1485 
1486 out:
1487 	if (ret == 0)
1488 		pr_cont("1 operation in %lu cycles (%d bytes)\n",
1489 			(cycles + 4) / 8, blen);
1490 
1491 	return ret;
1492 }
1493 
1494 static void test_skcipher_speed(const char *algo, int enc, unsigned int secs,
1495 				struct cipher_speed_template *template,
1496 				unsigned int tcount, u8 *keysize, bool async)
1497 {
1498 	unsigned int ret, i, j, k, iv_len;
1499 	struct crypto_wait wait;
1500 	const char *key;
1501 	char iv[128];
1502 	struct skcipher_request *req;
1503 	struct crypto_skcipher *tfm;
1504 	const char *e;
1505 	u32 *b_size;
1506 
1507 	if (enc == ENCRYPT)
1508 		e = "encryption";
1509 	else
1510 		e = "decryption";
1511 
1512 	crypto_init_wait(&wait);
1513 
1514 	tfm = crypto_alloc_skcipher(algo, 0, async ? 0 : CRYPTO_ALG_ASYNC);
1515 
1516 	if (IS_ERR(tfm)) {
1517 		pr_err("failed to load transform for %s: %ld\n", algo,
1518 		       PTR_ERR(tfm));
1519 		return;
1520 	}
1521 
1522 	pr_info("\ntesting speed of async %s (%s) %s\n", algo,
1523 			get_driver_name(crypto_skcipher, tfm), e);
1524 
1525 	req = skcipher_request_alloc(tfm, GFP_KERNEL);
1526 	if (!req) {
1527 		pr_err("tcrypt: skcipher: Failed to allocate request for %s\n",
1528 		       algo);
1529 		goto out;
1530 	}
1531 
1532 	skcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
1533 				      crypto_req_done, &wait);
1534 
1535 	i = 0;
1536 	do {
1537 		b_size = block_sizes;
1538 
1539 		do {
1540 			struct scatterlist sg[TVMEMSIZE];
1541 
1542 			if ((*keysize + *b_size) > TVMEMSIZE * PAGE_SIZE) {
1543 				pr_err("template (%u) too big for "
1544 				       "tvmem (%lu)\n", *keysize + *b_size,
1545 				       TVMEMSIZE * PAGE_SIZE);
1546 				goto out_free_req;
1547 			}
1548 
1549 			pr_info("test %u (%d bit key, %d byte blocks): ", i,
1550 				*keysize * 8, *b_size);
1551 
1552 			memset(tvmem[0], 0xff, PAGE_SIZE);
1553 
1554 			/* set key, plain text and IV */
1555 			key = tvmem[0];
1556 			for (j = 0; j < tcount; j++) {
1557 				if (template[j].klen == *keysize) {
1558 					key = template[j].key;
1559 					break;
1560 				}
1561 			}
1562 
1563 			crypto_skcipher_clear_flags(tfm, ~0);
1564 
1565 			ret = crypto_skcipher_setkey(tfm, key, *keysize);
1566 			if (ret) {
1567 				pr_err("setkey() failed flags=%x\n",
1568 					crypto_skcipher_get_flags(tfm));
1569 				goto out_free_req;
1570 			}
1571 
1572 			k = *keysize + *b_size;
1573 			sg_init_table(sg, DIV_ROUND_UP(k, PAGE_SIZE));
1574 
1575 			if (k > PAGE_SIZE) {
1576 				sg_set_buf(sg, tvmem[0] + *keysize,
1577 				   PAGE_SIZE - *keysize);
1578 				k -= PAGE_SIZE;
1579 				j = 1;
1580 				while (k > PAGE_SIZE) {
1581 					sg_set_buf(sg + j, tvmem[j], PAGE_SIZE);
1582 					memset(tvmem[j], 0xff, PAGE_SIZE);
1583 					j++;
1584 					k -= PAGE_SIZE;
1585 				}
1586 				sg_set_buf(sg + j, tvmem[j], k);
1587 				memset(tvmem[j], 0xff, k);
1588 			} else {
1589 				sg_set_buf(sg, tvmem[0] + *keysize, *b_size);
1590 			}
1591 
1592 			iv_len = crypto_skcipher_ivsize(tfm);
1593 			if (iv_len)
1594 				memset(&iv, 0xff, iv_len);
1595 
1596 			skcipher_request_set_crypt(req, sg, sg, *b_size, iv);
1597 
1598 			if (secs) {
1599 				ret = test_acipher_jiffies(req, enc,
1600 							   *b_size, secs);
1601 				cond_resched();
1602 			} else {
1603 				ret = test_acipher_cycles(req, enc,
1604 							  *b_size);
1605 			}
1606 
1607 			if (ret) {
1608 				pr_err("%s() failed flags=%x\n", e,
1609 				       crypto_skcipher_get_flags(tfm));
1610 				break;
1611 			}
1612 			b_size++;
1613 			i++;
1614 		} while (*b_size);
1615 		keysize++;
1616 	} while (*keysize);
1617 
1618 out_free_req:
1619 	skcipher_request_free(req);
1620 out:
1621 	crypto_free_skcipher(tfm);
1622 }
1623 
1624 static void test_acipher_speed(const char *algo, int enc, unsigned int secs,
1625 			       struct cipher_speed_template *template,
1626 			       unsigned int tcount, u8 *keysize)
1627 {
1628 	return test_skcipher_speed(algo, enc, secs, template, tcount, keysize,
1629 				   true);
1630 }
1631 
1632 static void test_cipher_speed(const char *algo, int enc, unsigned int secs,
1633 			      struct cipher_speed_template *template,
1634 			      unsigned int tcount, u8 *keysize)
1635 {
1636 	return test_skcipher_speed(algo, enc, secs, template, tcount, keysize,
1637 				   false);
1638 }
1639 
1640 static void test_available(void)
1641 {
1642 	char **name = check;
1643 
1644 	while (*name) {
1645 		printk("alg %s ", *name);
1646 		printk(crypto_has_alg(*name, 0, 0) ?
1647 		       "found\n" : "not found\n");
1648 		name++;
1649 	}
1650 }
1651 
1652 static inline int tcrypt_test(const char *alg)
1653 {
1654 	int ret;
1655 
1656 	pr_debug("testing %s\n", alg);
1657 
1658 	ret = alg_test(alg, alg, 0, 0);
1659 	/* non-fips algs return -EINVAL in fips mode */
1660 	if (fips_enabled && ret == -EINVAL)
1661 		ret = 0;
1662 	return ret;
1663 }
1664 
1665 static int do_test(const char *alg, u32 type, u32 mask, int m, u32 num_mb)
1666 {
1667 	int i;
1668 	int ret = 0;
1669 
1670 	switch (m) {
1671 	case 0:
1672 		if (alg) {
1673 			if (!crypto_has_alg(alg, type,
1674 					    mask ?: CRYPTO_ALG_TYPE_MASK))
1675 				ret = -ENOENT;
1676 			break;
1677 		}
1678 
1679 		for (i = 1; i < 200; i++)
1680 			ret += do_test(NULL, 0, 0, i, num_mb);
1681 		break;
1682 
1683 	case 1:
1684 		ret += tcrypt_test("md5");
1685 		break;
1686 
1687 	case 2:
1688 		ret += tcrypt_test("sha1");
1689 		break;
1690 
1691 	case 3:
1692 		ret += tcrypt_test("ecb(des)");
1693 		ret += tcrypt_test("cbc(des)");
1694 		ret += tcrypt_test("ctr(des)");
1695 		break;
1696 
1697 	case 4:
1698 		ret += tcrypt_test("ecb(des3_ede)");
1699 		ret += tcrypt_test("cbc(des3_ede)");
1700 		ret += tcrypt_test("ctr(des3_ede)");
1701 		break;
1702 
1703 	case 5:
1704 		ret += tcrypt_test("md4");
1705 		break;
1706 
1707 	case 6:
1708 		ret += tcrypt_test("sha256");
1709 		break;
1710 
1711 	case 7:
1712 		ret += tcrypt_test("ecb(blowfish)");
1713 		ret += tcrypt_test("cbc(blowfish)");
1714 		ret += tcrypt_test("ctr(blowfish)");
1715 		break;
1716 
1717 	case 8:
1718 		ret += tcrypt_test("ecb(twofish)");
1719 		ret += tcrypt_test("cbc(twofish)");
1720 		ret += tcrypt_test("ctr(twofish)");
1721 		ret += tcrypt_test("lrw(twofish)");
1722 		ret += tcrypt_test("xts(twofish)");
1723 		break;
1724 
1725 	case 9:
1726 		ret += tcrypt_test("ecb(serpent)");
1727 		ret += tcrypt_test("cbc(serpent)");
1728 		ret += tcrypt_test("ctr(serpent)");
1729 		ret += tcrypt_test("lrw(serpent)");
1730 		ret += tcrypt_test("xts(serpent)");
1731 		break;
1732 
1733 	case 10:
1734 		ret += tcrypt_test("ecb(aes)");
1735 		ret += tcrypt_test("cbc(aes)");
1736 		ret += tcrypt_test("lrw(aes)");
1737 		ret += tcrypt_test("xts(aes)");
1738 		ret += tcrypt_test("ctr(aes)");
1739 		ret += tcrypt_test("rfc3686(ctr(aes))");
1740 		ret += tcrypt_test("ofb(aes)");
1741 		ret += tcrypt_test("cfb(aes)");
1742 		break;
1743 
1744 	case 11:
1745 		ret += tcrypt_test("sha384");
1746 		break;
1747 
1748 	case 12:
1749 		ret += tcrypt_test("sha512");
1750 		break;
1751 
1752 	case 13:
1753 		ret += tcrypt_test("deflate");
1754 		break;
1755 
1756 	case 14:
1757 		ret += tcrypt_test("ecb(cast5)");
1758 		ret += tcrypt_test("cbc(cast5)");
1759 		ret += tcrypt_test("ctr(cast5)");
1760 		break;
1761 
1762 	case 15:
1763 		ret += tcrypt_test("ecb(cast6)");
1764 		ret += tcrypt_test("cbc(cast6)");
1765 		ret += tcrypt_test("ctr(cast6)");
1766 		ret += tcrypt_test("lrw(cast6)");
1767 		ret += tcrypt_test("xts(cast6)");
1768 		break;
1769 
1770 	case 16:
1771 		ret += tcrypt_test("ecb(arc4)");
1772 		break;
1773 
1774 	case 17:
1775 		ret += tcrypt_test("michael_mic");
1776 		break;
1777 
1778 	case 18:
1779 		ret += tcrypt_test("crc32c");
1780 		break;
1781 
1782 	case 19:
1783 		ret += tcrypt_test("ecb(tea)");
1784 		break;
1785 
1786 	case 20:
1787 		ret += tcrypt_test("ecb(xtea)");
1788 		break;
1789 
1790 	case 21:
1791 		ret += tcrypt_test("ecb(khazad)");
1792 		break;
1793 
1794 	case 22:
1795 		ret += tcrypt_test("wp512");
1796 		break;
1797 
1798 	case 23:
1799 		ret += tcrypt_test("wp384");
1800 		break;
1801 
1802 	case 24:
1803 		ret += tcrypt_test("wp256");
1804 		break;
1805 
1806 	case 25:
1807 		ret += tcrypt_test("ecb(tnepres)");
1808 		break;
1809 
1810 	case 26:
1811 		ret += tcrypt_test("ecb(anubis)");
1812 		ret += tcrypt_test("cbc(anubis)");
1813 		break;
1814 
1815 	case 27:
1816 		ret += tcrypt_test("tgr192");
1817 		break;
1818 
1819 	case 28:
1820 		ret += tcrypt_test("tgr160");
1821 		break;
1822 
1823 	case 29:
1824 		ret += tcrypt_test("tgr128");
1825 		break;
1826 
1827 	case 30:
1828 		ret += tcrypt_test("ecb(xeta)");
1829 		break;
1830 
1831 	case 31:
1832 		ret += tcrypt_test("pcbc(fcrypt)");
1833 		break;
1834 
1835 	case 32:
1836 		ret += tcrypt_test("ecb(camellia)");
1837 		ret += tcrypt_test("cbc(camellia)");
1838 		ret += tcrypt_test("ctr(camellia)");
1839 		ret += tcrypt_test("lrw(camellia)");
1840 		ret += tcrypt_test("xts(camellia)");
1841 		break;
1842 
1843 	case 33:
1844 		ret += tcrypt_test("sha224");
1845 		break;
1846 
1847 	case 34:
1848 		ret += tcrypt_test("salsa20");
1849 		break;
1850 
1851 	case 35:
1852 		ret += tcrypt_test("gcm(aes)");
1853 		break;
1854 
1855 	case 36:
1856 		ret += tcrypt_test("lzo");
1857 		break;
1858 
1859 	case 37:
1860 		ret += tcrypt_test("ccm(aes)");
1861 		break;
1862 
1863 	case 38:
1864 		ret += tcrypt_test("cts(cbc(aes))");
1865 		break;
1866 
1867         case 39:
1868 		ret += tcrypt_test("rmd128");
1869 		break;
1870 
1871         case 40:
1872 		ret += tcrypt_test("rmd160");
1873 		break;
1874 
1875 	case 41:
1876 		ret += tcrypt_test("rmd256");
1877 		break;
1878 
1879 	case 42:
1880 		ret += tcrypt_test("rmd320");
1881 		break;
1882 
1883 	case 43:
1884 		ret += tcrypt_test("ecb(seed)");
1885 		break;
1886 
1887 	case 45:
1888 		ret += tcrypt_test("rfc4309(ccm(aes))");
1889 		break;
1890 
1891 	case 46:
1892 		ret += tcrypt_test("ghash");
1893 		break;
1894 
1895 	case 47:
1896 		ret += tcrypt_test("crct10dif");
1897 		break;
1898 
1899 	case 48:
1900 		ret += tcrypt_test("sha3-224");
1901 		break;
1902 
1903 	case 49:
1904 		ret += tcrypt_test("sha3-256");
1905 		break;
1906 
1907 	case 50:
1908 		ret += tcrypt_test("sha3-384");
1909 		break;
1910 
1911 	case 51:
1912 		ret += tcrypt_test("sha3-512");
1913 		break;
1914 
1915 	case 52:
1916 		ret += tcrypt_test("sm3");
1917 		break;
1918 
1919 	case 53:
1920 		ret += tcrypt_test("streebog256");
1921 		break;
1922 
1923 	case 54:
1924 		ret += tcrypt_test("streebog512");
1925 		break;
1926 
1927 	case 100:
1928 		ret += tcrypt_test("hmac(md5)");
1929 		break;
1930 
1931 	case 101:
1932 		ret += tcrypt_test("hmac(sha1)");
1933 		break;
1934 
1935 	case 102:
1936 		ret += tcrypt_test("hmac(sha256)");
1937 		break;
1938 
1939 	case 103:
1940 		ret += tcrypt_test("hmac(sha384)");
1941 		break;
1942 
1943 	case 104:
1944 		ret += tcrypt_test("hmac(sha512)");
1945 		break;
1946 
1947 	case 105:
1948 		ret += tcrypt_test("hmac(sha224)");
1949 		break;
1950 
1951 	case 106:
1952 		ret += tcrypt_test("xcbc(aes)");
1953 		break;
1954 
1955 	case 107:
1956 		ret += tcrypt_test("hmac(rmd128)");
1957 		break;
1958 
1959 	case 108:
1960 		ret += tcrypt_test("hmac(rmd160)");
1961 		break;
1962 
1963 	case 109:
1964 		ret += tcrypt_test("vmac64(aes)");
1965 		break;
1966 
1967 	case 111:
1968 		ret += tcrypt_test("hmac(sha3-224)");
1969 		break;
1970 
1971 	case 112:
1972 		ret += tcrypt_test("hmac(sha3-256)");
1973 		break;
1974 
1975 	case 113:
1976 		ret += tcrypt_test("hmac(sha3-384)");
1977 		break;
1978 
1979 	case 114:
1980 		ret += tcrypt_test("hmac(sha3-512)");
1981 		break;
1982 
1983 	case 115:
1984 		ret += tcrypt_test("hmac(streebog256)");
1985 		break;
1986 
1987 	case 116:
1988 		ret += tcrypt_test("hmac(streebog512)");
1989 		break;
1990 
1991 	case 150:
1992 		ret += tcrypt_test("ansi_cprng");
1993 		break;
1994 
1995 	case 151:
1996 		ret += tcrypt_test("rfc4106(gcm(aes))");
1997 		break;
1998 
1999 	case 152:
2000 		ret += tcrypt_test("rfc4543(gcm(aes))");
2001 		break;
2002 
2003 	case 153:
2004 		ret += tcrypt_test("cmac(aes)");
2005 		break;
2006 
2007 	case 154:
2008 		ret += tcrypt_test("cmac(des3_ede)");
2009 		break;
2010 
2011 	case 155:
2012 		ret += tcrypt_test("authenc(hmac(sha1),cbc(aes))");
2013 		break;
2014 
2015 	case 156:
2016 		ret += tcrypt_test("authenc(hmac(md5),ecb(cipher_null))");
2017 		break;
2018 
2019 	case 157:
2020 		ret += tcrypt_test("authenc(hmac(sha1),ecb(cipher_null))");
2021 		break;
2022 	case 181:
2023 		ret += tcrypt_test("authenc(hmac(sha1),cbc(des))");
2024 		break;
2025 	case 182:
2026 		ret += tcrypt_test("authenc(hmac(sha1),cbc(des3_ede))");
2027 		break;
2028 	case 183:
2029 		ret += tcrypt_test("authenc(hmac(sha224),cbc(des))");
2030 		break;
2031 	case 184:
2032 		ret += tcrypt_test("authenc(hmac(sha224),cbc(des3_ede))");
2033 		break;
2034 	case 185:
2035 		ret += tcrypt_test("authenc(hmac(sha256),cbc(des))");
2036 		break;
2037 	case 186:
2038 		ret += tcrypt_test("authenc(hmac(sha256),cbc(des3_ede))");
2039 		break;
2040 	case 187:
2041 		ret += tcrypt_test("authenc(hmac(sha384),cbc(des))");
2042 		break;
2043 	case 188:
2044 		ret += tcrypt_test("authenc(hmac(sha384),cbc(des3_ede))");
2045 		break;
2046 	case 189:
2047 		ret += tcrypt_test("authenc(hmac(sha512),cbc(des))");
2048 		break;
2049 	case 190:
2050 		ret += tcrypt_test("authenc(hmac(sha512),cbc(des3_ede))");
2051 		break;
2052 	case 191:
2053 		ret += tcrypt_test("ecb(sm4)");
2054 		ret += tcrypt_test("cbc(sm4)");
2055 		ret += tcrypt_test("ctr(sm4)");
2056 		break;
2057 	case 200:
2058 		test_cipher_speed("ecb(aes)", ENCRYPT, sec, NULL, 0,
2059 				speed_template_16_24_32);
2060 		test_cipher_speed("ecb(aes)", DECRYPT, sec, NULL, 0,
2061 				speed_template_16_24_32);
2062 		test_cipher_speed("cbc(aes)", ENCRYPT, sec, NULL, 0,
2063 				speed_template_16_24_32);
2064 		test_cipher_speed("cbc(aes)", DECRYPT, sec, NULL, 0,
2065 				speed_template_16_24_32);
2066 		test_cipher_speed("lrw(aes)", ENCRYPT, sec, NULL, 0,
2067 				speed_template_32_40_48);
2068 		test_cipher_speed("lrw(aes)", DECRYPT, sec, NULL, 0,
2069 				speed_template_32_40_48);
2070 		test_cipher_speed("xts(aes)", ENCRYPT, sec, NULL, 0,
2071 				speed_template_32_64);
2072 		test_cipher_speed("xts(aes)", DECRYPT, sec, NULL, 0,
2073 				speed_template_32_64);
2074 		test_cipher_speed("cts(cbc(aes))", ENCRYPT, sec, NULL, 0,
2075 				speed_template_16_24_32);
2076 		test_cipher_speed("cts(cbc(aes))", DECRYPT, sec, NULL, 0,
2077 				speed_template_16_24_32);
2078 		test_cipher_speed("ctr(aes)", ENCRYPT, sec, NULL, 0,
2079 				speed_template_16_24_32);
2080 		test_cipher_speed("ctr(aes)", DECRYPT, sec, NULL, 0,
2081 				speed_template_16_24_32);
2082 		test_cipher_speed("cfb(aes)", ENCRYPT, sec, NULL, 0,
2083 				speed_template_16_24_32);
2084 		test_cipher_speed("cfb(aes)", DECRYPT, sec, NULL, 0,
2085 				speed_template_16_24_32);
2086 		break;
2087 
2088 	case 201:
2089 		test_cipher_speed("ecb(des3_ede)", ENCRYPT, sec,
2090 				des3_speed_template, DES3_SPEED_VECTORS,
2091 				speed_template_24);
2092 		test_cipher_speed("ecb(des3_ede)", DECRYPT, sec,
2093 				des3_speed_template, DES3_SPEED_VECTORS,
2094 				speed_template_24);
2095 		test_cipher_speed("cbc(des3_ede)", ENCRYPT, sec,
2096 				des3_speed_template, DES3_SPEED_VECTORS,
2097 				speed_template_24);
2098 		test_cipher_speed("cbc(des3_ede)", DECRYPT, sec,
2099 				des3_speed_template, DES3_SPEED_VECTORS,
2100 				speed_template_24);
2101 		test_cipher_speed("ctr(des3_ede)", ENCRYPT, sec,
2102 				des3_speed_template, DES3_SPEED_VECTORS,
2103 				speed_template_24);
2104 		test_cipher_speed("ctr(des3_ede)", DECRYPT, sec,
2105 				des3_speed_template, DES3_SPEED_VECTORS,
2106 				speed_template_24);
2107 		break;
2108 
2109 	case 202:
2110 		test_cipher_speed("ecb(twofish)", ENCRYPT, sec, NULL, 0,
2111 				speed_template_16_24_32);
2112 		test_cipher_speed("ecb(twofish)", DECRYPT, sec, NULL, 0,
2113 				speed_template_16_24_32);
2114 		test_cipher_speed("cbc(twofish)", ENCRYPT, sec, NULL, 0,
2115 				speed_template_16_24_32);
2116 		test_cipher_speed("cbc(twofish)", DECRYPT, sec, NULL, 0,
2117 				speed_template_16_24_32);
2118 		test_cipher_speed("ctr(twofish)", ENCRYPT, sec, NULL, 0,
2119 				speed_template_16_24_32);
2120 		test_cipher_speed("ctr(twofish)", DECRYPT, sec, NULL, 0,
2121 				speed_template_16_24_32);
2122 		test_cipher_speed("lrw(twofish)", ENCRYPT, sec, NULL, 0,
2123 				speed_template_32_40_48);
2124 		test_cipher_speed("lrw(twofish)", DECRYPT, sec, NULL, 0,
2125 				speed_template_32_40_48);
2126 		test_cipher_speed("xts(twofish)", ENCRYPT, sec, NULL, 0,
2127 				speed_template_32_48_64);
2128 		test_cipher_speed("xts(twofish)", DECRYPT, sec, NULL, 0,
2129 				speed_template_32_48_64);
2130 		break;
2131 
2132 	case 203:
2133 		test_cipher_speed("ecb(blowfish)", ENCRYPT, sec, NULL, 0,
2134 				  speed_template_8_32);
2135 		test_cipher_speed("ecb(blowfish)", DECRYPT, sec, NULL, 0,
2136 				  speed_template_8_32);
2137 		test_cipher_speed("cbc(blowfish)", ENCRYPT, sec, NULL, 0,
2138 				  speed_template_8_32);
2139 		test_cipher_speed("cbc(blowfish)", DECRYPT, sec, NULL, 0,
2140 				  speed_template_8_32);
2141 		test_cipher_speed("ctr(blowfish)", ENCRYPT, sec, NULL, 0,
2142 				  speed_template_8_32);
2143 		test_cipher_speed("ctr(blowfish)", DECRYPT, sec, NULL, 0,
2144 				  speed_template_8_32);
2145 		break;
2146 
2147 	case 204:
2148 		test_cipher_speed("ecb(des)", ENCRYPT, sec, NULL, 0,
2149 				  speed_template_8);
2150 		test_cipher_speed("ecb(des)", DECRYPT, sec, NULL, 0,
2151 				  speed_template_8);
2152 		test_cipher_speed("cbc(des)", ENCRYPT, sec, NULL, 0,
2153 				  speed_template_8);
2154 		test_cipher_speed("cbc(des)", DECRYPT, sec, NULL, 0,
2155 				  speed_template_8);
2156 		break;
2157 
2158 	case 205:
2159 		test_cipher_speed("ecb(camellia)", ENCRYPT, sec, NULL, 0,
2160 				speed_template_16_24_32);
2161 		test_cipher_speed("ecb(camellia)", DECRYPT, sec, NULL, 0,
2162 				speed_template_16_24_32);
2163 		test_cipher_speed("cbc(camellia)", ENCRYPT, sec, NULL, 0,
2164 				speed_template_16_24_32);
2165 		test_cipher_speed("cbc(camellia)", DECRYPT, sec, NULL, 0,
2166 				speed_template_16_24_32);
2167 		test_cipher_speed("ctr(camellia)", ENCRYPT, sec, NULL, 0,
2168 				speed_template_16_24_32);
2169 		test_cipher_speed("ctr(camellia)", DECRYPT, sec, NULL, 0,
2170 				speed_template_16_24_32);
2171 		test_cipher_speed("lrw(camellia)", ENCRYPT, sec, NULL, 0,
2172 				speed_template_32_40_48);
2173 		test_cipher_speed("lrw(camellia)", DECRYPT, sec, NULL, 0,
2174 				speed_template_32_40_48);
2175 		test_cipher_speed("xts(camellia)", ENCRYPT, sec, NULL, 0,
2176 				speed_template_32_48_64);
2177 		test_cipher_speed("xts(camellia)", DECRYPT, sec, NULL, 0,
2178 				speed_template_32_48_64);
2179 		break;
2180 
2181 	case 206:
2182 		test_cipher_speed("salsa20", ENCRYPT, sec, NULL, 0,
2183 				  speed_template_16_32);
2184 		break;
2185 
2186 	case 207:
2187 		test_cipher_speed("ecb(serpent)", ENCRYPT, sec, NULL, 0,
2188 				  speed_template_16_32);
2189 		test_cipher_speed("ecb(serpent)", DECRYPT, sec, NULL, 0,
2190 				  speed_template_16_32);
2191 		test_cipher_speed("cbc(serpent)", ENCRYPT, sec, NULL, 0,
2192 				  speed_template_16_32);
2193 		test_cipher_speed("cbc(serpent)", DECRYPT, sec, NULL, 0,
2194 				  speed_template_16_32);
2195 		test_cipher_speed("ctr(serpent)", ENCRYPT, sec, NULL, 0,
2196 				  speed_template_16_32);
2197 		test_cipher_speed("ctr(serpent)", DECRYPT, sec, NULL, 0,
2198 				  speed_template_16_32);
2199 		test_cipher_speed("lrw(serpent)", ENCRYPT, sec, NULL, 0,
2200 				  speed_template_32_48);
2201 		test_cipher_speed("lrw(serpent)", DECRYPT, sec, NULL, 0,
2202 				  speed_template_32_48);
2203 		test_cipher_speed("xts(serpent)", ENCRYPT, sec, NULL, 0,
2204 				  speed_template_32_64);
2205 		test_cipher_speed("xts(serpent)", DECRYPT, sec, NULL, 0,
2206 				  speed_template_32_64);
2207 		break;
2208 
2209 	case 208:
2210 		test_cipher_speed("ecb(arc4)", ENCRYPT, sec, NULL, 0,
2211 				  speed_template_8);
2212 		break;
2213 
2214 	case 209:
2215 		test_cipher_speed("ecb(cast5)", ENCRYPT, sec, NULL, 0,
2216 				  speed_template_8_16);
2217 		test_cipher_speed("ecb(cast5)", DECRYPT, sec, NULL, 0,
2218 				  speed_template_8_16);
2219 		test_cipher_speed("cbc(cast5)", ENCRYPT, sec, NULL, 0,
2220 				  speed_template_8_16);
2221 		test_cipher_speed("cbc(cast5)", DECRYPT, sec, NULL, 0,
2222 				  speed_template_8_16);
2223 		test_cipher_speed("ctr(cast5)", ENCRYPT, sec, NULL, 0,
2224 				  speed_template_8_16);
2225 		test_cipher_speed("ctr(cast5)", DECRYPT, sec, NULL, 0,
2226 				  speed_template_8_16);
2227 		break;
2228 
2229 	case 210:
2230 		test_cipher_speed("ecb(cast6)", ENCRYPT, sec, NULL, 0,
2231 				  speed_template_16_32);
2232 		test_cipher_speed("ecb(cast6)", DECRYPT, sec, NULL, 0,
2233 				  speed_template_16_32);
2234 		test_cipher_speed("cbc(cast6)", ENCRYPT, sec, NULL, 0,
2235 				  speed_template_16_32);
2236 		test_cipher_speed("cbc(cast6)", DECRYPT, sec, NULL, 0,
2237 				  speed_template_16_32);
2238 		test_cipher_speed("ctr(cast6)", ENCRYPT, sec, NULL, 0,
2239 				  speed_template_16_32);
2240 		test_cipher_speed("ctr(cast6)", DECRYPT, sec, NULL, 0,
2241 				  speed_template_16_32);
2242 		test_cipher_speed("lrw(cast6)", ENCRYPT, sec, NULL, 0,
2243 				  speed_template_32_48);
2244 		test_cipher_speed("lrw(cast6)", DECRYPT, sec, NULL, 0,
2245 				  speed_template_32_48);
2246 		test_cipher_speed("xts(cast6)", ENCRYPT, sec, NULL, 0,
2247 				  speed_template_32_64);
2248 		test_cipher_speed("xts(cast6)", DECRYPT, sec, NULL, 0,
2249 				  speed_template_32_64);
2250 		break;
2251 
2252 	case 211:
2253 		test_aead_speed("rfc4106(gcm(aes))", ENCRYPT, sec,
2254 				NULL, 0, 16, 16, aead_speed_template_20);
2255 		test_aead_speed("gcm(aes)", ENCRYPT, sec,
2256 				NULL, 0, 16, 8, speed_template_16_24_32);
2257 		test_aead_speed("rfc4106(gcm(aes))", DECRYPT, sec,
2258 				NULL, 0, 16, 16, aead_speed_template_20);
2259 		test_aead_speed("gcm(aes)", DECRYPT, sec,
2260 				NULL, 0, 16, 8, speed_template_16_24_32);
2261 		break;
2262 
2263 	case 212:
2264 		test_aead_speed("rfc4309(ccm(aes))", ENCRYPT, sec,
2265 				NULL, 0, 16, 16, aead_speed_template_19);
2266 		test_aead_speed("rfc4309(ccm(aes))", DECRYPT, sec,
2267 				NULL, 0, 16, 16, aead_speed_template_19);
2268 		break;
2269 
2270 	case 213:
2271 		test_aead_speed("rfc7539esp(chacha20,poly1305)", ENCRYPT, sec,
2272 				NULL, 0, 16, 8, aead_speed_template_36);
2273 		test_aead_speed("rfc7539esp(chacha20,poly1305)", DECRYPT, sec,
2274 				NULL, 0, 16, 8, aead_speed_template_36);
2275 		break;
2276 
2277 	case 214:
2278 		test_cipher_speed("chacha20", ENCRYPT, sec, NULL, 0,
2279 				  speed_template_32);
2280 		break;
2281 
2282 	case 215:
2283 		test_mb_aead_speed("rfc4106(gcm(aes))", ENCRYPT, sec, NULL,
2284 				   0, 16, 16, aead_speed_template_20, num_mb);
2285 		test_mb_aead_speed("gcm(aes)", ENCRYPT, sec, NULL, 0, 16, 8,
2286 				   speed_template_16_24_32, num_mb);
2287 		test_mb_aead_speed("rfc4106(gcm(aes))", DECRYPT, sec, NULL,
2288 				   0, 16, 16, aead_speed_template_20, num_mb);
2289 		test_mb_aead_speed("gcm(aes)", DECRYPT, sec, NULL, 0, 16, 8,
2290 				   speed_template_16_24_32, num_mb);
2291 		break;
2292 
2293 	case 216:
2294 		test_mb_aead_speed("rfc4309(ccm(aes))", ENCRYPT, sec, NULL, 0,
2295 				   16, 16, aead_speed_template_19, num_mb);
2296 		test_mb_aead_speed("rfc4309(ccm(aes))", DECRYPT, sec, NULL, 0,
2297 				   16, 16, aead_speed_template_19, num_mb);
2298 		break;
2299 
2300 	case 217:
2301 		test_mb_aead_speed("rfc7539esp(chacha20,poly1305)", ENCRYPT,
2302 				   sec, NULL, 0, 16, 8, aead_speed_template_36,
2303 				   num_mb);
2304 		test_mb_aead_speed("rfc7539esp(chacha20,poly1305)", DECRYPT,
2305 				   sec, NULL, 0, 16, 8, aead_speed_template_36,
2306 				   num_mb);
2307 		break;
2308 
2309 	case 218:
2310 		test_cipher_speed("ecb(sm4)", ENCRYPT, sec, NULL, 0,
2311 				speed_template_16);
2312 		test_cipher_speed("ecb(sm4)", DECRYPT, sec, NULL, 0,
2313 				speed_template_16);
2314 		test_cipher_speed("cbc(sm4)", ENCRYPT, sec, NULL, 0,
2315 				speed_template_16);
2316 		test_cipher_speed("cbc(sm4)", DECRYPT, sec, NULL, 0,
2317 				speed_template_16);
2318 		test_cipher_speed("ctr(sm4)", ENCRYPT, sec, NULL, 0,
2319 				speed_template_16);
2320 		test_cipher_speed("ctr(sm4)", DECRYPT, sec, NULL, 0,
2321 				speed_template_16);
2322 		break;
2323 
2324 	case 219:
2325 		test_cipher_speed("adiantum(xchacha12,aes)", ENCRYPT, sec, NULL,
2326 				  0, speed_template_32);
2327 		test_cipher_speed("adiantum(xchacha12,aes)", DECRYPT, sec, NULL,
2328 				  0, speed_template_32);
2329 		test_cipher_speed("adiantum(xchacha20,aes)", ENCRYPT, sec, NULL,
2330 				  0, speed_template_32);
2331 		test_cipher_speed("adiantum(xchacha20,aes)", DECRYPT, sec, NULL,
2332 				  0, speed_template_32);
2333 		break;
2334 
2335 	case 300:
2336 		if (alg) {
2337 			test_hash_speed(alg, sec, generic_hash_speed_template);
2338 			break;
2339 		}
2340 		/* fall through */
2341 	case 301:
2342 		test_hash_speed("md4", sec, generic_hash_speed_template);
2343 		if (mode > 300 && mode < 400) break;
2344 		/* fall through */
2345 	case 302:
2346 		test_hash_speed("md5", sec, generic_hash_speed_template);
2347 		if (mode > 300 && mode < 400) break;
2348 		/* fall through */
2349 	case 303:
2350 		test_hash_speed("sha1", sec, generic_hash_speed_template);
2351 		if (mode > 300 && mode < 400) break;
2352 		/* fall through */
2353 	case 304:
2354 		test_hash_speed("sha256", sec, generic_hash_speed_template);
2355 		if (mode > 300 && mode < 400) break;
2356 		/* fall through */
2357 	case 305:
2358 		test_hash_speed("sha384", sec, generic_hash_speed_template);
2359 		if (mode > 300 && mode < 400) break;
2360 		/* fall through */
2361 	case 306:
2362 		test_hash_speed("sha512", sec, generic_hash_speed_template);
2363 		if (mode > 300 && mode < 400) break;
2364 		/* fall through */
2365 	case 307:
2366 		test_hash_speed("wp256", sec, generic_hash_speed_template);
2367 		if (mode > 300 && mode < 400) break;
2368 		/* fall through */
2369 	case 308:
2370 		test_hash_speed("wp384", sec, generic_hash_speed_template);
2371 		if (mode > 300 && mode < 400) break;
2372 		/* fall through */
2373 	case 309:
2374 		test_hash_speed("wp512", sec, generic_hash_speed_template);
2375 		if (mode > 300 && mode < 400) break;
2376 		/* fall through */
2377 	case 310:
2378 		test_hash_speed("tgr128", sec, generic_hash_speed_template);
2379 		if (mode > 300 && mode < 400) break;
2380 		/* fall through */
2381 	case 311:
2382 		test_hash_speed("tgr160", sec, generic_hash_speed_template);
2383 		if (mode > 300 && mode < 400) break;
2384 		/* fall through */
2385 	case 312:
2386 		test_hash_speed("tgr192", sec, generic_hash_speed_template);
2387 		if (mode > 300 && mode < 400) break;
2388 		/* fall through */
2389 	case 313:
2390 		test_hash_speed("sha224", sec, generic_hash_speed_template);
2391 		if (mode > 300 && mode < 400) break;
2392 		/* fall through */
2393 	case 314:
2394 		test_hash_speed("rmd128", sec, generic_hash_speed_template);
2395 		if (mode > 300 && mode < 400) break;
2396 		/* fall through */
2397 	case 315:
2398 		test_hash_speed("rmd160", sec, generic_hash_speed_template);
2399 		if (mode > 300 && mode < 400) break;
2400 		/* fall through */
2401 	case 316:
2402 		test_hash_speed("rmd256", sec, generic_hash_speed_template);
2403 		if (mode > 300 && mode < 400) break;
2404 		/* fall through */
2405 	case 317:
2406 		test_hash_speed("rmd320", sec, generic_hash_speed_template);
2407 		if (mode > 300 && mode < 400) break;
2408 		/* fall through */
2409 	case 318:
2410 		test_hash_speed("ghash-generic", sec, hash_speed_template_16);
2411 		if (mode > 300 && mode < 400) break;
2412 		/* fall through */
2413 	case 319:
2414 		test_hash_speed("crc32c", sec, generic_hash_speed_template);
2415 		if (mode > 300 && mode < 400) break;
2416 		/* fall through */
2417 	case 320:
2418 		test_hash_speed("crct10dif", sec, generic_hash_speed_template);
2419 		if (mode > 300 && mode < 400) break;
2420 		/* fall through */
2421 	case 321:
2422 		test_hash_speed("poly1305", sec, poly1305_speed_template);
2423 		if (mode > 300 && mode < 400) break;
2424 		/* fall through */
2425 	case 322:
2426 		test_hash_speed("sha3-224", sec, generic_hash_speed_template);
2427 		if (mode > 300 && mode < 400) break;
2428 		/* fall through */
2429 	case 323:
2430 		test_hash_speed("sha3-256", sec, generic_hash_speed_template);
2431 		if (mode > 300 && mode < 400) break;
2432 		/* fall through */
2433 	case 324:
2434 		test_hash_speed("sha3-384", sec, generic_hash_speed_template);
2435 		if (mode > 300 && mode < 400) break;
2436 		/* fall through */
2437 	case 325:
2438 		test_hash_speed("sha3-512", sec, generic_hash_speed_template);
2439 		if (mode > 300 && mode < 400) break;
2440 		/* fall through */
2441 	case 326:
2442 		test_hash_speed("sm3", sec, generic_hash_speed_template);
2443 		if (mode > 300 && mode < 400) break;
2444 		/* fall through */
2445 	case 327:
2446 		test_hash_speed("streebog256", sec,
2447 				generic_hash_speed_template);
2448 		if (mode > 300 && mode < 400) break;
2449 		/* fall through */
2450 	case 328:
2451 		test_hash_speed("streebog512", sec,
2452 				generic_hash_speed_template);
2453 		if (mode > 300 && mode < 400) break;
2454 		/* fall through */
2455 	case 399:
2456 		break;
2457 
2458 	case 400:
2459 		if (alg) {
2460 			test_ahash_speed(alg, sec, generic_hash_speed_template);
2461 			break;
2462 		}
2463 		/* fall through */
2464 	case 401:
2465 		test_ahash_speed("md4", sec, generic_hash_speed_template);
2466 		if (mode > 400 && mode < 500) break;
2467 		/* fall through */
2468 	case 402:
2469 		test_ahash_speed("md5", sec, generic_hash_speed_template);
2470 		if (mode > 400 && mode < 500) break;
2471 		/* fall through */
2472 	case 403:
2473 		test_ahash_speed("sha1", sec, generic_hash_speed_template);
2474 		if (mode > 400 && mode < 500) break;
2475 		/* fall through */
2476 	case 404:
2477 		test_ahash_speed("sha256", sec, generic_hash_speed_template);
2478 		if (mode > 400 && mode < 500) break;
2479 		/* fall through */
2480 	case 405:
2481 		test_ahash_speed("sha384", sec, generic_hash_speed_template);
2482 		if (mode > 400 && mode < 500) break;
2483 		/* fall through */
2484 	case 406:
2485 		test_ahash_speed("sha512", sec, generic_hash_speed_template);
2486 		if (mode > 400 && mode < 500) break;
2487 		/* fall through */
2488 	case 407:
2489 		test_ahash_speed("wp256", sec, generic_hash_speed_template);
2490 		if (mode > 400 && mode < 500) break;
2491 		/* fall through */
2492 	case 408:
2493 		test_ahash_speed("wp384", sec, generic_hash_speed_template);
2494 		if (mode > 400 && mode < 500) break;
2495 		/* fall through */
2496 	case 409:
2497 		test_ahash_speed("wp512", sec, generic_hash_speed_template);
2498 		if (mode > 400 && mode < 500) break;
2499 		/* fall through */
2500 	case 410:
2501 		test_ahash_speed("tgr128", sec, generic_hash_speed_template);
2502 		if (mode > 400 && mode < 500) break;
2503 		/* fall through */
2504 	case 411:
2505 		test_ahash_speed("tgr160", sec, generic_hash_speed_template);
2506 		if (mode > 400 && mode < 500) break;
2507 		/* fall through */
2508 	case 412:
2509 		test_ahash_speed("tgr192", sec, generic_hash_speed_template);
2510 		if (mode > 400 && mode < 500) break;
2511 		/* fall through */
2512 	case 413:
2513 		test_ahash_speed("sha224", sec, generic_hash_speed_template);
2514 		if (mode > 400 && mode < 500) break;
2515 		/* fall through */
2516 	case 414:
2517 		test_ahash_speed("rmd128", sec, generic_hash_speed_template);
2518 		if (mode > 400 && mode < 500) break;
2519 		/* fall through */
2520 	case 415:
2521 		test_ahash_speed("rmd160", sec, generic_hash_speed_template);
2522 		if (mode > 400 && mode < 500) break;
2523 		/* fall through */
2524 	case 416:
2525 		test_ahash_speed("rmd256", sec, generic_hash_speed_template);
2526 		if (mode > 400 && mode < 500) break;
2527 		/* fall through */
2528 	case 417:
2529 		test_ahash_speed("rmd320", sec, generic_hash_speed_template);
2530 		if (mode > 400 && mode < 500) break;
2531 		/* fall through */
2532 	case 418:
2533 		test_ahash_speed("sha3-224", sec, generic_hash_speed_template);
2534 		if (mode > 400 && mode < 500) break;
2535 		/* fall through */
2536 	case 419:
2537 		test_ahash_speed("sha3-256", sec, generic_hash_speed_template);
2538 		if (mode > 400 && mode < 500) break;
2539 		/* fall through */
2540 	case 420:
2541 		test_ahash_speed("sha3-384", sec, generic_hash_speed_template);
2542 		if (mode > 400 && mode < 500) break;
2543 		/* fall through */
2544 	case 421:
2545 		test_ahash_speed("sha3-512", sec, generic_hash_speed_template);
2546 		if (mode > 400 && mode < 500) break;
2547 		/* fall through */
2548 	case 422:
2549 		test_mb_ahash_speed("sha1", sec, generic_hash_speed_template,
2550 				    num_mb);
2551 		if (mode > 400 && mode < 500) break;
2552 		/* fall through */
2553 	case 423:
2554 		test_mb_ahash_speed("sha256", sec, generic_hash_speed_template,
2555 				    num_mb);
2556 		if (mode > 400 && mode < 500) break;
2557 		/* fall through */
2558 	case 424:
2559 		test_mb_ahash_speed("sha512", sec, generic_hash_speed_template,
2560 				    num_mb);
2561 		if (mode > 400 && mode < 500) break;
2562 		/* fall through */
2563 	case 425:
2564 		test_mb_ahash_speed("sm3", sec, generic_hash_speed_template,
2565 				    num_mb);
2566 		if (mode > 400 && mode < 500) break;
2567 		/* fall through */
2568 	case 426:
2569 		test_mb_ahash_speed("streebog256", sec,
2570 				    generic_hash_speed_template, num_mb);
2571 		if (mode > 400 && mode < 500) break;
2572 		/* fall through */
2573 	case 427:
2574 		test_mb_ahash_speed("streebog512", sec,
2575 				    generic_hash_speed_template, num_mb);
2576 		if (mode > 400 && mode < 500) break;
2577 		/* fall through */
2578 	case 499:
2579 		break;
2580 
2581 	case 500:
2582 		test_acipher_speed("ecb(aes)", ENCRYPT, sec, NULL, 0,
2583 				   speed_template_16_24_32);
2584 		test_acipher_speed("ecb(aes)", DECRYPT, sec, NULL, 0,
2585 				   speed_template_16_24_32);
2586 		test_acipher_speed("cbc(aes)", ENCRYPT, sec, NULL, 0,
2587 				   speed_template_16_24_32);
2588 		test_acipher_speed("cbc(aes)", DECRYPT, sec, NULL, 0,
2589 				   speed_template_16_24_32);
2590 		test_acipher_speed("lrw(aes)", ENCRYPT, sec, NULL, 0,
2591 				   speed_template_32_40_48);
2592 		test_acipher_speed("lrw(aes)", DECRYPT, sec, NULL, 0,
2593 				   speed_template_32_40_48);
2594 		test_acipher_speed("xts(aes)", ENCRYPT, sec, NULL, 0,
2595 				   speed_template_32_64);
2596 		test_acipher_speed("xts(aes)", DECRYPT, sec, NULL, 0,
2597 				   speed_template_32_64);
2598 		test_acipher_speed("cts(cbc(aes))", ENCRYPT, sec, NULL, 0,
2599 				   speed_template_16_24_32);
2600 		test_acipher_speed("cts(cbc(aes))", DECRYPT, sec, NULL, 0,
2601 				   speed_template_16_24_32);
2602 		test_acipher_speed("ctr(aes)", ENCRYPT, sec, NULL, 0,
2603 				   speed_template_16_24_32);
2604 		test_acipher_speed("ctr(aes)", DECRYPT, sec, NULL, 0,
2605 				   speed_template_16_24_32);
2606 		test_acipher_speed("cfb(aes)", ENCRYPT, sec, NULL, 0,
2607 				   speed_template_16_24_32);
2608 		test_acipher_speed("cfb(aes)", DECRYPT, sec, NULL, 0,
2609 				   speed_template_16_24_32);
2610 		test_acipher_speed("ofb(aes)", ENCRYPT, sec, NULL, 0,
2611 				   speed_template_16_24_32);
2612 		test_acipher_speed("ofb(aes)", DECRYPT, sec, NULL, 0,
2613 				   speed_template_16_24_32);
2614 		test_acipher_speed("rfc3686(ctr(aes))", ENCRYPT, sec, NULL, 0,
2615 				   speed_template_20_28_36);
2616 		test_acipher_speed("rfc3686(ctr(aes))", DECRYPT, sec, NULL, 0,
2617 				   speed_template_20_28_36);
2618 		break;
2619 
2620 	case 501:
2621 		test_acipher_speed("ecb(des3_ede)", ENCRYPT, sec,
2622 				   des3_speed_template, DES3_SPEED_VECTORS,
2623 				   speed_template_24);
2624 		test_acipher_speed("ecb(des3_ede)", DECRYPT, sec,
2625 				   des3_speed_template, DES3_SPEED_VECTORS,
2626 				   speed_template_24);
2627 		test_acipher_speed("cbc(des3_ede)", ENCRYPT, sec,
2628 				   des3_speed_template, DES3_SPEED_VECTORS,
2629 				   speed_template_24);
2630 		test_acipher_speed("cbc(des3_ede)", DECRYPT, sec,
2631 				   des3_speed_template, DES3_SPEED_VECTORS,
2632 				   speed_template_24);
2633 		test_acipher_speed("cfb(des3_ede)", ENCRYPT, sec,
2634 				   des3_speed_template, DES3_SPEED_VECTORS,
2635 				   speed_template_24);
2636 		test_acipher_speed("cfb(des3_ede)", DECRYPT, sec,
2637 				   des3_speed_template, DES3_SPEED_VECTORS,
2638 				   speed_template_24);
2639 		test_acipher_speed("ofb(des3_ede)", ENCRYPT, sec,
2640 				   des3_speed_template, DES3_SPEED_VECTORS,
2641 				   speed_template_24);
2642 		test_acipher_speed("ofb(des3_ede)", DECRYPT, sec,
2643 				   des3_speed_template, DES3_SPEED_VECTORS,
2644 				   speed_template_24);
2645 		break;
2646 
2647 	case 502:
2648 		test_acipher_speed("ecb(des)", ENCRYPT, sec, NULL, 0,
2649 				   speed_template_8);
2650 		test_acipher_speed("ecb(des)", DECRYPT, sec, NULL, 0,
2651 				   speed_template_8);
2652 		test_acipher_speed("cbc(des)", ENCRYPT, sec, NULL, 0,
2653 				   speed_template_8);
2654 		test_acipher_speed("cbc(des)", DECRYPT, sec, NULL, 0,
2655 				   speed_template_8);
2656 		test_acipher_speed("cfb(des)", ENCRYPT, sec, NULL, 0,
2657 				   speed_template_8);
2658 		test_acipher_speed("cfb(des)", DECRYPT, sec, NULL, 0,
2659 				   speed_template_8);
2660 		test_acipher_speed("ofb(des)", ENCRYPT, sec, NULL, 0,
2661 				   speed_template_8);
2662 		test_acipher_speed("ofb(des)", DECRYPT, sec, NULL, 0,
2663 				   speed_template_8);
2664 		break;
2665 
2666 	case 503:
2667 		test_acipher_speed("ecb(serpent)", ENCRYPT, sec, NULL, 0,
2668 				   speed_template_16_32);
2669 		test_acipher_speed("ecb(serpent)", DECRYPT, sec, NULL, 0,
2670 				   speed_template_16_32);
2671 		test_acipher_speed("cbc(serpent)", ENCRYPT, sec, NULL, 0,
2672 				   speed_template_16_32);
2673 		test_acipher_speed("cbc(serpent)", DECRYPT, sec, NULL, 0,
2674 				   speed_template_16_32);
2675 		test_acipher_speed("ctr(serpent)", ENCRYPT, sec, NULL, 0,
2676 				   speed_template_16_32);
2677 		test_acipher_speed("ctr(serpent)", DECRYPT, sec, NULL, 0,
2678 				   speed_template_16_32);
2679 		test_acipher_speed("lrw(serpent)", ENCRYPT, sec, NULL, 0,
2680 				   speed_template_32_48);
2681 		test_acipher_speed("lrw(serpent)", DECRYPT, sec, NULL, 0,
2682 				   speed_template_32_48);
2683 		test_acipher_speed("xts(serpent)", ENCRYPT, sec, NULL, 0,
2684 				   speed_template_32_64);
2685 		test_acipher_speed("xts(serpent)", DECRYPT, sec, NULL, 0,
2686 				   speed_template_32_64);
2687 		break;
2688 
2689 	case 504:
2690 		test_acipher_speed("ecb(twofish)", ENCRYPT, sec, NULL, 0,
2691 				   speed_template_16_24_32);
2692 		test_acipher_speed("ecb(twofish)", DECRYPT, sec, NULL, 0,
2693 				   speed_template_16_24_32);
2694 		test_acipher_speed("cbc(twofish)", ENCRYPT, sec, NULL, 0,
2695 				   speed_template_16_24_32);
2696 		test_acipher_speed("cbc(twofish)", DECRYPT, sec, NULL, 0,
2697 				   speed_template_16_24_32);
2698 		test_acipher_speed("ctr(twofish)", ENCRYPT, sec, NULL, 0,
2699 				   speed_template_16_24_32);
2700 		test_acipher_speed("ctr(twofish)", DECRYPT, sec, NULL, 0,
2701 				   speed_template_16_24_32);
2702 		test_acipher_speed("lrw(twofish)", ENCRYPT, sec, NULL, 0,
2703 				   speed_template_32_40_48);
2704 		test_acipher_speed("lrw(twofish)", DECRYPT, sec, NULL, 0,
2705 				   speed_template_32_40_48);
2706 		test_acipher_speed("xts(twofish)", ENCRYPT, sec, NULL, 0,
2707 				   speed_template_32_48_64);
2708 		test_acipher_speed("xts(twofish)", DECRYPT, sec, NULL, 0,
2709 				   speed_template_32_48_64);
2710 		break;
2711 
2712 	case 505:
2713 		test_acipher_speed("ecb(arc4)", ENCRYPT, sec, NULL, 0,
2714 				   speed_template_8);
2715 		break;
2716 
2717 	case 506:
2718 		test_acipher_speed("ecb(cast5)", ENCRYPT, sec, NULL, 0,
2719 				   speed_template_8_16);
2720 		test_acipher_speed("ecb(cast5)", DECRYPT, sec, NULL, 0,
2721 				   speed_template_8_16);
2722 		test_acipher_speed("cbc(cast5)", ENCRYPT, sec, NULL, 0,
2723 				   speed_template_8_16);
2724 		test_acipher_speed("cbc(cast5)", DECRYPT, sec, NULL, 0,
2725 				   speed_template_8_16);
2726 		test_acipher_speed("ctr(cast5)", ENCRYPT, sec, NULL, 0,
2727 				   speed_template_8_16);
2728 		test_acipher_speed("ctr(cast5)", DECRYPT, sec, NULL, 0,
2729 				   speed_template_8_16);
2730 		break;
2731 
2732 	case 507:
2733 		test_acipher_speed("ecb(cast6)", ENCRYPT, sec, NULL, 0,
2734 				   speed_template_16_32);
2735 		test_acipher_speed("ecb(cast6)", DECRYPT, sec, NULL, 0,
2736 				   speed_template_16_32);
2737 		test_acipher_speed("cbc(cast6)", ENCRYPT, sec, NULL, 0,
2738 				   speed_template_16_32);
2739 		test_acipher_speed("cbc(cast6)", DECRYPT, sec, NULL, 0,
2740 				   speed_template_16_32);
2741 		test_acipher_speed("ctr(cast6)", ENCRYPT, sec, NULL, 0,
2742 				   speed_template_16_32);
2743 		test_acipher_speed("ctr(cast6)", DECRYPT, sec, NULL, 0,
2744 				   speed_template_16_32);
2745 		test_acipher_speed("lrw(cast6)", ENCRYPT, sec, NULL, 0,
2746 				   speed_template_32_48);
2747 		test_acipher_speed("lrw(cast6)", DECRYPT, sec, NULL, 0,
2748 				   speed_template_32_48);
2749 		test_acipher_speed("xts(cast6)", ENCRYPT, sec, NULL, 0,
2750 				   speed_template_32_64);
2751 		test_acipher_speed("xts(cast6)", DECRYPT, sec, NULL, 0,
2752 				   speed_template_32_64);
2753 		break;
2754 
2755 	case 508:
2756 		test_acipher_speed("ecb(camellia)", ENCRYPT, sec, NULL, 0,
2757 				   speed_template_16_32);
2758 		test_acipher_speed("ecb(camellia)", DECRYPT, sec, NULL, 0,
2759 				   speed_template_16_32);
2760 		test_acipher_speed("cbc(camellia)", ENCRYPT, sec, NULL, 0,
2761 				   speed_template_16_32);
2762 		test_acipher_speed("cbc(camellia)", DECRYPT, sec, NULL, 0,
2763 				   speed_template_16_32);
2764 		test_acipher_speed("ctr(camellia)", ENCRYPT, sec, NULL, 0,
2765 				   speed_template_16_32);
2766 		test_acipher_speed("ctr(camellia)", DECRYPT, sec, NULL, 0,
2767 				   speed_template_16_32);
2768 		test_acipher_speed("lrw(camellia)", ENCRYPT, sec, NULL, 0,
2769 				   speed_template_32_48);
2770 		test_acipher_speed("lrw(camellia)", DECRYPT, sec, NULL, 0,
2771 				   speed_template_32_48);
2772 		test_acipher_speed("xts(camellia)", ENCRYPT, sec, NULL, 0,
2773 				   speed_template_32_64);
2774 		test_acipher_speed("xts(camellia)", DECRYPT, sec, NULL, 0,
2775 				   speed_template_32_64);
2776 		break;
2777 
2778 	case 509:
2779 		test_acipher_speed("ecb(blowfish)", ENCRYPT, sec, NULL, 0,
2780 				   speed_template_8_32);
2781 		test_acipher_speed("ecb(blowfish)", DECRYPT, sec, NULL, 0,
2782 				   speed_template_8_32);
2783 		test_acipher_speed("cbc(blowfish)", ENCRYPT, sec, NULL, 0,
2784 				   speed_template_8_32);
2785 		test_acipher_speed("cbc(blowfish)", DECRYPT, sec, NULL, 0,
2786 				   speed_template_8_32);
2787 		test_acipher_speed("ctr(blowfish)", ENCRYPT, sec, NULL, 0,
2788 				   speed_template_8_32);
2789 		test_acipher_speed("ctr(blowfish)", DECRYPT, sec, NULL, 0,
2790 				   speed_template_8_32);
2791 		break;
2792 
2793 	case 600:
2794 		test_mb_skcipher_speed("ecb(aes)", ENCRYPT, sec, NULL, 0,
2795 				       speed_template_16_24_32, num_mb);
2796 		test_mb_skcipher_speed("ecb(aes)", DECRYPT, sec, NULL, 0,
2797 				       speed_template_16_24_32, num_mb);
2798 		test_mb_skcipher_speed("cbc(aes)", ENCRYPT, sec, NULL, 0,
2799 				       speed_template_16_24_32, num_mb);
2800 		test_mb_skcipher_speed("cbc(aes)", DECRYPT, sec, NULL, 0,
2801 				       speed_template_16_24_32, num_mb);
2802 		test_mb_skcipher_speed("lrw(aes)", ENCRYPT, sec, NULL, 0,
2803 				       speed_template_32_40_48, num_mb);
2804 		test_mb_skcipher_speed("lrw(aes)", DECRYPT, sec, NULL, 0,
2805 				       speed_template_32_40_48, num_mb);
2806 		test_mb_skcipher_speed("xts(aes)", ENCRYPT, sec, NULL, 0,
2807 				       speed_template_32_64, num_mb);
2808 		test_mb_skcipher_speed("xts(aes)", DECRYPT, sec, NULL, 0,
2809 				       speed_template_32_64, num_mb);
2810 		test_mb_skcipher_speed("cts(cbc(aes))", ENCRYPT, sec, NULL, 0,
2811 				       speed_template_16_24_32, num_mb);
2812 		test_mb_skcipher_speed("cts(cbc(aes))", DECRYPT, sec, NULL, 0,
2813 				       speed_template_16_24_32, num_mb);
2814 		test_mb_skcipher_speed("ctr(aes)", ENCRYPT, sec, NULL, 0,
2815 				       speed_template_16_24_32, num_mb);
2816 		test_mb_skcipher_speed("ctr(aes)", DECRYPT, sec, NULL, 0,
2817 				       speed_template_16_24_32, num_mb);
2818 		test_mb_skcipher_speed("cfb(aes)", ENCRYPT, sec, NULL, 0,
2819 				       speed_template_16_24_32, num_mb);
2820 		test_mb_skcipher_speed("cfb(aes)", DECRYPT, sec, NULL, 0,
2821 				       speed_template_16_24_32, num_mb);
2822 		test_mb_skcipher_speed("ofb(aes)", ENCRYPT, sec, NULL, 0,
2823 				       speed_template_16_24_32, num_mb);
2824 		test_mb_skcipher_speed("ofb(aes)", DECRYPT, sec, NULL, 0,
2825 				       speed_template_16_24_32, num_mb);
2826 		test_mb_skcipher_speed("rfc3686(ctr(aes))", ENCRYPT, sec, NULL,
2827 				       0, speed_template_20_28_36, num_mb);
2828 		test_mb_skcipher_speed("rfc3686(ctr(aes))", DECRYPT, sec, NULL,
2829 				       0, speed_template_20_28_36, num_mb);
2830 		break;
2831 
2832 	case 601:
2833 		test_mb_skcipher_speed("ecb(des3_ede)", ENCRYPT, sec,
2834 				       des3_speed_template, DES3_SPEED_VECTORS,
2835 				       speed_template_24, num_mb);
2836 		test_mb_skcipher_speed("ecb(des3_ede)", DECRYPT, sec,
2837 				       des3_speed_template, DES3_SPEED_VECTORS,
2838 				       speed_template_24, num_mb);
2839 		test_mb_skcipher_speed("cbc(des3_ede)", ENCRYPT, sec,
2840 				       des3_speed_template, DES3_SPEED_VECTORS,
2841 				       speed_template_24, num_mb);
2842 		test_mb_skcipher_speed("cbc(des3_ede)", DECRYPT, sec,
2843 				       des3_speed_template, DES3_SPEED_VECTORS,
2844 				       speed_template_24, num_mb);
2845 		test_mb_skcipher_speed("cfb(des3_ede)", ENCRYPT, sec,
2846 				       des3_speed_template, DES3_SPEED_VECTORS,
2847 				       speed_template_24, num_mb);
2848 		test_mb_skcipher_speed("cfb(des3_ede)", DECRYPT, sec,
2849 				       des3_speed_template, DES3_SPEED_VECTORS,
2850 				       speed_template_24, num_mb);
2851 		test_mb_skcipher_speed("ofb(des3_ede)", ENCRYPT, sec,
2852 				       des3_speed_template, DES3_SPEED_VECTORS,
2853 				       speed_template_24, num_mb);
2854 		test_mb_skcipher_speed("ofb(des3_ede)", DECRYPT, sec,
2855 				       des3_speed_template, DES3_SPEED_VECTORS,
2856 				       speed_template_24, num_mb);
2857 		break;
2858 
2859 	case 602:
2860 		test_mb_skcipher_speed("ecb(des)", ENCRYPT, sec, NULL, 0,
2861 				       speed_template_8, num_mb);
2862 		test_mb_skcipher_speed("ecb(des)", DECRYPT, sec, NULL, 0,
2863 				       speed_template_8, num_mb);
2864 		test_mb_skcipher_speed("cbc(des)", ENCRYPT, sec, NULL, 0,
2865 				       speed_template_8, num_mb);
2866 		test_mb_skcipher_speed("cbc(des)", DECRYPT, sec, NULL, 0,
2867 				       speed_template_8, num_mb);
2868 		test_mb_skcipher_speed("cfb(des)", ENCRYPT, sec, NULL, 0,
2869 				       speed_template_8, num_mb);
2870 		test_mb_skcipher_speed("cfb(des)", DECRYPT, sec, NULL, 0,
2871 				       speed_template_8, num_mb);
2872 		test_mb_skcipher_speed("ofb(des)", ENCRYPT, sec, NULL, 0,
2873 				       speed_template_8, num_mb);
2874 		test_mb_skcipher_speed("ofb(des)", DECRYPT, sec, NULL, 0,
2875 				       speed_template_8, num_mb);
2876 		break;
2877 
2878 	case 603:
2879 		test_mb_skcipher_speed("ecb(serpent)", ENCRYPT, sec, NULL, 0,
2880 				       speed_template_16_32, num_mb);
2881 		test_mb_skcipher_speed("ecb(serpent)", DECRYPT, sec, NULL, 0,
2882 				       speed_template_16_32, num_mb);
2883 		test_mb_skcipher_speed("cbc(serpent)", ENCRYPT, sec, NULL, 0,
2884 				       speed_template_16_32, num_mb);
2885 		test_mb_skcipher_speed("cbc(serpent)", DECRYPT, sec, NULL, 0,
2886 				       speed_template_16_32, num_mb);
2887 		test_mb_skcipher_speed("ctr(serpent)", ENCRYPT, sec, NULL, 0,
2888 				       speed_template_16_32, num_mb);
2889 		test_mb_skcipher_speed("ctr(serpent)", DECRYPT, sec, NULL, 0,
2890 				       speed_template_16_32, num_mb);
2891 		test_mb_skcipher_speed("lrw(serpent)", ENCRYPT, sec, NULL, 0,
2892 				       speed_template_32_48, num_mb);
2893 		test_mb_skcipher_speed("lrw(serpent)", DECRYPT, sec, NULL, 0,
2894 				       speed_template_32_48, num_mb);
2895 		test_mb_skcipher_speed("xts(serpent)", ENCRYPT, sec, NULL, 0,
2896 				       speed_template_32_64, num_mb);
2897 		test_mb_skcipher_speed("xts(serpent)", DECRYPT, sec, NULL, 0,
2898 				       speed_template_32_64, num_mb);
2899 		break;
2900 
2901 	case 604:
2902 		test_mb_skcipher_speed("ecb(twofish)", ENCRYPT, sec, NULL, 0,
2903 				       speed_template_16_24_32, num_mb);
2904 		test_mb_skcipher_speed("ecb(twofish)", DECRYPT, sec, NULL, 0,
2905 				       speed_template_16_24_32, num_mb);
2906 		test_mb_skcipher_speed("cbc(twofish)", ENCRYPT, sec, NULL, 0,
2907 				       speed_template_16_24_32, num_mb);
2908 		test_mb_skcipher_speed("cbc(twofish)", DECRYPT, sec, NULL, 0,
2909 				       speed_template_16_24_32, num_mb);
2910 		test_mb_skcipher_speed("ctr(twofish)", ENCRYPT, sec, NULL, 0,
2911 				       speed_template_16_24_32, num_mb);
2912 		test_mb_skcipher_speed("ctr(twofish)", DECRYPT, sec, NULL, 0,
2913 				       speed_template_16_24_32, num_mb);
2914 		test_mb_skcipher_speed("lrw(twofish)", ENCRYPT, sec, NULL, 0,
2915 				       speed_template_32_40_48, num_mb);
2916 		test_mb_skcipher_speed("lrw(twofish)", DECRYPT, sec, NULL, 0,
2917 				       speed_template_32_40_48, num_mb);
2918 		test_mb_skcipher_speed("xts(twofish)", ENCRYPT, sec, NULL, 0,
2919 				       speed_template_32_48_64, num_mb);
2920 		test_mb_skcipher_speed("xts(twofish)", DECRYPT, sec, NULL, 0,
2921 				       speed_template_32_48_64, num_mb);
2922 		break;
2923 
2924 	case 605:
2925 		test_mb_skcipher_speed("ecb(arc4)", ENCRYPT, sec, NULL, 0,
2926 				       speed_template_8, num_mb);
2927 		break;
2928 
2929 	case 606:
2930 		test_mb_skcipher_speed("ecb(cast5)", ENCRYPT, sec, NULL, 0,
2931 				       speed_template_8_16, num_mb);
2932 		test_mb_skcipher_speed("ecb(cast5)", DECRYPT, sec, NULL, 0,
2933 				       speed_template_8_16, num_mb);
2934 		test_mb_skcipher_speed("cbc(cast5)", ENCRYPT, sec, NULL, 0,
2935 				       speed_template_8_16, num_mb);
2936 		test_mb_skcipher_speed("cbc(cast5)", DECRYPT, sec, NULL, 0,
2937 				       speed_template_8_16, num_mb);
2938 		test_mb_skcipher_speed("ctr(cast5)", ENCRYPT, sec, NULL, 0,
2939 				       speed_template_8_16, num_mb);
2940 		test_mb_skcipher_speed("ctr(cast5)", DECRYPT, sec, NULL, 0,
2941 				       speed_template_8_16, num_mb);
2942 		break;
2943 
2944 	case 607:
2945 		test_mb_skcipher_speed("ecb(cast6)", ENCRYPT, sec, NULL, 0,
2946 				       speed_template_16_32, num_mb);
2947 		test_mb_skcipher_speed("ecb(cast6)", DECRYPT, sec, NULL, 0,
2948 				       speed_template_16_32, num_mb);
2949 		test_mb_skcipher_speed("cbc(cast6)", ENCRYPT, sec, NULL, 0,
2950 				       speed_template_16_32, num_mb);
2951 		test_mb_skcipher_speed("cbc(cast6)", DECRYPT, sec, NULL, 0,
2952 				       speed_template_16_32, num_mb);
2953 		test_mb_skcipher_speed("ctr(cast6)", ENCRYPT, sec, NULL, 0,
2954 				       speed_template_16_32, num_mb);
2955 		test_mb_skcipher_speed("ctr(cast6)", DECRYPT, sec, NULL, 0,
2956 				       speed_template_16_32, num_mb);
2957 		test_mb_skcipher_speed("lrw(cast6)", ENCRYPT, sec, NULL, 0,
2958 				       speed_template_32_48, num_mb);
2959 		test_mb_skcipher_speed("lrw(cast6)", DECRYPT, sec, NULL, 0,
2960 				       speed_template_32_48, num_mb);
2961 		test_mb_skcipher_speed("xts(cast6)", ENCRYPT, sec, NULL, 0,
2962 				       speed_template_32_64, num_mb);
2963 		test_mb_skcipher_speed("xts(cast6)", DECRYPT, sec, NULL, 0,
2964 				       speed_template_32_64, num_mb);
2965 		break;
2966 
2967 	case 608:
2968 		test_mb_skcipher_speed("ecb(camellia)", ENCRYPT, sec, NULL, 0,
2969 				       speed_template_16_32, num_mb);
2970 		test_mb_skcipher_speed("ecb(camellia)", DECRYPT, sec, NULL, 0,
2971 				       speed_template_16_32, num_mb);
2972 		test_mb_skcipher_speed("cbc(camellia)", ENCRYPT, sec, NULL, 0,
2973 				       speed_template_16_32, num_mb);
2974 		test_mb_skcipher_speed("cbc(camellia)", DECRYPT, sec, NULL, 0,
2975 				       speed_template_16_32, num_mb);
2976 		test_mb_skcipher_speed("ctr(camellia)", ENCRYPT, sec, NULL, 0,
2977 				       speed_template_16_32, num_mb);
2978 		test_mb_skcipher_speed("ctr(camellia)", DECRYPT, sec, NULL, 0,
2979 				       speed_template_16_32, num_mb);
2980 		test_mb_skcipher_speed("lrw(camellia)", ENCRYPT, sec, NULL, 0,
2981 				       speed_template_32_48, num_mb);
2982 		test_mb_skcipher_speed("lrw(camellia)", DECRYPT, sec, NULL, 0,
2983 				       speed_template_32_48, num_mb);
2984 		test_mb_skcipher_speed("xts(camellia)", ENCRYPT, sec, NULL, 0,
2985 				       speed_template_32_64, num_mb);
2986 		test_mb_skcipher_speed("xts(camellia)", DECRYPT, sec, NULL, 0,
2987 				       speed_template_32_64, num_mb);
2988 		break;
2989 
2990 	case 609:
2991 		test_mb_skcipher_speed("ecb(blowfish)", ENCRYPT, sec, NULL, 0,
2992 				       speed_template_8_32, num_mb);
2993 		test_mb_skcipher_speed("ecb(blowfish)", DECRYPT, sec, NULL, 0,
2994 				       speed_template_8_32, num_mb);
2995 		test_mb_skcipher_speed("cbc(blowfish)", ENCRYPT, sec, NULL, 0,
2996 				       speed_template_8_32, num_mb);
2997 		test_mb_skcipher_speed("cbc(blowfish)", DECRYPT, sec, NULL, 0,
2998 				       speed_template_8_32, num_mb);
2999 		test_mb_skcipher_speed("ctr(blowfish)", ENCRYPT, sec, NULL, 0,
3000 				       speed_template_8_32, num_mb);
3001 		test_mb_skcipher_speed("ctr(blowfish)", DECRYPT, sec, NULL, 0,
3002 				       speed_template_8_32, num_mb);
3003 		break;
3004 
3005 	case 1000:
3006 		test_available();
3007 		break;
3008 	}
3009 
3010 	return ret;
3011 }
3012 
3013 static int __init tcrypt_mod_init(void)
3014 {
3015 	int err = -ENOMEM;
3016 	int i;
3017 
3018 	for (i = 0; i < TVMEMSIZE; i++) {
3019 		tvmem[i] = (void *)__get_free_page(GFP_KERNEL);
3020 		if (!tvmem[i])
3021 			goto err_free_tv;
3022 	}
3023 
3024 	err = do_test(alg, type, mask, mode, num_mb);
3025 
3026 	if (err) {
3027 		printk(KERN_ERR "tcrypt: one or more tests failed!\n");
3028 		goto err_free_tv;
3029 	} else {
3030 		pr_debug("all tests passed\n");
3031 	}
3032 
3033 	/* We intentionaly return -EAGAIN to prevent keeping the module,
3034 	 * unless we're running in fips mode. It does all its work from
3035 	 * init() and doesn't offer any runtime functionality, but in
3036 	 * the fips case, checking for a successful load is helpful.
3037 	 * => we don't need it in the memory, do we?
3038 	 *                                        -- mludvig
3039 	 */
3040 	if (!fips_enabled)
3041 		err = -EAGAIN;
3042 
3043 err_free_tv:
3044 	for (i = 0; i < TVMEMSIZE && tvmem[i]; i++)
3045 		free_page((unsigned long)tvmem[i]);
3046 
3047 	return err;
3048 }
3049 
3050 /*
3051  * If an init function is provided, an exit function must also be provided
3052  * to allow module unload.
3053  */
3054 static void __exit tcrypt_mod_fini(void) { }
3055 
3056 subsys_initcall(tcrypt_mod_init);
3057 module_exit(tcrypt_mod_fini);
3058 
3059 module_param(alg, charp, 0);
3060 module_param(type, uint, 0);
3061 module_param(mask, uint, 0);
3062 module_param(mode, int, 0);
3063 module_param(sec, uint, 0);
3064 MODULE_PARM_DESC(sec, "Length in seconds of speed tests "
3065 		      "(defaults to zero which uses CPU cycles instead)");
3066 module_param(num_mb, uint, 0000);
3067 MODULE_PARM_DESC(num_mb, "Number of concurrent requests to be used in mb speed tests (defaults to 8)");
3068 
3069 MODULE_LICENSE("GPL");
3070 MODULE_DESCRIPTION("Quick & dirty crypto testing module");
3071 MODULE_AUTHOR("James Morris <jmorris@intercode.com.au>");
3072