Assert that IRQs are already disabled when putting a vCPU on a CPU's PI
wakeup list, as opposed to saving/disabling+restoring IRQs.  KVM relies on
IRQs being disabled until the vCPU task is fully scheduled out, i.e. until
the scheduler has dropped all of its per-CPU locks (e.g. for the runqueue),
as attempting to wake the task while it's being scheduled out could lead
to deadlock.
Signed-off-by: Sean Christopherson <seanjc@google.com>
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Reviewed-by: Yan Zhao <yan.y.zhao@intel.com>
Message-ID: <
20250401154727.835231-2-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
 
        struct pi_desc *pi_desc = vcpu_to_pi_desc(vcpu);
        struct vcpu_vmx *vmx = to_vmx(vcpu);
        struct pi_desc old, new;
-       unsigned long flags;
 
-       local_irq_save(flags);
+       lockdep_assert_irqs_disabled();
 
        raw_spin_lock(&per_cpu(wakeup_vcpus_on_cpu_lock, vcpu->cpu));
        list_add_tail(&vmx->pi_wakeup_list,
         */
        if (pi_test_on(&new))
                __apic_send_IPI_self(POSTED_INTR_WAKEUP_VECTOR);
-
-       local_irq_restore(flags);
 }
 
 static bool vmx_needs_pi_wakeup(struct kvm_vcpu *vcpu)