Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[pandora-kernel.git] / arch / x86 / include / asm / kvm_host.h
index ecdc562..d2ac8e2 100644 (file)
@@ -136,6 +136,7 @@ enum kvm_reg_ex {
        VCPU_EXREG_CR3,
        VCPU_EXREG_RFLAGS,
        VCPU_EXREG_CPL,
+       VCPU_EXREG_SEGMENTS,
 };
 
 enum {
@@ -358,7 +359,6 @@ struct kvm_vcpu_arch {
        struct fpu guest_fpu;
        u64 xcr0;
 
-       gva_t mmio_fault_cr2;
        struct kvm_pio_request pio;
        void *pio_data;
 
@@ -385,18 +385,22 @@ struct kvm_vcpu_arch {
        /* emulate context */
 
        struct x86_emulate_ctxt emulate_ctxt;
+       bool emulate_regs_need_sync_to_vcpu;
+       bool emulate_regs_need_sync_from_vcpu;
 
        gpa_t time;
        struct pvclock_vcpu_time_info hv_clock;
        unsigned int hw_tsc_khz;
        unsigned int time_offset;
        struct page *time_page;
-       u64 last_host_tsc;
        u64 last_guest_tsc;
        u64 last_kernel_ns;
        u64 last_tsc_nsec;
        u64 last_tsc_write;
+       u32 virtual_tsc_khz;
        bool tsc_catchup;
+       u32  tsc_catchup_mult;
+       s8   tsc_catchup_shift;
 
        bool nmi_pending;
        bool nmi_injected;
@@ -466,9 +470,6 @@ struct kvm_arch {
        u64 last_tsc_nsec;
        u64 last_tsc_offset;
        u64 last_tsc_write;
-       u32 virtual_tsc_khz;
-       u32 virtual_tsc_mult;
-       s8 virtual_tsc_shift;
 
        struct kvm_xen_hvm_config xen_hvm_config;
 
@@ -606,8 +607,11 @@ struct kvm_x86_ops {
 
        bool (*has_wbinvd_exit)(void);
 
+       void (*set_tsc_khz)(struct kvm_vcpu *vcpu, u32 user_tsc_khz);
        void (*write_tsc_offset)(struct kvm_vcpu *vcpu, u64 offset);
 
+       u64 (*compute_tsc_offset)(struct kvm_vcpu *vcpu, u64 target_tsc);
+
        void (*get_exit_info)(struct kvm_vcpu *vcpu, u64 *info1, u64 *info2);
 
        int (*check_intercept)(struct kvm_vcpu *vcpu,
@@ -652,6 +656,13 @@ u8 kvm_get_guest_memory_type(struct kvm_vcpu *vcpu, gfn_t gfn);
 
 extern bool tdp_enabled;
 
+/* control of guest tsc rate supported? */
+extern bool kvm_has_tsc_control;
+/* minimum supported tsc_khz for guests */
+extern u32  kvm_min_guest_tsc_khz;
+/* maximum supported tsc_khz for guests */
+extern u32  kvm_max_guest_tsc_khz;
+
 enum emulation_result {
        EMULATE_DONE,       /* no further processing */
        EMULATE_DO_MMIO,      /* kvm_run filled with mmio request */
@@ -670,9 +681,6 @@ static inline int emulate_instruction(struct kvm_vcpu *vcpu,
        return x86_emulate_instruction(vcpu, 0, emulation_type, NULL, 0);
 }
 
-void realmode_lgdt(struct kvm_vcpu *vcpu, u16 size, unsigned long address);
-void realmode_lidt(struct kvm_vcpu *vcpu, u16 size, unsigned long address);
-
 void kvm_enable_efer_bits(u64);
 int kvm_get_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 *data);
 int kvm_set_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 data);
@@ -682,8 +690,6 @@ struct x86_emulate_ctxt;
 int kvm_fast_pio_out(struct kvm_vcpu *vcpu, int size, unsigned short port);
 void kvm_emulate_cpuid(struct kvm_vcpu *vcpu);
 int kvm_emulate_halt(struct kvm_vcpu *vcpu);
-int emulate_invlpg(struct kvm_vcpu *vcpu, gva_t address);
-int emulate_clts(struct kvm_vcpu *vcpu);
 int kvm_emulate_wbinvd(struct kvm_vcpu *vcpu);
 
 void kvm_get_segment(struct kvm_vcpu *vcpu, struct kvm_segment *var, int seg);
@@ -746,8 +752,6 @@ gpa_t kvm_mmu_gva_to_gpa_system(struct kvm_vcpu *vcpu, gva_t gva,
 
 int kvm_emulate_hypercall(struct kvm_vcpu *vcpu);
 
-int kvm_fix_hypercall(struct kvm_vcpu *vcpu);
-
 int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t gva, u32 error_code,
                       void *insn, int insn_len);
 void kvm_mmu_invlpg(struct kvm_vcpu *vcpu, gva_t gva);