diff options
author | John Baldwin <jhb@FreeBSD.org> | 2020-07-16 21:30:46 +0000 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2020-07-16 21:30:46 +0000 |
commit | 946b8f6fb02642cc925455132261671398094152 (patch) | |
tree | 4e7c6cd9504c31ee0dd82fa7651d2b6c335cf81b /sys/opencrypto | |
parent | 03caca368a2ada8460adecbff0b2d76823373c74 (diff) | |
download | src-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.c | 30 | ||||
-rw-r--r-- | sys/opencrypto/cryptodev.h | 2 |
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); |