* [PATCH v4 0/3] memory: prevent dma-reentracy issues
@ 2023-01-19 7:01 Alexander Bulekov
0 siblings, 0 replies; 3+ messages in thread
From: Alexander Bulekov @ 2023-01-19 7:01 UTC (permalink / raw)
To: qemu-devel
Cc: Alexander Bulekov, Stefan Hajnoczi, Philippe Mathieu-Daudé,
Mauro Matteo Cascella, Peter Xu, Jason Wang, David Hildenbrand,
Gerd Hoffmann, Thomas Huth, Laurent Vivier, Bandan Das,
Edgar E . Iglesias, Darren Kenny, Bin Meng, Paolo Bonzini,
Michael S . Tsirkin, Marcel Apfelbaum, Daniel P . Berrangé,
Eduardo Habkost, Jon Maloy, Siqi Chen
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
^ permalink raw reply [flat|nested] 3+ messages in thread* [PATCH v4 0/3] memory: prevent dma-reentracy issues
@ 2023-01-19 7:03 Alexander Bulekov
0 siblings, 0 replies; 3+ messages in thread
From: Alexander Bulekov @ 2023-01-19 7:03 UTC (permalink / raw)
To: qemu-devel
Cc: Alexander Bulekov, Stefan Hajnoczi, Philippe Mathieu-Daudé,
Mauro Matteo Cascella, Peter Xu, Jason Wang, David Hildenbrand,
Gerd Hoffmann, Thomas Huth, Laurent Vivier, Bandan Das,
Edgar E . Iglesias, Darren Kenny, Bin Meng, Paolo Bonzini,
Michael S . Tsirkin, Marcel Apfelbaum, Daniel P . Berrangé,
Eduardo Habkost, Jon Maloy, Siqi Chen
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
^ permalink raw reply [flat|nested] 3+ messages in thread* [PATCH v4 0/3] memory: prevent dma-reentracy issues
@ 2023-01-19 7:00 Alexander Bulekov
0 siblings, 0 replies; 3+ messages in thread
From: Alexander Bulekov @ 2023-01-19 7:00 UTC (permalink / raw)
To: qemu-devel
Cc: Alexander Bulekov, Stefan Hajnoczi, Philippe Mathieu-Daudé,
Mauro Matteo Cascella, Peter Xu, Jason Wang, David Hildenbrand,
Gerd Hoffmann, Thomas Huth, Laurent Vivier, Bandan Das,
Edgar E . Iglesias, Darren Kenny, Bin Meng, Paolo Bonzini,
Michael S . Tsirkin, Marcel Apfelbaum, Daniel P . Berrangé,
Eduardo Habkost, Jon Maloy, Siqi Chen
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
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-01-19 7:10 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-19 7:01 [PATCH v4 0/3] memory: prevent dma-reentracy issues Alexander Bulekov
-- strict thread matches above, loose matches on Subject: below --
2023-01-19 7:03 Alexander Bulekov
2023-01-19 7:00 Alexander Bulekov
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).