linux/arch/x86/kvm/x86.h
<<
>>
Prefs
   1#ifndef ARCH_X86_KVM_X86_H
   2#define ARCH_X86_KVM_X86_H
   3
   4#include <linux/kvm_host.h>
   5#include "kvm_cache_regs.h"
   6
   7static inline void kvm_clear_exception_queue(struct kvm_vcpu *vcpu)
   8{
   9        vcpu->arch.exception.pending = false;
  10}
  11
  12static inline void kvm_queue_interrupt(struct kvm_vcpu *vcpu, u8 vector,
  13        bool soft)
  14{
  15        vcpu->arch.interrupt.pending = true;
  16        vcpu->arch.interrupt.soft = soft;
  17        vcpu->arch.interrupt.nr = vector;
  18}
  19
  20static inline void kvm_clear_interrupt_queue(struct kvm_vcpu *vcpu)
  21{
  22        vcpu->arch.interrupt.pending = false;
  23}
  24
  25static inline bool kvm_event_needs_reinjection(struct kvm_vcpu *vcpu)
  26{
  27        return vcpu->arch.exception.pending || vcpu->arch.interrupt.pending ||
  28                vcpu->arch.nmi_injected;
  29}
  30
  31static inline bool kvm_exception_is_soft(unsigned int nr)
  32{
  33        return (nr == BP_VECTOR) || (nr == OF_VECTOR);
  34}
  35
  36struct kvm_cpuid_entry2 *kvm_find_cpuid_entry(struct kvm_vcpu *vcpu,
  37                                             u32 function, u32 index);
  38
  39static inline bool is_protmode(struct kvm_vcpu *vcpu)
  40{
  41        return kvm_read_cr0_bits(vcpu, X86_CR0_PE);
  42}
  43
  44static inline int is_long_mode(struct kvm_vcpu *vcpu)
  45{
  46#ifdef CONFIG_X86_64
  47        return vcpu->arch.efer & EFER_LMA;
  48#else
  49        return 0;
  50#endif
  51}
  52
  53static inline bool mmu_is_nested(struct kvm_vcpu *vcpu)
  54{
  55        return vcpu->arch.walk_mmu == &vcpu->arch.nested_mmu;
  56}
  57
  58static inline int is_pae(struct kvm_vcpu *vcpu)
  59{
  60        return kvm_read_cr4_bits(vcpu, X86_CR4_PAE);
  61}
  62
  63static inline int is_pse(struct kvm_vcpu *vcpu)
  64{
  65        return kvm_read_cr4_bits(vcpu, X86_CR4_PSE);
  66}
  67
  68static inline int is_paging(struct kvm_vcpu *vcpu)
  69{
  70        return kvm_read_cr0_bits(vcpu, X86_CR0_PG);
  71}
  72
  73static inline u32 bit(int bitno)
  74{
  75        return 1 << (bitno & 31);
  76}
  77
  78void kvm_before_handle_nmi(struct kvm_vcpu *vcpu);
  79void kvm_after_handle_nmi(struct kvm_vcpu *vcpu);
  80int kvm_inject_realmode_interrupt(struct kvm_vcpu *vcpu, int irq);
  81
  82void kvm_write_tsc(struct kvm_vcpu *vcpu, u64 data);
  83
  84#endif
  85