diff options
author | Avi Kivity <avi@redhat.com> | 2010-07-22 05:54:21 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2010-10-24 04:52:51 -0400 |
commit | 537b37e2674b7e4390a490e03cae53ca9ca99e30 (patch) | |
tree | c69f89afe9ba789af5bb53530fe6f5255f5aa939 /arch | |
parent | 51aa01d13d4a64422cf8095205fc4a02322aca2c (diff) |
KVM: VMX: Move real-mode interrupt injection fixup to vmx_complete_interrupts()
This allows reuse of vmx_complete_interrupts() for cancelling injections.
Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kvm/vmx.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 927d8404505a..541f0d2412b4 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -182,6 +182,7 @@ static int init_rmode(struct kvm *kvm); | |||
182 | static u64 construct_eptp(unsigned long root_hpa); | 182 | static u64 construct_eptp(unsigned long root_hpa); |
183 | static void kvm_cpu_vmxon(u64 addr); | 183 | static void kvm_cpu_vmxon(u64 addr); |
184 | static void kvm_cpu_vmxoff(void); | 184 | static void kvm_cpu_vmxoff(void); |
185 | static void fixup_rmode_irq(struct vcpu_vmx *vmx); | ||
185 | 186 | ||
186 | static DEFINE_PER_CPU(struct vmcs *, vmxarea); | 187 | static DEFINE_PER_CPU(struct vmcs *, vmxarea); |
187 | static DEFINE_PER_CPU(struct vmcs *, current_vmcs); | 188 | static DEFINE_PER_CPU(struct vmcs *, current_vmcs); |
@@ -3828,11 +3829,15 @@ static void vmx_recover_nmi_blocking(struct vcpu_vmx *vmx) | |||
3828 | 3829 | ||
3829 | static void vmx_complete_interrupts(struct vcpu_vmx *vmx) | 3830 | static void vmx_complete_interrupts(struct vcpu_vmx *vmx) |
3830 | { | 3831 | { |
3831 | u32 idt_vectoring_info = vmx->idt_vectoring_info; | 3832 | u32 idt_vectoring_info; |
3832 | u8 vector; | 3833 | u8 vector; |
3833 | int type; | 3834 | int type; |
3834 | bool idtv_info_valid; | 3835 | bool idtv_info_valid; |
3835 | 3836 | ||
3837 | if (vmx->rmode.irq.pending) | ||
3838 | fixup_rmode_irq(vmx); | ||
3839 | |||
3840 | idt_vectoring_info = vmx->idt_vectoring_info; | ||
3836 | idtv_info_valid = idt_vectoring_info & VECTORING_INFO_VALID_MASK; | 3841 | idtv_info_valid = idt_vectoring_info & VECTORING_INFO_VALID_MASK; |
3837 | 3842 | ||
3838 | vmx->vcpu.arch.nmi_injected = false; | 3843 | vmx->vcpu.arch.nmi_injected = false; |
@@ -4040,8 +4045,6 @@ static void vmx_vcpu_run(struct kvm_vcpu *vcpu) | |||
4040 | vcpu->arch.regs_dirty = 0; | 4045 | vcpu->arch.regs_dirty = 0; |
4041 | 4046 | ||
4042 | vmx->idt_vectoring_info = vmcs_read32(IDT_VECTORING_INFO_FIELD); | 4047 | vmx->idt_vectoring_info = vmcs_read32(IDT_VECTORING_INFO_FIELD); |
4043 | if (vmx->rmode.irq.pending) | ||
4044 | fixup_rmode_irq(vmx); | ||
4045 | 4048 | ||
4046 | asm("mov %0, %%ds; mov %0, %%es" : : "r"(__USER_DS)); | 4049 | asm("mov %0, %%ds; mov %0, %%es" : : "r"(__USER_DS)); |
4047 | vmx->launched = 1; | 4050 | vmx->launched = 1; |