summaryrefslogtreecommitdiff
path: root/usr/src/uts/intel/sys/cpu.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/intel/sys/cpu.h')
-rw-r--r--usr/src/uts/intel/sys/cpu.h20
1 files changed, 19 insertions, 1 deletions
diff --git a/usr/src/uts/intel/sys/cpu.h b/usr/src/uts/intel/sys/cpu.h
index 8f4d5af138..9a4217d1ee 100644
--- a/usr/src/uts/intel/sys/cpu.h
+++ b/usr/src/uts/intel/sys/cpu.h
@@ -39,9 +39,15 @@
*/
#include <sys/bustypes.h>
#include <sys/inttypes.h>
-#if defined(__GNUC__) && defined(_ASM_INLINES) && defined(_KERNEL)
+
+#if defined(_KERNEL)
+#if defined(__xpv)
+#include <sys/hypervisor.h>
+#endif
+#if defined(__GNUC__) && defined(_ASM_INLINES)
#include <asm/cpu.h>
#endif
+#endif /* _KERNEL */
#ifdef __cplusplus
extern "C" {
@@ -59,7 +65,19 @@ extern void i86_mwait(uint32_t data, uint32_t extensions);
/*
* Used to insert cpu-dependent instructions into spin loops
*/
+#if defined(__xpv)
+extern int xpv_panicking;
+#define SMT_PAUSE() \
+ { \
+ if (IN_XPV_PANIC()) \
+ ht_pause(); \
+ else \
+ (void) HYPERVISOR_yield(); \
+ }
+
+#else
#define SMT_PAUSE() ht_pause()
+#endif
#endif /* _KERNEL */