On Thu, Feb 05, 2026 at 04:40:10AM -0500, lirongqing wrote: > From: Li RongQing <[email protected]> > > Replace hlist_for_each_entry_rcu() with hlist_for_each_entry_srcu() > in mshv_irqfd_resampler_ack() to correctly handle SRCU-protected > linked list traversal. > > The function uses SRCU (sleepable RCU) synchronization via > partition->pt_irq_srcu, but was incorrectly using the RCU variant > for list iteration. This could lead to race conditions when the > list is modified concurrently. > > Also add srcu_read_lock_held() assertion as required by > hlist_for_each_entry_srcu() to ensure we're in the proper > read-side critical section. > > Signed-off-by: Li RongQing <[email protected]>
Reviewed-by: Anirudh Rayabharam (Microsoft) <[email protected]> > --- > drivers/hv/mshv_eventfd.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/hv/mshv_eventfd.c b/drivers/hv/mshv_eventfd.c > index 0b75ff1..6d176ed 100644 > --- a/drivers/hv/mshv_eventfd.c > +++ b/drivers/hv/mshv_eventfd.c > @@ -87,8 +87,9 @@ static void mshv_irqfd_resampler_ack(struct > mshv_irq_ack_notifier *mian) > > idx = srcu_read_lock(&partition->pt_irq_srcu); > > - hlist_for_each_entry_rcu(irqfd, &resampler->rsmplr_irqfd_list, > - irqfd_resampler_hnode) { > + hlist_for_each_entry_srcu(irqfd, &resampler->rsmplr_irqfd_list, > + irqfd_resampler_hnode, > + srcu_read_lock_held(&partition->pt_irq_srcu)) { > if > (hv_should_clear_interrupt(irqfd->irqfd_lapic_irq.lapic_control.interrupt_type)) > hv_call_clear_virtual_interrupt(partition->pt_id); > > -- > 2.9.4 >
