On Thu, 05/28 12:52, Paolo Bonzini wrote: > > > On 28/05/2015 12:46, Fam Zheng wrote: > >> > > >> > Mirror needs to pause/resume the source. It doesn't need to handle > >> > pause/resume of the target, does it? > >> > > >>> > > So, in order for the solution to be general, and complete, this > >>> > > nofitier list > >>> > > approach relies on the listening devices to do the right thing, which > >>> > > requires > >>> > > modifying all of them, and is harder to maintain. > >> > > >> > Isn't it only devices that use aio_set_event_notifier for their > >> > ioeventfd? > > I think it's only the case for qmp_transaction, mirror job needs all block > > devices to implement pause: mirror_run guarantees source and target in sync > > when it returns; but bdrv_swap is deferred to a main loop bottom half - > > what > > if there is a guest write to source in between? > > Whoever uses ioeventfd needs to implement pause/resume, yes---not just > dataplane, also "regular" virtio-blk/virtio-scsi. > > However, everyone else should be okay, because the bottom half runs > immediately and the big QEMU lock is not released in the meanwhile. So > the CPUs have no occasion to run. This needs a comment! >
I'm not sure. It seems timer callbacks also do I/O, for example nvme_process_sq(). Fam