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/opencrypto | |
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/opencrypto')
-rw-r--r-- | sys/opencrypto/crypto.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/opencrypto/crypto.c b/sys/opencrypto/crypto.c index 5810780..53c11e6 100644 --- a/sys/opencrypto/crypto.c +++ b/sys/opencrypto/crypto.c @@ -82,6 +82,10 @@ __FBSDID("$FreeBSD$"); #include <sys/bus.h> #include "cryptodev_if.h" +#if defined(__i386__) || defined(__amd64__) +#include <machine/pcb.h> +#endif + SDT_PROVIDER_DEFINE(opencrypto); /* @@ -1241,6 +1245,10 @@ crypto_proc(void) u_int32_t hid; int result, hint; +#if defined(__i386__) || defined(__amd64__) + fpu_kern_thread(FPU_KERN_NORMAL); +#endif + CRYPTO_Q_LOCK(); for (;;) { /* |