aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorIzik Eidus <izike@qumranet.com>2008-03-24 17:14:53 -0400
committerAvi Kivity <avi@qumranet.com>2008-04-27 05:00:39 -0400
commit37817f2982d0f559f90cecc66e150dd9d2c2df05 (patch)
tree45114b5720d7a13bdbe48cc6a75dc6de03d6fcd2 /include
parent2e4d2653497856b102c90153f970c9e344ba96c6 (diff)
KVM: x86: hardware task switching support
This emulates the x86 hardware task switch mechanism in software, as it is unsupported by either vmx or svm. It allows operating systems which use it, like freedos, to run as kvm guests. Signed-off-by: Izik Eidus <izike@qumranet.com> Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'include')
-rw-r--r--include/asm-x86/kvm_host.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h
index 93e809c251ef..7b28cf949d55 100644
--- a/include/asm-x86/kvm_host.h
+++ b/include/asm-x86/kvm_host.h
@@ -492,6 +492,8 @@ int emulator_get_dr(struct x86_emulate_ctxt *ctxt, int dr,
492int emulator_set_dr(struct x86_emulate_ctxt *ctxt, int dr, 492int emulator_set_dr(struct x86_emulate_ctxt *ctxt, int dr,
493 unsigned long value); 493 unsigned long value);
494 494
495int kvm_task_switch(struct kvm_vcpu *vcpu, u16 tss_selector, int reason);
496
495void kvm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0); 497void kvm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0);
496void kvm_set_cr3(struct kvm_vcpu *vcpu, unsigned long cr0); 498void kvm_set_cr3(struct kvm_vcpu *vcpu, unsigned long cr0);
497void kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr0); 499void kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr0);
@@ -657,4 +659,11 @@ static inline void kvm_inject_gp(struct kvm_vcpu *vcpu, u32 error_code)
657#define RMODE_TSS_SIZE \ 659#define RMODE_TSS_SIZE \
658 (TSS_BASE_SIZE + TSS_REDIRECTION_SIZE + TSS_IOPB_SIZE + 1) 660 (TSS_BASE_SIZE + TSS_REDIRECTION_SIZE + TSS_IOPB_SIZE + 1)
659 661
662enum {
663 TASK_SWITCH_CALL = 0,
664 TASK_SWITCH_IRET = 1,
665 TASK_SWITCH_JMP = 2,
666 TASK_SWITCH_GATE = 3,
667};
668
660#endif 669#endif