This serie of patches bring thread safety to the smaller APIs used by block-copy, namely ratelimit, progressmeter, co-shared-resource and aiotask. The end goal is to reduce the usage of AioContexlock in block-copy, by introducing smaller granularity locks thus on making the block layer thread safe.
This serie depends on Paolo's coroutine_sleep API. What's missing for block-copy to be fully thread-safe is fixing the CoSleep API to allow cross-thread sleep and wakeup. Paolo is working on it and will post the patches once his new CoSleep API is accepted. Patches 1-3 work on ratelimit (they are also based on the first ratelimit patch sent by Paolo), 4 covers progressmeter and 5 co-shared-resources. Based-on: <20210503112550.478521-1-pbonz...@redhat.com> Based-on: <20210413125533.217440-1-pbonz...@redhat.com> Signed-off-by: Emanuele Giuseppe Esposito <eespo...@redhat.com> --- v1 -> v2: * Implement progressmeter as a separate .c file (was just an header), but keep the struct public, to avoid heap allocations [Vladimir, Paolo] * Drop for now the Aiopool patches of v2 [Paolo, Stefan] Emanuele Giuseppe Esposito (2): progressmeter: protect with a mutex co-shared-resource: protect with a mutex Paolo Bonzini (3): ratelimit: treat zero speed as unlimited block-copy: let ratelimit handle a speed of 0 blockjob: let ratelimit handle a speed of 0 block/block-copy.c | 28 ++++++-------- block/meson.build | 1 + block/progress_meter.c | 64 +++++++++++++++++++++++++++++++ blockjob.c | 46 +++++++++++++--------- include/qemu/co-shared-resource.h | 4 +- include/qemu/progress_meter.h | 34 ++++++++-------- include/qemu/ratelimit.h | 12 +++++- job-qmp.c | 8 +++- job.c | 3 ++ qemu-img.c | 9 +++-- util/qemu-co-shared-resource.c | 27 ++++++++++--- 11 files changed, 171 insertions(+), 65 deletions(-) create mode 100644 block/progress_meter.c -- 2.30.2