diff options
author | sam <sam@FreeBSD.org> | 2003-06-27 20:10:03 +0000 |
---|---|---|
committer | sam <sam@FreeBSD.org> | 2003-06-27 20:10:03 +0000 |
commit | 546c8585afe295c59f6ebc668aa2474f04f0e853 (patch) | |
tree | 1795ca137df461f618c0b3de498ae9be9f8d21f0 /sys/netipsec/xform_ah.c | |
parent | e6589a620a554ff7fdfd4d65dcb123787738ffa8 (diff) | |
download | FreeBSD-src-546c8585afe295c59f6ebc668aa2474f04f0e853.zip FreeBSD-src-546c8585afe295c59f6ebc668aa2474f04f0e853.tar.gz |
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).
Diffstat (limited to 'sys/netipsec/xform_ah.c')
-rw-r--r-- | sys/netipsec/xform_ah.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/sys/netipsec/xform_ah.c b/sys/netipsec/xform_ah.c index 40f86a3..02176fd 100644 --- a/sys/netipsec/xform_ah.c +++ b/sys/netipsec/xform_ah.c @@ -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; |