aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYang Zhang <yang.z.zhang@Intel.com>2013-08-27 15:26:56 +0200
committerJan Beulich <jbeulich@suse.com>2013-08-27 15:26:56 +0200
commit3e22a868bafcdea79c61741a08703ab2b0e7315b (patch)
tree75e71c12f98c3851355c96bee5b17a24faf4619d
parent24ddc6f52635a6d4bb7a5ff0bbdfa168d8a2cb50 (diff)
downloadxen-3e22a868bafcdea79c61741a08703ab2b0e7315b.tar.gz
xen-3e22a868bafcdea79c61741a08703ab2b0e7315b.tar.bz2
xen-3e22a868bafcdea79c61741a08703ab2b0e7315b.zip
Nested VMX: Check whether interrupt is blocked by TPR
If interrupt is blocked by L1's TPR, L2 should not see it and keep running. Adding the check before L2 to retrive interrupt. Signed-off-by: Yang Zhang <yang.z.zhang@Intel.com> Acked-by: "Dong, Eddie" <eddie.dong@intel.com> master commit: 7fb5c6b9ef22915e3fcac95cd44857f4457ba783 master date: 2013-08-22 10:49:24 +0200
-rw-r--r--xen/arch/x86/hvm/vmx/intr.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/xen/arch/x86/hvm/vmx/intr.c b/xen/arch/x86/hvm/vmx/intr.c
index e376f3c4ee..cab91094f4 100644
--- a/xen/arch/x86/hvm/vmx/intr.c
+++ b/xen/arch/x86/hvm/vmx/intr.c
@@ -165,6 +165,11 @@ static int nvmx_intr_intercept(struct vcpu *v, struct hvm_intack intack)
{
u32 ctrl;
+ /* If blocked by L1's tpr, then nothing to do. */
+ if ( nestedhvm_vcpu_in_guestmode(v) &&
+ hvm_interrupt_blocked(v, intack) == hvm_intblk_tpr )
+ return 1;
+
if ( nvmx_intr_blocked(v) != hvm_intblk_none )
{
enable_intr_window(v, intack);