Patch "kvm: vmx: check apicv is active before using VT-d posted interrupt" has been added to the 4.6-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
kvm: vmx: check apicv is active before using VT-d posted interrupt
to the 4.6-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
kvm-vmx-check-apicv-is-active-before-using-vt-d-posted-interrupt.patch
and it can be found in the queue-4.6 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
a0052191624e9bf8a8f9dc41b92ab5f252566c3cMon Sep 17 00:00:00 2001
From: Yang Zhang <[email protected]>
Date: Mon, 13 Jun 2016 09:56:56 +0800
Subject: kvm: vmx: check apicv is active before using VT-d posted interrupt
From: Yang Zhang <[email protected]>
commit a0052191624e9bf8a8f9dc41b92ab5f252566c3c upstream.
VT-d posted interrupt is relying on the CPU side's posted interrupt. Need to check whether VCPU's APICv is active before enabing VT-d posted interrupt.
--- arch/x86/kvm/vmx.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-)
arch/x86/kvm/vmx.c +10 -5
@@ -2072,7 +2072,8 @@ static void vmx_vcpu_pi_load(struct kvm_unsigned int dest;if (!kvm_arch_has_assigned_device (vcpu->kvm) || - !irq_remapping_cap (IRQ_POSTING_CAP )) + !irq_remapping_cap (IRQ_POSTING_CAP ) || + !kvm_vcpu_apicv_active (vcpu))return ; do {
@@ -2180,7 +2181,8 @@ static void vmx_vcpu_pi_put(struct kvm_vstruct pi_desc *pi_desc =vcpu_to_pi_desc (vcpu);if (!kvm_arch_has_assigned_device (vcpu->kvm) || - !irq_remapping_cap (IRQ_POSTING_CAP )) + !irq_remapping_cap (IRQ_POSTING_CAP ) || + !kvm_vcpu_apicv_active (vcpu))return ;/* Set SN when the vCPU is preempted */
@@ -10702,7 +10704,8 @@ static int vmx_pre_block(struct kvm_vcpustruct pi_desc *pi_desc =vcpu_to_pi_desc (vcpu);if (!kvm_arch_has_assigned_device (vcpu->kvm) || - !irq_remapping_cap (IRQ_POSTING_CAP )) + !irq_remapping_cap (IRQ_POSTING_CAP ) || + !kvm_vcpu_apicv_active (vcpu))return 0 ; vcpu->pre_pcpu = vcpu->cpu;
@@ -10768,7 +10771,8 @@ static void vmx_post_block(struct kvm_vcunsigned long flags;if (!kvm_arch_has_assigned_device (vcpu->kvm) || - !irq_remapping_cap (IRQ_POSTING_CAP )) + !irq_remapping_cap (IRQ_POSTING_CAP ) || + !kvm_vcpu_apicv_active (vcpu))return ; do {
@@ -10821,7 +10825,8 @@ static int vmx_update_pi_irte(struct kvmint idx, ret = -EINVAL ;if (!kvm_arch_has_assigned_device (kvm) || - !irq_remapping_cap (IRQ_POSTING_CAP )) + !irq_remapping_cap (IRQ_POSTING_CAP ) || + !kvm_vcpu_apicv_active (kvm->vcpus[0 ]))return 0 ; idx =srcu_read_lock (&kvm->irq_srcu);
Patches currently in stable-queue which might be from [email protected] are
queue-4.6/kvm-vmx-check-apicv-is-active-before-using-vt-d-posted-interrupt.patch