summaryrefslogtreecommitdiffstats
path: root/crypto/api.c
diff options
context:
space:
mode:
authorGilad Ben-Yossef <gilad@benyossef.com>2017-10-18 03:00:38 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2017-11-03 10:11:18 -0400
commitada69a1639eca54ff74d839a6513c43db8d57d70 (patch)
treef22353657a65c0b90d9412224ee508898d9c874a /crypto/api.c
parent3d549e325e3c7dd294b96720f22cbc39ec2e02e9 (diff)
crypto: introduce crypto wait for async op
Invoking a possibly async. crypto op and waiting for completion while correctly handling backlog processing is a common task in the crypto API implementation and outside users of it. This patch adds a generic implementation for doing so in preparation for using it across the board instead of hand rolled versions. Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com> CC: Eric Biggers <ebiggers3@gmail.com> CC: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/api.c')
-rw-r--r--crypto/api.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/crypto/api.c b/crypto/api.c
index 941cd4c6c7ec..2a2479d168aa 100644
--- a/crypto/api.c
+++ b/crypto/api.c
@@ -24,6 +24,7 @@
24#include <linux/sched/signal.h> 24#include <linux/sched/signal.h>
25#include <linux/slab.h> 25#include <linux/slab.h>
26#include <linux/string.h> 26#include <linux/string.h>
27#include <linux/completion.h>
27#include "internal.h" 28#include "internal.h"
28 29
29LIST_HEAD(crypto_alg_list); 30LIST_HEAD(crypto_alg_list);
@@ -595,5 +596,17 @@ int crypto_has_alg(const char *name, u32 type, u32 mask)
595} 596}
596EXPORT_SYMBOL_GPL(crypto_has_alg); 597EXPORT_SYMBOL_GPL(crypto_has_alg);
597 598
599void crypto_req_done(struct crypto_async_request *req, int err)
600{
601 struct crypto_wait *wait = req->data;
602
603 if (err == -EINPROGRESS)
604 return;
605
606 wait->err = err;
607 complete(&wait->completion);
608}
609EXPORT_SYMBOL_GPL(crypto_req_done);
610
598MODULE_DESCRIPTION("Cryptographic core API"); 611MODULE_DESCRIPTION("Cryptographic core API");
599MODULE_LICENSE("GPL"); 612MODULE_LICENSE("GPL");