Apply cache->xlat to addr before passing it to flatview_(read|write)_continue(), to convert it from the MemoryRegionCache's address space to the FlatView's.
Fixes: 48564041a7 ("exec: reintroduce MemoryRegion caching") Co-Developed-by: Stefan Hajnoczi <stefa...@redhat.com> Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> Signed-off-by: Alberto Faria <afa...@redhat.com> --- softmmu/physmem.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/softmmu/physmem.c b/softmmu/physmem.c index dc3c3e5f2e..95d4c77cc3 100644 --- a/softmmu/physmem.c +++ b/softmmu/physmem.c @@ -3450,9 +3450,9 @@ address_space_read_cached_slow(MemoryRegionCache *cache, hwaddr addr, l = len; mr = address_space_translate_cached(cache, addr, &addr1, &l, false, MEMTXATTRS_UNSPECIFIED); - return flatview_read_continue(cache->fv, - addr, MEMTXATTRS_UNSPECIFIED, buf, len, - addr1, l, mr); + return flatview_read_continue(cache->fv, cache->xlat + addr, + MEMTXATTRS_UNSPECIFIED, buf, len, addr1, l, + mr); } /* Called from RCU critical section. address_space_write_cached uses this @@ -3468,9 +3468,9 @@ address_space_write_cached_slow(MemoryRegionCache *cache, hwaddr addr, l = len; mr = address_space_translate_cached(cache, addr, &addr1, &l, true, MEMTXATTRS_UNSPECIFIED); - return flatview_write_continue(cache->fv, - addr, MEMTXATTRS_UNSPECIFIED, buf, len, - addr1, l, mr); + return flatview_write_continue(cache->fv, cache->xlat + addr, + MEMTXATTRS_UNSPECIFIED, buf, len, addr1, l, + mr); } #define ARG1_DECL MemoryRegionCache *cache -- 2.37.2