[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 0/3] memory: prevent dma-reentracy issues
From: |
Alexander Bulekov |
Subject: |
[PATCH v4 0/3] memory: prevent dma-reentracy issues |
Date: |
Thu, 19 Jan 2023 02:01:57 -0500 |
These patches aim to solve two types of DMA-reentrancy issues:
1.) mmio -> dma -> mmio case
To solve this, we track whether the device is engaged in io by
checking/setting a reentrancy-guard within APIs used for MMIO access.
2.) bh -> dma write -> mmio case
This case is trickier, since we dont have a generic way to associate a
bh with the underlying Device/DeviceState. Thus, this version allows a
device to associate a reentrancy-guard with a bh, when creating it.
(Instead of calling qemu_bh_new, you call qemu_bh_new_guarded)
I replaced most of the qemu_bh_new invocations with the guarded analog,
except for the ones where the DeviceState was not trivially accessible
Unlike v3, these changes should address issues in devices that bypass
DMA apis and directly call into address_space.
e.g. https://gitlab.com/qemu-project/qemu/-/issues/827
v3 -> v4: Instead of changing all of the DMA APIs, instead add an
optional reentrancy guard to the BH API.
v2 -> v3: Bite the bullet and modify the DMA APIs, rather than
attempting to guess DeviceStates in BHs.
Alexander Bulekov (3):
memory: prevent dma-reentracy issues
async: Add an optional reentrancy guard to the BH API
hw: replace most qemu_bh_new calls with qemu_bh_new_guarded
Alexander Bulekov (3):
memory: prevent dma-reentracy issues
async: Add an optional reentrancy guard to the BH API
hw: replace most qemu_bh_new calls with qemu_bh_new_guarded
docs/devel/multiple-iothreads.txt | 2 ++
hw/9pfs/xen-9p-backend.c | 4 +++-
hw/block/dataplane/virtio-blk.c | 3 ++-
hw/block/dataplane/xen-block.c | 5 +++--
hw/block/virtio-blk.c | 5 +++--
hw/char/virtio-serial-bus.c | 3 ++-
hw/display/qxl.c | 9 ++++++---
hw/display/virtio-gpu.c | 6 ++++--
hw/ide/ahci.c | 3 ++-
hw/ide/core.c | 3 ++-
hw/misc/imx_rngc.c | 6 ++++--
hw/misc/macio/mac_dbdma.c | 2 +-
hw/net/virtio-net.c | 3 ++-
hw/nvme/ctrl.c | 6 ++++--
hw/scsi/mptsas.c | 3 ++-
hw/scsi/scsi-bus.c | 3 ++-
hw/scsi/vmw_pvscsi.c | 3 ++-
hw/usb/dev-uas.c | 3 ++-
hw/usb/hcd-dwc2.c | 3 ++-
hw/usb/hcd-ehci.c | 3 ++-
hw/usb/hcd-uhci.c | 2 +-
hw/usb/host-libusb.c | 6 ++++--
hw/usb/redirect.c | 6 ++++--
hw/usb/xen-usb.c | 3 ++-
hw/virtio/virtio-balloon.c | 5 +++--
hw/virtio/virtio-crypto.c | 3 ++-
include/block/aio.h | 18 ++++++++++++++++--
include/hw/qdev-core.h | 7 +++++++
include/qemu/main-loop.h | 7 +++++--
softmmu/memory.c | 15 +++++++++++++++
softmmu/trace-events | 1 +
tests/unit/ptimer-test-stubs.c | 3 ++-
util/async.c | 12 +++++++++++-
util/main-loop.c | 5 +++--
34 files changed, 128 insertions(+), 43 deletions(-)
--
2.39.0