qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/14] aio: remove AioContext lock
@ 2023-12-05 18:19 Stefan Hajnoczi
  2023-12-05 18:19 ` [PATCH v2 01/14] virtio-scsi: replace AioContext lock with tmf_bh_lock Stefan Hajnoczi
                   ` (14 more replies)
  0 siblings, 15 replies; 31+ messages in thread
From: Stefan Hajnoczi @ 2023-12-05 18:19 UTC (permalink / raw)
  To: qemu-devel
  Cc: Philippe Mathieu-Daudé, Stefan Hajnoczi,
	Vladimir Sementsov-Ogievskiy, Cleber Rosa, Xie Changlong,
	Paul Durrant, Ari Sundholm, Jason Wang, Eric Blake, John Snow,
	Eduardo Habkost, Wen Congyang, Alberto Garcia, Anthony Perard,
	Michael S. Tsirkin, Stefano Stabellini, qemu-block, Juan Quintela,
	Paolo Bonzini, Kevin Wolf, Coiby Xu, Fabiano Rosas, Hanna Reitz,
	Zhang Chen, Daniel P. Berrangé, Pavel Dovgalyuk, Peter Xu,
	Emanuele Giuseppe Esposito, Fam Zheng, Leonardo Bras,
	David Hildenbrand, Li Zhijian, xen-devel

v2:
- Add Patch 2 "scsi: assert that callbacks run in the correct AioContext" [Kevin]
- Add Patch 7 "block: remove bdrv_co_lock()" [Eric and Kevin]
- Remove stray goto label in Patch 8 [Kevin]
- Fix "eeked" -> "eked" typo in Patch 10 [Eric]

This series removes the AioContext locking APIs from QEMU.
aio_context_acquire() and aio_context_release() are currently only needed to
support the locking discipline required by AIO_POLL_WHILE() (except for a stray
user that I converted in Patch 1). AIO_POLL_WHILE() doesn't really need the
AioContext lock anymore, so it's possible to remove the API. This is a nice
simplification because the AioContext locking rules were sometimes tricky or
underspecified, leading to many bugs of the years.

This patch series removes these APIs across the codebase and cleans up the
documentation/comments that refers to them.

Patch 1 is a AioContext lock user I forgot to convert in my earlier SCSI
conversion series.

Patch 2 adds an assertion to the SCSI code to ensure that callbacks are invoked
in the correct AioContext.

Patch 3 removes tests for the AioContext lock because they will no longer be
needed when the lock is gone.

Patches 4-10 remove the AioContext lock. These can be reviewed by categorizing
the call sites into 1. places that take the lock because they call an API that
requires the lock (ultimately AIO_POLL_WHILE()) and 2. places that take the
lock to protect state. There should be no instances of case 2 left. If you see
one, you've found a bug in this patch series!

Patches 11-14 remove comments.

Based-on: 20231204164259.1515217-1-stefanha@redhat.com ("[PATCH v2 0/4] scsi: eliminate AioContext lock")
Since SCSI needs to stop relying on the AioContext lock before we can remove
the lock.

Stefan Hajnoczi (14):
  virtio-scsi: replace AioContext lock with tmf_bh_lock
  scsi: assert that callbacks run in the correct AioContext
  tests: remove aio_context_acquire() tests
  aio: make aio_context_acquire()/aio_context_release() a no-op
  graph-lock: remove AioContext locking
  block: remove AioContext locking
  block: remove bdrv_co_lock()
  scsi: remove AioContext locking
  aio-wait: draw equivalence between AIO_WAIT_WHILE() and
    AIO_WAIT_WHILE_UNLOCKED()
  aio: remove aio_context_acquire()/aio_context_release() API
  docs: remove AioContext lock from IOThread docs
  scsi: remove outdated AioContext lock comment
  job: remove outdated AioContext locking comments
  block: remove outdated AioContext locking comments

 docs/devel/multiple-iothreads.txt    |  45 ++--
 include/block/aio-wait.h             |  16 +-
 include/block/aio.h                  |  17 --
 include/block/block-common.h         |   3 -
 include/block/block-global-state.h   |  23 +-
 include/block/block-io.h             |  12 +-
 include/block/block_int-common.h     |   2 -
 include/block/graph-lock.h           |  21 +-
 include/block/snapshot.h             |   2 -
 include/hw/virtio/virtio-scsi.h      |  17 +-
 include/qemu/job.h                   |  20 --
 block.c                              | 363 ++++-----------------------
 block/backup.c                       |   4 +-
 block/blklogwrites.c                 |   8 +-
 block/blkverify.c                    |   4 +-
 block/block-backend.c                |  33 +--
 block/commit.c                       |  16 +-
 block/copy-before-write.c            |  22 +-
 block/export/export.c                |  22 +-
 block/export/vhost-user-blk-server.c |   4 -
 block/graph-lock.c                   |  44 +---
 block/io.c                           |  45 +---
 block/mirror.c                       |  41 +--
 block/monitor/bitmap-qmp-cmds.c      |  20 +-
 block/monitor/block-hmp-cmds.c       |  29 ---
 block/qapi-sysemu.c                  |  27 +-
 block/qapi.c                         |  18 +-
 block/qcow2.c                        |   4 +-
 block/quorum.c                       |   8 +-
 block/raw-format.c                   |   5 -
 block/replication.c                  |  72 +-----
 block/snapshot.c                     |  26 +-
 block/stream.c                       |  12 +-
 block/vmdk.c                         |  20 +-
 block/write-threshold.c              |   6 -
 blockdev.c                           | 319 +++++------------------
 blockjob.c                           |  30 +--
 hw/block/dataplane/virtio-blk.c      |  10 -
 hw/block/dataplane/xen-block.c       |  17 +-
 hw/block/virtio-blk.c                |  45 +---
 hw/core/qdev-properties-system.c     |   9 -
 hw/scsi/scsi-bus.c                   |   2 -
 hw/scsi/scsi-disk.c                  |  46 ++--
 hw/scsi/virtio-scsi.c                |  80 +++---
 job.c                                |  16 --
 migration/block.c                    |  33 +--
 migration/migration-hmp-cmds.c       |   3 -
 migration/savevm.c                   |  22 --
 net/colo-compare.c                   |   2 -
 qemu-img.c                           |   4 -
 qemu-io.c                            |  10 +-
 qemu-nbd.c                           |   2 -
 replay/replay-debugging.c            |   4 -
 system/dma-helpers.c                 |   3 +
 tests/unit/test-aio.c                |  67 +----
 tests/unit/test-bdrv-drain.c         |  91 ++-----
 tests/unit/test-bdrv-graph-mod.c     |  26 +-
 tests/unit/test-block-iothread.c     |  31 ---
 tests/unit/test-blockjob.c           | 137 ----------
 tests/unit/test-replication.c        |  11 -
 util/async.c                         |  14 --
 util/vhost-user-server.c             |   3 -
 scripts/block-coroutine-wrapper.py   |   7 +-
 tests/qemu-iotests/202               |   2 +-
 tests/qemu-iotests/203               |   3 +-
 tests/tsan/suppressions.tsan         |   1 -
 66 files changed, 340 insertions(+), 1741 deletions(-)

