From 546c8585afe295c59f6ebc668aa2474f04f0e853 Mon Sep 17 00:00:00 2001 From: sam Date: Fri, 27 Jun 2003 20:10:03 +0000 Subject: 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). --- sys/netipsec/xform_ah.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'sys/netipsec/xform_ah.c') 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; -- cgit v1.1