Introduce address_space_is_ram(), a helper to determine whether a guest physical address resolves to a RAM-backed MemoryRegion within an AddressSpace.
Signed-off-by: Shameer Kolothum <[email protected]> --- include/system/memory.h | 10 ++++++++++ system/physmem.c | 11 +++++++++++ 2 files changed, 21 insertions(+) diff --git a/include/system/memory.h b/include/system/memory.h index 0562af3136..02b2e83fd7 100644 --- a/include/system/memory.h +++ b/include/system/memory.h @@ -2900,6 +2900,16 @@ bool address_space_access_valid(AddressSpace *as, hwaddr addr, hwaddr len, */ bool address_space_is_io(AddressSpace *as, hwaddr addr); +/** + * address_space_is_ram: check whether a guest physical address whithin + * an address space is RAM. + * + * @as: #AddressSpace to be accessed + * @addr: address within that address space + */ + +bool address_space_is_ram(AddressSpace *as, hwaddr addr); + /* address_space_map: map a physical memory region into a host virtual address * * May map a subset of the requested range, given by and returned in @plen. diff --git a/system/physmem.c b/system/physmem.c index 2fb0c25c93..ddcf921311 100644 --- a/system/physmem.c +++ b/system/physmem.c @@ -3646,6 +3646,17 @@ bool address_space_is_io(AddressSpace *as, hwaddr addr) return !(memory_region_is_ram(mr) || memory_region_is_romd(mr)); } +bool address_space_is_ram(AddressSpace *as, hwaddr addr) +{ + MemoryRegion *mr; + + RCU_READ_LOCK_GUARD(); + mr = address_space_translate(as, addr, &addr, NULL, false, + MEMTXATTRS_UNSPECIFIED); + + return memory_region_is_ram(mr); +} + static hwaddr flatview_extend_translation(FlatView *fv, hwaddr addr, hwaddr target_len, -- 2.43.0
