37 lines
1.3 KiB
Diff
37 lines
1.3 KiB
Diff
|
# Commit b35d0a26983843c092bfa353fd6b9aa8c3bf4886
|
||
|
# Date 2013-08-22 10:50:13 +0200
|
||
|
# Author Yang Zhang <yang.z.zhang@Intel.com>
|
||
|
# Committer Jan Beulich <jbeulich@suse.com>
|
||
|
Nested VMX: Force check ISR when L2 is running
|
||
|
|
||
|
External interrupt is allowed to notify CPU only when it has higher
|
||
|
priority than current in servicing interrupt. With APIC-v, the priority
|
||
|
comparing is done by hardware and hardware will inject the interrupt to
|
||
|
VCPU when it recognizes an interrupt. Currently, there is no virtual
|
||
|
APIC-v feature available for L1 to use, so when L2 is running, we still need
|
||
|
to compare interrupt priority with ISR in hypervisor instead via hardware.
|
||
|
|
||
|
Signed-off-by: Yang Zhang <yang.z.zhang@Intel.com>
|
||
|
Acked-by: "Dong, Eddie" <eddie.dong@intel.com>
|
||
|
|
||
|
--- a/xen/arch/x86/hvm/vlapic.c
|
||
|
+++ b/xen/arch/x86/hvm/vlapic.c
|
||
|
@@ -37,6 +37,7 @@
|
||
|
#include <asm/hvm/io.h>
|
||
|
#include <asm/hvm/support.h>
|
||
|
#include <asm/hvm/vmx/vmx.h>
|
||
|
+#include <asm/hvm/nestedhvm.h>
|
||
|
#include <public/hvm/ioreq.h>
|
||
|
#include <public/hvm/params.h>
|
||
|
|
||
|
@@ -1037,7 +1038,8 @@ int vlapic_has_pending_irq(struct vcpu *
|
||
|
if ( irr == -1 )
|
||
|
return -1;
|
||
|
|
||
|
- if ( vlapic_virtual_intr_delivery_enabled() )
|
||
|
+ if ( vlapic_virtual_intr_delivery_enabled() &&
|
||
|
+ !nestedhvm_vcpu_in_guestmode(v) )
|
||
|
return irr;
|
||
|
|
||
|
isr = vlapic_find_highest_isr(vlapic);
|