virtext.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /* CPU virtualization extensions handling
  2. *
  3. * This should carry the code for handling CPU virtualization extensions
  4. * that needs to live in the kernel core.
  5. *
  6. * Author: Eduardo Habkost <ehabkost@redhat.com>
  7. *
  8. * Copyright (C) 2008, Red Hat Inc.
  9. *
  10. * Contains code from KVM, Copyright (C) 2006 Qumranet, Inc.
  11. *
  12. * This work is licensed under the terms of the GNU GPL, version 2. See
  13. * the COPYING file in the top-level directory.
  14. */
  15. #ifndef _ASM_X86_VIRTEX_H
  16. #define _ASM_X86_VIRTEX_H
  17. #include <asm/processor.h>
  18. #include <asm/system.h>
  19. #include <asm/vmx.h>
  20. /*
  21. * VMX functions:
  22. */
  23. static inline int cpu_has_vmx(void)
  24. {
  25. unsigned long ecx = cpuid_ecx(1);
  26. return test_bit(5, &ecx); /* CPUID.1:ECX.VMX[bit 5] -> VT */
  27. }
  28. /** Disable VMX on the current CPU
  29. *
  30. * vmxoff causes a undefined-opcode exception if vmxon was not run
  31. * on the CPU previously. Only call this function if you know VMX
  32. * is enabled.
  33. */
  34. static inline void cpu_vmxoff(void)
  35. {
  36. asm volatile (ASM_VMX_VMXOFF : : : "cc");
  37. write_cr4(read_cr4() & ~X86_CR4_VMXE);
  38. }
  39. #endif /* _ASM_X86_VIRTEX_H */