-- 
2.43.0



^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2023-12-21  0:31 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-05 18:19 [PATCH v2 00/14] aio: remove AioContext lock Stefan Hajnoczi
2023-12-05 18:19 ` [PATCH v2 01/14] virtio-scsi: replace AioContext lock with tmf_bh_lock Stefan Hajnoczi
2023-12-05 18:19 ` [PATCH v2 02/14] scsi: assert that callbacks run in the correct AioContext Stefan Hajnoczi
2023-12-18 15:35   ` Kevin Wolf
2023-12-05 18:20 ` [PATCH v2 03/14] tests: remove aio_context_acquire() tests Stefan Hajnoczi
2023-12-05 18:20 ` [PATCH v2 04/14] aio: make aio_context_acquire()/aio_context_release() a no-op Stefan Hajnoczi
2023-12-19 15:28   ` Kevin Wolf
2023-12-19 18:19     ` Kevin Wolf
2023-12-19 21:23       ` Stefan Hajnoczi
2023-12-20  9:32         ` Kevin Wolf
2023-12-20 13:40           ` Stefan Hajnoczi
2023-12-21  0:30       ` Stefan Hajnoczi
2023-12-05 18:20 ` [PATCH v2 05/14] graph-lock: remove AioContext locking Stefan Hajnoczi
2023-12-05 18:20 ` [PATCH v2 06/14] block: " Stefan Hajnoczi
2023-12-19 15:58   ` Kevin Wolf
2023-12-19 20:04     ` Stefan Hajnoczi
2023-12-20  9:19       ` Kevin Wolf
2023-12-05 18:20 ` [PATCH v2 07/14] block: remove bdrv_co_lock() Stefan Hajnoczi
2023-12-18 15:35   ` Kevin Wolf
2023-12-05 18:20 ` [PATCH v2 08/14] scsi: remove AioContext locking Stefan Hajnoczi
2023-12-18 15:35   ` Kevin Wolf
2023-12-05 18:20 ` [PATCH v2 09/14] aio-wait: draw equivalence between AIO_WAIT_WHILE() and AIO_WAIT_WHILE_UNLOCKED() Stefan Hajnoczi
2023-12-18 15:35   ` Kevin Wolf
2023-12-05 18:20 ` [PATCH v2 10/14] aio: remove aio_context_acquire()/aio_context_release() API Stefan Hajnoczi
2023-12-18 15:36   ` Kevin Wolf
2023-12-05 18:20 ` [PATCH v2 11/14] docs: remove AioContext lock from IOThread docs Stefan Hajnoczi
2023-12-05 18:20 ` [PATCH v2 12/14] scsi: remove outdated AioContext lock comment Stefan Hajnoczi
2023-12-05 18:20 ` [PATCH v2 13/14] job: remove outdated AioContext locking comments Stefan Hajnoczi
2023-12-05 18:20 ` [PATCH v2 14/14] block: " Stefan Hajnoczi
2023-12-19 12:11   ` Kevin Wolf
2023-12-19 13:03 ` [PATCH v2 00/14] aio: remove AioContext lock Kevin Wolf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).