Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

crypto: tcrypt - reschedule during speed tests

Avoid RCU stalls in the case of non-preemptible kernel and lengthy
speed tests by rescheduling when advancing from one block size
to another.

Signed-off-by: Horia Geantă <horia.geanta@nxp.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

authored by

Horia Geantă and committed by
Herbert Xu
2af63299 f6adeef7

+24 -12
+24 -12
crypto/tcrypt.c
··· 415 415 416 416 } 417 417 418 - if (secs) 418 + if (secs) { 419 419 ret = test_mb_aead_jiffies(data, enc, *b_size, 420 420 secs, num_mb); 421 - else 421 + cond_resched(); 422 + } else { 422 423 ret = test_mb_aead_cycles(data, enc, *b_size, 423 424 num_mb); 425 + } 424 426 425 427 if (ret) { 426 428 pr_err("%s() failed return code=%d\n", e, ret); ··· 662 660 *b_size + (enc ? 0 : authsize), 663 661 iv); 664 662 665 - if (secs) 663 + if (secs) { 666 664 ret = test_aead_jiffies(req, enc, *b_size, 667 665 secs); 668 - else 666 + cond_resched(); 667 + } else { 669 668 ret = test_aead_cycles(req, enc, *b_size); 669 + } 670 670 671 671 if (ret) { 672 672 pr_err("%s() failed return code=%d\n", e, ret); ··· 880 876 i, speed[i].blen, speed[i].plen, 881 877 speed[i].blen / speed[i].plen); 882 878 883 - if (secs) 879 + if (secs) { 884 880 ret = test_mb_ahash_jiffies(data, speed[i].blen, secs, 885 881 num_mb); 886 - else 882 + cond_resched(); 883 + } else { 887 884 ret = test_mb_ahash_cycles(data, speed[i].blen, num_mb); 885 + } 888 886 889 887 890 888 if (ret) { ··· 1109 1103 1110 1104 ahash_request_set_crypt(req, sg, output, speed[i].plen); 1111 1105 1112 - if (secs) 1106 + if (secs) { 1113 1107 ret = test_ahash_jiffies(req, speed[i].blen, 1114 1108 speed[i].plen, output, secs); 1115 - else 1109 + cond_resched(); 1110 + } else { 1116 1111 ret = test_ahash_cycles(req, speed[i].blen, 1117 1112 speed[i].plen, output); 1113 + } 1118 1114 1119 1115 if (ret) { 1120 1116 pr_err("hashing failed ret=%d\n", ret); ··· 1375 1367 iv); 1376 1368 } 1377 1369 1378 - if (secs) 1370 + if (secs) { 1379 1371 ret = test_mb_acipher_jiffies(data, enc, 1380 1372 *b_size, secs, 1381 1373 num_mb); 1382 - else 1374 + cond_resched(); 1375 + } else { 1383 1376 ret = test_mb_acipher_cycles(data, enc, 1384 1377 *b_size, num_mb); 1378 + } 1385 1379 1386 1380 if (ret) { 1387 1381 pr_err("%s() failed flags=%x\n", e, ··· 1591 1581 1592 1582 skcipher_request_set_crypt(req, sg, sg, *b_size, iv); 1593 1583 1594 - if (secs) 1584 + if (secs) { 1595 1585 ret = test_acipher_jiffies(req, enc, 1596 1586 *b_size, secs); 1597 - else 1587 + cond_resched(); 1588 + } else { 1598 1589 ret = test_acipher_cycles(req, enc, 1599 1590 *b_size); 1591 + } 1600 1592 1601 1593 if (ret) { 1602 1594 pr_err("%s() failed flags=%x\n", e,