summaryrefslogtreecommitdiff
path: root/sys/opencrypto
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2020-07-16 21:30:46 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2020-07-16 21:30:46 +0000
commit946b8f6fb02642cc925455132261671398094152 (patch)
tree4e7c6cd9504c31ee0dd82fa7651d2b6c335cf81b /sys/opencrypto
parent03caca368a2ada8460adecbff0b2d76823373c74 (diff)
downloadsrc-test-946b8f6fb02642cc925455132261671398094152.tar.gz
src-test-946b8f6fb02642cc925455132261671398094152.zip
Add crypto_initreq() and crypto_destroyreq().
These routines are similar to crypto_getreq() and crypto_freereq() but operate on caller-supplied storage instead of allocating crypto requests from a UMA zone. Reviewed by: markj Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D25691
Notes
Notes: svn path=/head/; revision=363262
Diffstat (limited to 'sys/opencrypto')
-rw-r--r--sys/opencrypto/crypto.c30
-rw-r--r--sys/opencrypto/cryptodev.h2
2 files changed, 26 insertions, 6 deletions
diff --git a/sys/opencrypto/crypto.c b/sys/opencrypto/crypto.c
index 3c4ba0ac5a8a5..8f0af929da403 100644
--- a/sys/opencrypto/crypto.c
+++ b/sys/opencrypto/crypto.c
@@ -1734,12 +1734,8 @@ crypto_invoke(struct cryptocap *cap, struct cryptop *crp, int hint)
}
void
-crypto_freereq(struct cryptop *crp)
+crypto_destroyreq(struct cryptop *crp)
{
-
- if (crp == NULL)
- return;
-
#ifdef DIAGNOSTIC
{
struct cryptop *crp2;
@@ -1764,10 +1760,31 @@ crypto_freereq(struct cryptop *crp)
}
}
#endif
+}
+
+void
+crypto_freereq(struct cryptop *crp)
+{
+ if (crp == NULL)
+ return;
+ crypto_destroyreq(crp);
uma_zfree(cryptop_zone, crp);
}
+static void
+_crypto_initreq(struct cryptop *crp, crypto_session_t cses)
+{
+ crp->crp_session = cses;
+}
+
+void
+crypto_initreq(struct cryptop *crp, crypto_session_t cses)
+{
+ memset(crp, 0, sizeof(*crp));
+ _crypto_initreq(crp, cses);
+}
+
struct cryptop *
crypto_getreq(crypto_session_t cses, int how)
{
@@ -1775,7 +1792,8 @@ crypto_getreq(crypto_session_t cses, int how)
MPASS(how == M_WAITOK || how == M_NOWAIT);
crp = uma_zalloc(cryptop_zone, how | M_ZERO);
- crp->crp_session = cses;
+ if (crp != NULL)
+ _crypto_initreq(crp, cses);
return (crp);
}
diff --git a/sys/opencrypto/cryptodev.h b/sys/opencrypto/cryptodev.h
index a272aec6cb1ba..edde16cf73270 100644
--- a/sys/opencrypto/cryptodev.h
+++ b/sys/opencrypto/cryptodev.h
@@ -622,6 +622,8 @@ extern void crypto_done(struct cryptop *crp);
extern void crypto_kdone(struct cryptkop *);
extern int crypto_getfeat(int *);
+extern void crypto_destroyreq(struct cryptop *crp);
+extern void crypto_initreq(struct cryptop *crp, crypto_session_t cses);
extern void crypto_freereq(struct cryptop *crp);
extern struct cryptop *crypto_getreq(crypto_session_t cses, int how);