From: Nicolin Chen <[email protected]> Introduce cpu_physical_memory_is_ram(), a helper that performs an address_space translation and returns whether the resolved MemoryRegion is backed by RAM.
This will be used by the upcoming Tegra241 CMDQV support to validate guest provided VCMDQ buffer addresses. Signed-off-by: Nicolin Chen <[email protected]> Signed-off-by: Shameer Kolothum <[email protected]> --- include/exec/cpu-common.h | 2 ++ system/physmem.c | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/include/exec/cpu-common.h b/include/exec/cpu-common.h index e0be4ee2b8..76b91d1b9b 100644 --- a/include/exec/cpu-common.h +++ b/include/exec/cpu-common.h @@ -148,6 +148,8 @@ void qemu_flush_coalesced_mmio_buffer(void); typedef int (RAMBlockIterFunc)(RAMBlock *rb, void *opaque); +bool cpu_physical_memory_is_ram(hwaddr phys_addr); + int qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque); /* vl.c */ diff --git a/system/physmem.c b/system/physmem.c index c9869e4049..1f6c821a0e 100644 --- a/system/physmem.c +++ b/system/physmem.c @@ -4068,6 +4068,18 @@ int cpu_memory_rw_debug(CPUState *cpu, vaddr addr, return 0; } +bool cpu_physical_memory_is_ram(hwaddr phys_addr) +{ + MemoryRegion *mr; + hwaddr l = 1; + + RCU_READ_LOCK_GUARD(); + mr = address_space_translate(&address_space_memory, phys_addr, &phys_addr, + &l, false, MEMTXATTRS_UNSPECIFIED); + + return memory_region_is_ram(mr); +} + int qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque) { RAMBlock *block; -- 2.43.0
