summaryrefslogtreecommitdiffstats
path: root/sys/crypto/via/padlock.h
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/crypto/via/padlock.h
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/crypto/via/padlock.h')
-rw-r--r--sys/crypto/via/padlock.h7
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))
OpenPOWER on IntegriCloud