This is v2 of the series. It was actually got forgotten for months until it was used to identify another potential issue of bql usage here (besides it could still be helpful when debugging a previous kvm dirty ring issue in that series):
https://lore.kernel.org/qemu-devel/ch0pr02mb7898bbd73d0f3f7d5003bb178b...@ch0pr02mb7898.namprd02.prod.outlook.com/ So I figured maybe it's still worth to have it, hence a repost. There're some changes against v1: - patch "cpus: Introduce qemu_cond_timedwait_iothread()" is dropped because it's introduced in another commit already (b0c3cf9407e64). - two more patches to move do_run_on_cpu() into softmmu/ to fix a linux-user compliation issue. Please review, thanks. === Original Cover letter === This is a continuous work of previous discussion on memory transactions [1]. It should be helpful to fail QEMU far earlier if there's misuse of BQL against the QEMU memory model. One example is run_on_cpu() during memory commit. That'll work previously, but it'll fail with very strange errors (like KVM ioctl failure due to memslot already existed, and it's not guaranteed to trigger constantly). Now it'll directly fail when run_on_cpu() is called. Please have a look, thanks. [1] https://lists.gnu.org/archive/html/qemu-devel/2020-04/msg03205.html Peter Xu (9): cpus: Export queue work related fields to cpu.h cpus: Move do_run_on_cpu into softmmu/cpus.c memory: Introduce memory_region_transaction_{push|pop}() memory: Don't do topology update in memory finalize() cpus: Use qemu_cond_wait_iothread() where proper cpus: Remove the mutex parameter from do_run_on_cpu() cpus: Introduce qemu_mutex_unlock_iothread_prepare() memory: Assert on no ongoing memory transaction before release BQL memory: Delay the transaction pop() until commit completed cpus-common.c | 36 ++--------------------- include/exec/memory-internal.h | 1 + include/hw/core/cpu.h | 22 ++++++-------- softmmu/cpus.c | 42 ++++++++++++++++++++++++--- softmmu/memory.c | 53 ++++++++++++++++++++++++++++++---- 5 files changed, 97 insertions(+), 57 deletions(-) -- 2.31.1