diff options
author | jkim <jkim@FreeBSD.org> | 2011-07-05 18:42:10 +0000 |
---|---|---|
committer | jkim <jkim@FreeBSD.org> | 2011-07-05 18:42:10 +0000 |
commit | 52539f62b4594a26512f2452204d41d1b277552d (patch) | |
tree | 7923bfba8a42e986b0579c1aa267e7fcba336126 | |
parent | 97f9011cd81d27c563028b9f2fe7df9169adde14 (diff) | |
download | FreeBSD-src-52539f62b4594a26512f2452204d41d1b277552d.zip FreeBSD-src-52539f62b4594a26512f2452204d41d1b277552d.tar.gz |
Correct cpu_monitor() and cpu_mwait() for amd64. These instructions take
%rcx as "extensions" in long mode. If any unused bit is set in %rcx, these
instructions cause general protection fault. Fix style nits and synchronize
i386 with amd64.
-rw-r--r-- | sys/amd64/include/cpufunc.h | 12 | ||||
-rw-r--r-- | sys/i386/include/cpufunc.h | 12 |
2 files changed, 14 insertions, 10 deletions
diff --git a/sys/amd64/include/cpufunc.h b/sys/amd64/include/cpufunc.h index 9b61d37..c07e09b 100644 --- a/sys/amd64/include/cpufunc.h +++ b/sys/amd64/include/cpufunc.h @@ -467,16 +467,18 @@ load_es(u_short sel) } static __inline void -cpu_monitor(const void *addr, int extensions, int hints) +cpu_monitor(const void *addr, u_long extensions, u_int hints) { - __asm __volatile("monitor;" - : :"a" (addr), "c" (extensions), "d"(hints)); + + __asm __volatile("monitor" + : : "a" (addr), "c" (extensions), "d" (hints)); } static __inline void -cpu_mwait(int extensions, int hints) +cpu_mwait(u_long extensions, u_int hints) { - __asm __volatile("mwait;" : :"a" (hints), "c" (extensions)); + + __asm __volatile("mwait" : : "a" (hints), "c" (extensions)); } #ifdef _KERNEL diff --git a/sys/i386/include/cpufunc.h b/sys/i386/include/cpufunc.h index d6ec534..7116f76 100644 --- a/sys/i386/include/cpufunc.h +++ b/sys/i386/include/cpufunc.h @@ -133,16 +133,18 @@ enable_intr(void) } static __inline void -cpu_monitor(const void *addr, int extensions, int hints) +cpu_monitor(const void *addr, u_long extensions, u_int hints) { - __asm __volatile("monitor;" - : :"a" (addr), "c" (extensions), "d"(hints)); + + __asm __volatile("monitor" + : : "a" (addr), "c" (extensions), "d" (hints)); } static __inline void -cpu_mwait(int extensions, int hints) +cpu_mwait(u_long extensions, u_int hints) { - __asm __volatile("mwait;" : :"a" (hints), "c" (extensions)); + + __asm __volatile("mwait" : : "a" (hints), "c" (extensions)); } static __inline void |