Commit 2af63299 authored by Horia Geantă's avatar Horia Geantă Committed by Herbert Xu

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: default avatarHoria Geantă <horia.geanta@nxp.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent f6adeef7
...@@ -415,12 +415,14 @@ static void test_mb_aead_speed(const char *algo, int enc, int secs, ...@@ -415,12 +415,14 @@ static void test_mb_aead_speed(const char *algo, int enc, int secs,
} }
if (secs) if (secs) {
ret = test_mb_aead_jiffies(data, enc, *b_size, ret = test_mb_aead_jiffies(data, enc, *b_size,
secs, num_mb); secs, num_mb);
else cond_resched();
} else {
ret = test_mb_aead_cycles(data, enc, *b_size, ret = test_mb_aead_cycles(data, enc, *b_size,
num_mb); num_mb);
}
if (ret) { if (ret) {
pr_err("%s() failed return code=%d\n", e, ret); pr_err("%s() failed return code=%d\n", e, ret);
...@@ -660,11 +662,13 @@ static void test_aead_speed(const char *algo, int enc, unsigned int secs, ...@@ -660,11 +662,13 @@ static void test_aead_speed(const char *algo, int enc, unsigned int secs,
*b_size + (enc ? 0 : authsize), *b_size + (enc ? 0 : authsize),
iv); iv);
if (secs) if (secs) {
ret = test_aead_jiffies(req, enc, *b_size, ret = test_aead_jiffies(req, enc, *b_size,
secs); secs);
else cond_resched();
} else {
ret = test_aead_cycles(req, enc, *b_size); ret = test_aead_cycles(req, enc, *b_size);
}
if (ret) { if (ret) {
pr_err("%s() failed return code=%d\n", e, ret); pr_err("%s() failed return code=%d\n", e, ret);
...@@ -876,11 +880,13 @@ static void test_mb_ahash_speed(const char *algo, unsigned int secs, ...@@ -876,11 +880,13 @@ static void test_mb_ahash_speed(const char *algo, unsigned int secs,
i, speed[i].blen, speed[i].plen, i, speed[i].blen, speed[i].plen,
speed[i].blen / speed[i].plen); speed[i].blen / speed[i].plen);
if (secs) if (secs) {
ret = test_mb_ahash_jiffies(data, speed[i].blen, secs, ret = test_mb_ahash_jiffies(data, speed[i].blen, secs,
num_mb); num_mb);
else cond_resched();
} else {
ret = test_mb_ahash_cycles(data, speed[i].blen, num_mb); ret = test_mb_ahash_cycles(data, speed[i].blen, num_mb);
}
if (ret) { if (ret) {
...@@ -1103,12 +1109,14 @@ static void test_ahash_speed_common(const char *algo, unsigned int secs, ...@@ -1103,12 +1109,14 @@ static void test_ahash_speed_common(const char *algo, unsigned int secs,
ahash_request_set_crypt(req, sg, output, speed[i].plen); ahash_request_set_crypt(req, sg, output, speed[i].plen);
if (secs) if (secs) {
ret = test_ahash_jiffies(req, speed[i].blen, ret = test_ahash_jiffies(req, speed[i].blen,
speed[i].plen, output, secs); speed[i].plen, output, secs);
else cond_resched();
} else {
ret = test_ahash_cycles(req, speed[i].blen, ret = test_ahash_cycles(req, speed[i].blen,
speed[i].plen, output); speed[i].plen, output);
}
if (ret) { if (ret) {
pr_err("hashing failed ret=%d\n", ret); pr_err("hashing failed ret=%d\n", ret);
...@@ -1367,13 +1375,15 @@ static void test_mb_skcipher_speed(const char *algo, int enc, int secs, ...@@ -1367,13 +1375,15 @@ static void test_mb_skcipher_speed(const char *algo, int enc, int secs,
iv); iv);
} }
if (secs) if (secs) {
ret = test_mb_acipher_jiffies(data, enc, ret = test_mb_acipher_jiffies(data, enc,
*b_size, secs, *b_size, secs,
num_mb); num_mb);
else cond_resched();
} else {
ret = test_mb_acipher_cycles(data, enc, ret = test_mb_acipher_cycles(data, enc,
*b_size, num_mb); *b_size, num_mb);
}
if (ret) { if (ret) {
pr_err("%s() failed flags=%x\n", e, pr_err("%s() failed flags=%x\n", e,
...@@ -1581,12 +1591,14 @@ static void test_skcipher_speed(const char *algo, int enc, unsigned int secs, ...@@ -1581,12 +1591,14 @@ static void test_skcipher_speed(const char *algo, int enc, unsigned int secs,
skcipher_request_set_crypt(req, sg, sg, *b_size, iv); skcipher_request_set_crypt(req, sg, sg, *b_size, iv);
if (secs) if (secs) {
ret = test_acipher_jiffies(req, enc, ret = test_acipher_jiffies(req, enc,
*b_size, secs); *b_size, secs);
else cond_resched();
} else {
ret = test_acipher_cycles(req, enc, ret = test_acipher_cycles(req, enc,
*b_size); *b_size);
}
if (ret) { if (ret) {
pr_err("%s() failed flags=%x\n", e, pr_err("%s() failed flags=%x\n", e,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment