This patch changes the NDST filed of Posted-Interrupts Descriptor after VCPU is scheduled to another physical CPU. Signed-off-by: Feng Wu <feng.wu@xxxxxxxxx> --- arch/x86/kvm/vmx.c | 25 +++++++++++++++++++++++++ 1 files changed, 25 insertions(+), 0 deletions(-) diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 4c1a966..fa77714 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -1906,6 +1906,31 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu) vmcs_writel(HOST_IA32_SYSENTER_ESP, sysenter_esp); /* 22.2.3 */ vmx->loaded_vmcs->cpu = cpu; } + + if (irq_post_enabled && (vcpu->cpu != cpu)) { + struct pi_desc *pi_desc = vcpu_to_pi_desc(vcpu); + struct pi_desc old, new; + unsigned int dest; + + memset(&old, 0, sizeof(old)); + memset(&new, 0, sizeof(new)); + + pi_set_sn(pi_desc); + + do { + old.control = new.control = pi_desc->control; + + dest = cpu_physical_id(cpu); + + if (x2apic_mode) + new.ndst = dest; + else + new.ndst = (dest << 8) & 0xFF00; + + } while (cmpxchg(&pi_desc->control, old.control, + new.control) != old.control); + pi_clear_sn(pi_desc); + } } static void vmx_vcpu_put(struct kvm_vcpu *vcpu) -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html