On Monday, 2023-03-13 at 04:24:16 -04, Alexander Bulekov wrote: > Signed-off-by: Alexander Bulekov <alx...@bu.edu>
Reviewed-by: Darren Kenny <darren.ke...@oracle.com> > --- > 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 6fa0b071f0..5154b123d8 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 57bf18a257..3018fa2edb 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) { > -- > 2.39.0