summaryrefslogtreecommitdiffstats
path: root/sys/crypto/via/padlock_hash.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2014-06-23 07:37:54 +0000
committerkib <kib@FreeBSD.org>2014-06-23 07:37:54 +0000
commitfe547198b1973809825a6d6e48d12cf6f1c93741 (patch)
treea51002de5281f8a64709f9e315f0f0337d66108c /sys/crypto/via/padlock_hash.c
parentc2a4e94982dc22b2ff3eb85b284839f96f217faf (diff)
downloadFreeBSD-src-fe547198b1973809825a6d6e48d12cf6f1c93741.zip
FreeBSD-src-fe547198b1973809825a6d6e48d12cf6f1c93741.tar.gz
Add FPU_KERN_KTHR flag to fpu_kern_enter(9), which avoids saving FPU
context into memory for the kernel threads which called fpu_kern_thread(9). This allows the fpu_kern_enter() callers to not check for is_fpu_kern_thread() to get the optimization. Apply the flag to padlock(4) and aesni(4). In aesni_cipher_process(), do not leak FPU context state on error. Sponsored by: The FreeBSD Foundation MFC after: 1 week
Diffstat (limited to 'sys/crypto/via/padlock_hash.c')
-rw-r--r--sys/crypto/via/padlock_hash.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/sys/crypto/via/padlock_hash.c b/sys/crypto/via/padlock_hash.c
index 924a9ec..9dffc40 100644
--- a/sys/crypto/via/padlock_hash.c
+++ b/sys/crypto/via/padlock_hash.c
@@ -366,24 +366,18 @@ padlock_hash_process(struct padlock_session *ses, struct cryptodesc *maccrd,
struct cryptop *crp)
{
struct thread *td;
- int error, saved_ctx;
+ int error;
td = curthread;
- if (!is_fpu_kern_thread(0)) {
- error = fpu_kern_enter(td, ses->ses_fpu_ctx, FPU_KERN_NORMAL);
- saved_ctx = 1;
- } else {
- error = 0;
- saved_ctx = 0;
- }
+ error = fpu_kern_enter(td, ses->ses_fpu_ctx, FPU_KERN_NORMAL |
+ FPU_KERN_KTHR);
if (error != 0)
return (error);
if ((maccrd->crd_flags & CRD_F_KEY_EXPLICIT) != 0)
padlock_hash_key_setup(ses, maccrd->crd_key, maccrd->crd_klen);
error = padlock_authcompute(ses, maccrd, crp->crp_buf, crp->crp_flags);
- if (saved_ctx)
- fpu_kern_leave(td, ses->ses_fpu_ctx);
+ fpu_kern_leave(td, ses->ses_fpu_ctx);
return (error);
}
OpenPOWER on IntegriCloud