Check crypto driver capabilities and if the driver operates synchronously

mark crypto requests with ``callback immediately'' to avoid doing a context
switch to return crypto results.  This completes the work to eliminate
context switches for using software crypto via the crypto subsystem (with
symmetric crypto ops).
This commit is contained in:
Sam Leffler 2003-06-27 20:10:03 +00:00
parent 07d0c94a46
commit 1bb98f3b7b
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=116925
3 changed files with 54 additions and 0 deletions

View File

@ -688,6 +688,15 @@ ah_input(struct mbuf *m, struct secasvar *sav, int skip, int protoff)
/* Crypto operation descriptor. */
crp->crp_ilen = m->m_pkthdr.len; /* Total input length. */
crp->crp_flags = CRYPTO_F_IMBUF;
/*
* When using crypto support the operates "synchronously" (e.g.
* software crypto) mark the operation for immediate callback to
* avoid the context switch. This increases the amount of kernel
* stack required to process a frame but we assume there is enough
* to do this.
*/
if (CRYPTO_SESID2CAPS(sav->tdb_cryptoid) & CRYPTOCAP_F_SYNC)
crp->crp_flags |= CRYPTO_F_CBIMM;
crp->crp_buf = (caddr_t) m;
crp->crp_callback = ah_input_cb;
crp->crp_sid = sav->tdb_cryptoid;
@ -1091,6 +1100,15 @@ ah_output(
/* Crypto operation descriptor. */
crp->crp_ilen = m->m_pkthdr.len; /* Total input length. */
crp->crp_flags = CRYPTO_F_IMBUF;
/*
* When using crypto support the operates "synchronously" (e.g.
* software crypto) mark the operation for immediate callback to
* avoid the context switch. This increases the amount of kernel
* stack required to process a frame but we assume there is enough
* to do this.
*/
if (CRYPTO_SESID2CAPS(sav->tdb_cryptoid) & CRYPTOCAP_F_SYNC)
crp->crp_flags |= CRYPTO_F_CBIMM;
crp->crp_buf = (caddr_t) m;
crp->crp_callback = ah_output_cb;
crp->crp_sid = sav->tdb_cryptoid;

View File

@ -396,6 +396,15 @@ esp_input(struct mbuf *m, struct secasvar *sav, int skip, int protoff)
/* Crypto operation descriptor */
crp->crp_ilen = m->m_pkthdr.len; /* Total input length */
crp->crp_flags = CRYPTO_F_IMBUF;
/*
* When using crypto support the operates "synchronously" (e.g.
* software crypto) mark the operation for immediate callback to
* avoid the context switch. This increases the amount of kernel
* stack required to process a frame but we assume there is enough
* to do this.
*/
if (CRYPTO_SESID2CAPS(sav->tdb_cryptoid) & CRYPTOCAP_F_SYNC)
crp->crp_flags |= CRYPTO_F_CBIMM;
crp->crp_buf = (caddr_t) m;
crp->crp_callback = esp_input_cb;
crp->crp_sid = sav->tdb_cryptoid;
@ -834,6 +843,15 @@ esp_output(
/* Crypto operation descriptor. */
crp->crp_ilen = m->m_pkthdr.len; /* Total input length. */
crp->crp_flags = CRYPTO_F_IMBUF;
/*
* When using crypto support the operates "synchronously" (e.g.
* software crypto) mark the operation for immediate callback to
* avoid the context switch. This increases the amount of kernel
* stack required to process a frame but we assume there is enough
* to do this.
*/
if (CRYPTO_SESID2CAPS(sav->tdb_cryptoid) & CRYPTOCAP_F_SYNC)
crp->crp_flags |= CRYPTO_F_CBIMM;
crp->crp_buf = (caddr_t) m;
crp->crp_callback = esp_output_cb;
crp->crp_opaque = (caddr_t) tc;

View File

@ -174,6 +174,15 @@ ipcomp_input(struct mbuf *m, struct secasvar *sav, int skip, int protoff)
/* Crypto operation descriptor */
crp->crp_ilen = m->m_pkthdr.len - (skip + hlen);
crp->crp_flags = CRYPTO_F_IMBUF;
/*
* When using crypto support the operates "synchronously" (e.g.
* software crypto) mark the operation for immediate callback to
* avoid the context switch. This increases the amount of kernel
* stack required to process a frame but we assume there is enough
* to do this.
*/
if (CRYPTO_SESID2CAPS(sav->tdb_cryptoid) & CRYPTOCAP_F_SYNC)
crp->crp_flags |= CRYPTO_F_CBIMM;
crp->crp_buf = (caddr_t) m;
crp->crp_callback = ipcomp_input_cb;
crp->crp_sid = sav->tdb_cryptoid;
@ -478,6 +487,15 @@ ipcomp_output(
/* Crypto operation descriptor */
crp->crp_ilen = m->m_pkthdr.len; /* Total input length */
crp->crp_flags = CRYPTO_F_IMBUF;
/*
* When using crypto support the operates "synchronously" (e.g.
* software crypto) mark the operation for immediate callback to
* avoid the context switch. This increases the amount of kernel
* stack required to process a frame but we assume there is enough
* to do this.
*/
if (CRYPTO_SESID2CAPS(sav->tdb_cryptoid) & CRYPTOCAP_F_SYNC)
crp->crp_flags |= CRYPTO_F_CBIMM;
crp->crp_buf = (caddr_t) m;
crp->crp_callback = ipcomp_output_cb;
crp->crp_opaque = (caddr_t) tc;