Skip to content

Commit b54e470

Browse files
lrq-maxbonzini
authored andcommitted
KVM: x86: Fix SRCU list traversal in kvm_fire_mask_notifiers()
The mask_notifier_list is protected by kvm->irq_srcu, but the traversal in kvm_fire_mask_notifiers() incorrectly uses hlist_for_each_entry_rcu(). This leads to lockdep warnings because the standard RCU iterator expects to be under rcu_read_lock(), not SRCU. Replace the RCU variant with hlist_for_each_entry_srcu() and provide the proper srcu_read_lock_held() annotation to ensure correct synchronization and silence lockdep. Signed-off-by: Li RongQing <lirongqing@baidu.com> Link: https://patch.msgid.link/20260204091206.2617-1-lirongqing@baidu.com Signed-off-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
1 parent f78e627 commit b54e470

1 file changed

Lines changed: 2 additions & 1 deletion

File tree

arch/x86/kvm/ioapic.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,8 @@ void kvm_fire_mask_notifiers(struct kvm *kvm, unsigned irqchip, unsigned pin,
321321
idx = srcu_read_lock(&kvm->irq_srcu);
322322
gsi = kvm_irq_map_chip_pin(kvm, irqchip, pin);
323323
if (gsi != -1)
324-
hlist_for_each_entry_rcu(kimn, &ioapic->mask_notifier_list, link)
324+
hlist_for_each_entry_srcu(kimn, &ioapic->mask_notifier_list, link,
325+
srcu_read_lock_held(&kvm->irq_srcu))
325326
if (kimn->irq == gsi)
326327
kimn->func(kimn, mask);
327328
srcu_read_unlock(&kvm->irq_srcu, idx);

0 commit comments

Comments
 (0)