On 20/04/20 23:00, Peter Xu wrote:
>
> I'm still uncertain how the dirty ring branch can easily trigger this, however
> the backtrace looks really odd to me in that we're going to do memory commit
> and even sending KVM ioctls during finalize(), especially in the RCU thread...
> I never expected that.
Short answer: it is really hard to not trigger finalize() from an RCU
callback, and it's the reason why the RCU thread takes the big QEMU lock.
However, instead of memory_region_transaction_commit,
memory_region_finalize probably should do something like
--memory_region_transaction_depth;
assert (memory_region_transaction_depth ||
(!memory_region_update_pending &&
!ioeventfd_update_pending));
Paolo