MemoryRegionCache was reverted to "normal" address_space_* operations for 2.9, due to lack of support for IOMMUs. This series reinstates optimizations, caching only the IOMMU translation but not the IOMMU lookup and target AddressSpace translation.
Patches 1 to 3 prepare by introducing a new function address_space_translate_iommu (split out of address_space_translate) and new header files for declarations shared by regular and "cached" address_space_* functions. Patch 4 uses them to introduce both the slow path for IOMMU and MMIO cached regions, and the fast path for RAM cached regions. Paolo Paolo Bonzini (4): exec: move memory access declarations to a common header, inline *_phys functions exec: small changes to flatview_do_translate exec: extract address_space_translate_iommu, fix page_mask corner case exec: reintroduce MemoryRegion caching exec.c | 245 ++++++++++++++++++++------ include/exec/cpu-all.h | 79 ++++----- include/exec/memory-internal.h | 3 + include/exec/memory.h | 209 ++++++++++------------ include/exec/memory_ldst.inc.h | 71 ++++++++ include/exec/memory_ldst_cached.inc.h | 108 ++++++++++++ include/exec/memory_ldst_phys.inc.h | 147 ++++++++++++++++ memory.c | 4 +- memory_ldst.inc.c | 126 ------------- 9 files changed, 651 insertions(+), 341 deletions(-) create mode 100644 include/exec/memory_ldst.inc.h create mode 100644 include/exec/memory_ldst_cached.inc.h create mode 100644 include/exec/memory_ldst_phys.inc.h -- 2.17.0