summaryrefslogtreecommitdiffstats
path: root/sys/opencrypto
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2010-06-05 16:00:53 +0000
committerkib <kib@FreeBSD.org>2010-06-05 16:00:53 +0000
commit6a41cd83d70cdd49e05e3507e1bff813ffbcdced (patch)
tree645d17d30352ada99870f57e7ca5b1fe43ad629c /sys/opencrypto
parent2d77212fe48ecc0a97a3c56ca4cb8dc37493a066 (diff)
downloadFreeBSD-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.c8
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 (;;) {
/*
OpenPOWER on IntegriCloud