1 /* CPU virtualization extensions handling
3 * This should carry the code for handling CPU virtualization extensions
4 * that needs to live in the kernel core.
6 * Author: Eduardo Habkost <ehabkost@redhat.com>
8 * Copyright (C) 2008, Red Hat Inc.
10 * Contains code from KVM, Copyright (C) 2006 Qumranet, Inc.
12 * This work is licensed under the terms of the GNU GPL, version 2. See
13 * the COPYING file in the top-level directory.
15 #ifndef _ASM_X86_VIRTEX_H
16 #define _ASM_X86_VIRTEX_H
18 #include <asm/processor.h>
19 #include <asm/system.h>
27 static inline int cpu_has_vmx(void)
29 unsigned long ecx = cpuid_ecx(1);
30 return test_bit(5, &ecx); /* CPUID.1:ECX.VMX[bit 5] -> VT */
34 /** Disable VMX on the current CPU
36 * vmxoff causes a undefined-opcode exception if vmxon was not run
37 * on the CPU previously. Only call this function if you know VMX
40 static inline void cpu_vmxoff(void)
42 asm volatile (ASM_VMX_VMXOFF : : : "cc");
43 write_cr4(read_cr4() & ~X86_CR4_VMXE);
46 static inline int cpu_vmx_enabled(void)
48 return read_cr4() & X86_CR4_VMXE;
51 /** Disable VMX if it is enabled on the current CPU
53 * You shouldn't call this if cpu_has_vmx() returns 0.
55 static inline void __cpu_emergency_vmxoff(void)
57 if (cpu_vmx_enabled())
61 /** Disable VMX if it is supported and enabled on the current CPU
63 static inline void cpu_emergency_vmxoff(void)
66 __cpu_emergency_vmxoff();
69 #endif /* _ASM_X86_VIRTEX_H */