From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Alexander Bulekov Date: Mon, 13 Mar 2023 04:24:16 -0400 Subject: [PATCH] memory: Allow disabling re-entrancy checking per-MR Signed-off-by: Alexander Bulekov --- include/exec/memory.h | 3 +++ softmmu/memory.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/exec/memory.h b/include/exec/memory.h index 15ade918ba..e6819e3c39 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -791,6 +791,9 @@ struct MemoryRegion { unsigned ioeventfd_nb; MemoryRegionIoeventfd *ioeventfds; RamDiscardManager *rdm; /* Only for RAM */ + + /* For devices designed to perform re-entrant IO into their own IO MRs */ + bool disable_reentrancy_guard; }; struct IOMMUMemoryRegion { diff --git a/softmmu/memory.c b/softmmu/memory.c index e4d2268d32..d88acb204b 100644 --- a/softmmu/memory.c +++ b/softmmu/memory.c @@ -544,7 +544,7 @@ static MemTxResult access_with_adjusted_size(hwaddr addr, } /* Do not allow more than one simultanous access to a device's IO Regions */ - if (mr->owner && + if (mr->owner && !mr->disable_reentrancy_guard && !mr->ram_device && !mr->ram && !mr->rom_device && !mr->readonly) { dev = (DeviceState *) object_dynamic_cast(mr->owner, TYPE_DEVICE); if (dev) {