diff options
author | kib <kib@FreeBSD.org> | 2010-06-05 16:00:53 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2010-06-05 16:00:53 +0000 |
commit | 6a41cd83d70cdd49e05e3507e1bff813ffbcdced (patch) | |
tree | 645d17d30352ada99870f57e7ca5b1fe43ad629c /sys/crypto/via/padlock.h | |
parent | 2d77212fe48ecc0a97a3c56ca4cb8dc37493a066 (diff) | |
download | FreeBSD-src-6a41cd83d70cdd49e05e3507e1bff813ffbcdced.zip FreeBSD-src-6a41cd83d70cdd49e05e3507e1bff813ffbcdced.tar.gz |
Use the fpu_kern_enter() interface to properly separate usermode FPU
context from in-kernel execution of padlock instructions and to handle
spurious FPUDNA exceptions that sometime are raised when doing padlock
calculations.
Globally mark crypto(9) kthread as using FPU.
Reviewed by: pjd
Hardware provided by: Sentex Communications
Tested by: pho
PR: amd64/135014
MFC after: 1 month
Diffstat (limited to 'sys/crypto/via/padlock.h')
-rw-r--r-- | sys/crypto/via/padlock.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sys/crypto/via/padlock.h b/sys/crypto/via/padlock.h index 7d928ba..c8ee9bd 100644 --- a/sys/crypto/via/padlock.h +++ b/sys/crypto/via/padlock.h @@ -32,6 +32,12 @@ #include <opencrypto/cryptodev.h> #include <crypto/rijndael/rijndael.h> +#if defined(__i386__) +#include <machine/npx.h> +#elif defined(__amd64__) +#include <machine/fpu.h> +#endif + union padlock_cw { uint64_t raw; struct { @@ -70,6 +76,7 @@ struct padlock_session { int ses_used; uint32_t ses_id; TAILQ_ENTRY(padlock_session) ses_next; + struct fpu_kern_ctx ses_fpu_ctx; }; #define PADLOCK_ALIGN(p) (void *)(roundup2((uintptr_t)(p), 16)) |