mirror of https://gitee.com/openkylin/linux.git
1123a60416
Linu Cherian reported a WARN in cleanup_srcu_struct() when shutting down a guest running iperf on a VFIO assigned device. This happens because irqfd_wakeup() calls srcu_read_lock(&kvm->irq_srcu) in interrupt context, while a worker thread does the same inside kvm_set_irq(). If the interrupt happens while the worker thread is executing __srcu_read_lock(), updates to the Classic SRCU ->lock_count[] field or the Tree SRCU ->srcu_lock_count[] field can be lost. The docs say you are not supposed to call srcu_read_lock() and srcu_read_unlock() from irq context, but KVM interrupt injection happens from (host) interrupt context and it would be nice if SRCU supported the use case. KVM is using SRCU here not really for the "sleepable" part, but rather due to its IPI-free fast detection of grace periods. It is therefore not desirable to switch back to RCU, which would effectively revert commit |
||
---|---|---|
.. | ||
Makefile | ||
rcu.h | ||
rcu_segcblist.c | ||
rcu_segcblist.h | ||
rcuperf.c | ||
rcutorture.c | ||
srcu.c | ||
srcutiny.c | ||
srcutree.c | ||
sync.c | ||
tiny.c | ||
tiny_plugin.h | ||
tree.c | ||
tree.h | ||
tree_exp.h | ||
tree_plugin.h | ||
tree_trace.c | ||
update.c |