2008-07-03 15:59:22 +04:00
# ifndef ARCH_X86_KVM_X86_H
# define ARCH_X86_KVM_X86_H
# include <linux/kvm_host.h>
2010-01-21 16:31:48 +03:00
# include "kvm_cache_regs.h"
2008-07-03 15:59:22 +04:00
static inline void kvm_clear_exception_queue ( struct kvm_vcpu * vcpu )
{
vcpu - > arch . exception . pending = false ;
}
2009-05-11 14:35:50 +04:00
static inline void kvm_queue_interrupt ( struct kvm_vcpu * vcpu , u8 vector ,
bool soft )
2008-07-03 16:17:01 +04:00
{
vcpu - > arch . interrupt . pending = true ;
2009-05-11 14:35:50 +04:00
vcpu - > arch . interrupt . soft = soft ;
2008-07-03 16:17:01 +04:00
vcpu - > arch . interrupt . nr = vector ;
}
static inline void kvm_clear_interrupt_queue ( struct kvm_vcpu * vcpu )
{
vcpu - > arch . interrupt . pending = false ;
}
2009-05-11 14:35:46 +04:00
static inline bool kvm_event_needs_reinjection ( struct kvm_vcpu * vcpu )
{
return vcpu - > arch . exception . pending | | vcpu - > arch . interrupt . pending | |
vcpu - > arch . nmi_injected ;
}
2009-05-11 14:35:50 +04:00
static inline bool kvm_exception_is_soft ( unsigned int nr )
{
return ( nr = = BP_VECTOR ) | | ( nr = = OF_VECTOR ) ;
}
2009-07-05 18:39:35 +04:00
struct kvm_cpuid_entry2 * kvm_find_cpuid_entry ( struct kvm_vcpu * vcpu ,
u32 function , u32 index ) ;
2010-01-21 16:31:48 +03:00
static inline bool is_protmode ( struct kvm_vcpu * vcpu )
{
return kvm_read_cr0_bits ( vcpu , X86_CR0_PE ) ;
}
2010-01-21 16:31:49 +03:00
static inline int is_long_mode ( struct kvm_vcpu * vcpu )
{
# ifdef CONFIG_X86_64
2010-01-21 16:31:50 +03:00
return vcpu - > arch . efer & EFER_LMA ;
2010-01-21 16:31:49 +03:00
# else
return 0 ;
# endif
}
2010-09-10 19:30:50 +04:00
static inline bool mmu_is_nested ( struct kvm_vcpu * vcpu )
{
return vcpu - > arch . walk_mmu = = & vcpu - > arch . nested_mmu ;
}
2010-01-21 16:31:49 +03:00
static inline int is_pae ( struct kvm_vcpu * vcpu )
{
return kvm_read_cr4_bits ( vcpu , X86_CR4_PAE ) ;
}
static inline int is_pse ( struct kvm_vcpu * vcpu )
{
return kvm_read_cr4_bits ( vcpu , X86_CR4_PSE ) ;
}
static inline int is_paging ( struct kvm_vcpu * vcpu )
{
return kvm_read_cr0_bits ( vcpu , X86_CR0_PG ) ;
}
2010-04-19 09:32:45 +04:00
void kvm_before_handle_nmi ( struct kvm_vcpu * vcpu ) ;
void kvm_after_handle_nmi ( struct kvm_vcpu * vcpu ) ;
2010-08-20 12:07:17 +04:00
void kvm_write_tsc ( struct kvm_vcpu * vcpu , u64 data ) ;
2008-07-03 15:59:22 +04:00
# endif