Changeset View
Changeset View
Standalone View
Standalone View
head/sys/opencrypto/crypto.c
Show First 20 Lines • Show All 1,728 Lines • ▼ Show 20 Lines | if (cap->cc_flags & CRYPTOCAP_F_CLEANUP) { | ||||
/* | /* | ||||
* Invoke the driver to process the request. | * Invoke the driver to process the request. | ||||
*/ | */ | ||||
return CRYPTODEV_PROCESS(cap->cc_dev, crp, hint); | return CRYPTODEV_PROCESS(cap->cc_dev, crp, hint); | ||||
} | } | ||||
} | } | ||||
void | void | ||||
crypto_freereq(struct cryptop *crp) | crypto_destroyreq(struct cryptop *crp) | ||||
{ | { | ||||
if (crp == NULL) | |||||
return; | |||||
#ifdef DIAGNOSTIC | #ifdef DIAGNOSTIC | ||||
{ | { | ||||
struct cryptop *crp2; | struct cryptop *crp2; | ||||
struct crypto_ret_worker *ret_worker; | struct crypto_ret_worker *ret_worker; | ||||
CRYPTO_Q_LOCK(); | CRYPTO_Q_LOCK(); | ||||
TAILQ_FOREACH(crp2, &crp_q, crp_next) { | TAILQ_FOREACH(crp2, &crp_q, crp_next) { | ||||
KASSERT(crp2 != crp, | KASSERT(crp2 != crp, | ||||
("Freeing cryptop from the crypto queue (%p).", | ("Freeing cryptop from the crypto queue (%p).", | ||||
crp)); | crp)); | ||||
} | } | ||||
CRYPTO_Q_UNLOCK(); | CRYPTO_Q_UNLOCK(); | ||||
FOREACH_CRYPTO_RETW(ret_worker) { | FOREACH_CRYPTO_RETW(ret_worker) { | ||||
CRYPTO_RETW_LOCK(ret_worker); | CRYPTO_RETW_LOCK(ret_worker); | ||||
TAILQ_FOREACH(crp2, &ret_worker->crp_ret_q, crp_next) { | TAILQ_FOREACH(crp2, &ret_worker->crp_ret_q, crp_next) { | ||||
KASSERT(crp2 != crp, | KASSERT(crp2 != crp, | ||||
("Freeing cryptop from the return queue (%p).", | ("Freeing cryptop from the return queue (%p).", | ||||
crp)); | crp)); | ||||
} | } | ||||
CRYPTO_RETW_UNLOCK(ret_worker); | CRYPTO_RETW_UNLOCK(ret_worker); | ||||
} | } | ||||
} | } | ||||
#endif | #endif | ||||
} | |||||
void | |||||
crypto_freereq(struct cryptop *crp) | |||||
{ | |||||
if (crp == NULL) | |||||
return; | |||||
crypto_destroyreq(crp); | |||||
uma_zfree(cryptop_zone, 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 * | struct cryptop * | ||||
crypto_getreq(crypto_session_t cses, int how) | crypto_getreq(crypto_session_t cses, int how) | ||||
{ | { | ||||
struct cryptop *crp; | struct cryptop *crp; | ||||
MPASS(how == M_WAITOK || how == M_NOWAIT); | MPASS(how == M_WAITOK || how == M_NOWAIT); | ||||
crp = uma_zalloc(cryptop_zone, how | M_ZERO); | crp = uma_zalloc(cryptop_zone, how | M_ZERO); | ||||
crp->crp_session = cses; | if (crp != NULL) | ||||
_crypto_initreq(crp, cses); | |||||
return (crp); | return (crp); | ||||
} | } | ||||
/* | /* | ||||
* Invoke the callback on behalf of the driver. | * Invoke the callback on behalf of the driver. | ||||
*/ | */ | ||||
void | void | ||||
crypto_done(struct cryptop *crp) | crypto_done(struct cryptop *crp) | ||||
▲ Show 20 Lines • Show All 479 Lines • Show Last 20 Lines |