Patch "KVM: VMX: extract __pi_post_block" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
KVM: VMX: extract __pi_post_block
to the 4.9-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-extract-__pi_post_block.patch
and it can be found in the queue-4.9 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
cd39e1176d320157831ce030b4c869bd2d5eb142Mon Sep 17 00:00:00 2001
From: Paolo Bonzini <[email protected]>
Date: Tue, 6 Jun 2017 12:57:04 +0200
Subject: KVM: VMX: extract __pi_post_block
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Paolo Bonzini <[email protected]>
commit cd39e1176d320157831ce030b4c869bd2d5eb142 upstream.
Simple code movement patch, preparing for the next one.
--- arch/x86/kvm/vmx.c | 71 ++++++++++++++++++++++++++++------------------------- 1 file changed, 38 insertions(+), 33 deletions(-)
arch/x86/kvm/vmx.c +38 -33
@@ -11000,6 +11000,43 @@ static void vmx_enable_log_dirty_pt_maskkvm_mmu_clear_dirty_pt_masked (kvm, memslot, offset, mask); } +static void __pi_post_block (struct kvm_vcpu *vcpu) +{ +struct pi_desc *pi_desc =vcpu_to_pi_desc (vcpu); +struct pi_desc old, new; +unsigned int dest; +unsigned long flags; + +do { + old.control = new.control = pi_desc->control; + + dest =cpu_physical_id (vcpu->cpu); + +if (x2apic_enabled ()) + new.ndst = dest; +else + new.ndst = (dest <<8 ) &0xFF00 ; + +/* Allow posting non-urgent interrupts */ + new.sn =0 ; + +/* set 'NV' to 'notification vector' */ + new.nv =POSTED_INTR_VECTOR ; + }while (cmpxchg (&pi_desc->control, old.control, + new.control) != old.control); + +if (vcpu->pre_pcpu !=-1 ) { +spin_lock_irqsave ( + &per_cpu (blocked_vcpu_on_cpu_lock, + vcpu->pre_pcpu), flags); +list_del (&vcpu->blocked_vcpu_list); +spin_unlock_irqrestore ( + &per_cpu (blocked_vcpu_on_cpu_lock, + vcpu->pre_pcpu), flags); + vcpu->pre_pcpu =-1 ; + } +} +/* * This routine does the following things for vCPU which is going * to be blocked if VT-d PI is enabled.
@@ -11093,44 +11130,12 @@ static int vmx_pre_block(struct kvm_vcpustatic void pi_post_block (struct kvm_vcpu *vcpu) { -struct pi_desc *pi_desc =vcpu_to_pi_desc (vcpu); -struct pi_desc old, new; -unsigned int dest; -unsigned long flags; -if (!kvm_arch_has_assigned_device (vcpu->kvm) || !irq_remapping_cap (IRQ_POSTING_CAP ) || !kvm_vcpu_apicv_active (vcpu))return ; -do { - old.control = new.control = pi_desc->control; - - dest =cpu_physical_id (vcpu->cpu); - -if (x2apic_enabled ()) - new.ndst = dest; -else - new.ndst = (dest <<8 ) &0xFF00 ; - -/* Allow posting non-urgent interrupts */ - new.sn =0 ; - -/* set 'NV' to 'notification vector' */ - new.nv =POSTED_INTR_VECTOR ; - }while (cmpxchg (&pi_desc->control, old.control, - new.control) != old.control); - -if (vcpu->pre_pcpu !=-1 ) { -spin_lock_irqsave ( - &per_cpu (blocked_vcpu_on_cpu_lock, - vcpu->pre_pcpu), flags); -list_del (&vcpu->blocked_vcpu_list); -spin_unlock_irqrestore ( - &per_cpu (blocked_vcpu_on_cpu_lock, - vcpu->pre_pcpu), flags); - vcpu->pre_pcpu =-1 ; - } +__pi_post_block (vcpu); }static void vmx_post_block (struct kvm_vcpu *vcpu)
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/kvm-vmx-simplify-and-fix-vmx_vcpu_pi_load.patch queue-4.9/kvm-vmx-avoid-double-list-add-with-vt-d-posted-interrupts.patch queue-4.9/kvm-nvmx-don-t-allow-l2-to-access-the-hardware-cr8.patch queue-4.9/kvm-x86-handle-async-pf-in-rcu-read-side-critical-sections.patch queue-4.9/kvm-vmx-extract-__pi_post_block.patch queue-4.9/kvm-vmx-do-not-bug-on-out-of-bounds-guest-irq.patch