aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Hildenbrand <david@redhat.com>2025-02-10 09:46:43 +0100
committerPeter Xu <peterx@redhat.com>2025-02-12 10:13:27 -0500
commite76d7b6b8cd564d4d5ea6e7c7daea541e100caa4 (patch)
treed33a74694419f29c1012a5946ad416b6be924382
parent52012209e1802e67aa186459e3e965f669e553df (diff)
downloadqemu-e76d7b6b8cd564d4d5ea6e7c7daea541e100caa4.zip
qemu-e76d7b6b8cd564d4d5ea6e7c7daea541e100caa4.tar.gz
qemu-e76d7b6b8cd564d4d5ea6e7c7daea541e100caa4.tar.bz2
physmem: factor out RAM/ROMD check in memory_access_is_direct()
Let's factor more of the generic "is this directly accessible" check, independent of the "write" condition out. Note that the "!mr->rom_device" check in the write case essentially disallows the memory_region_is_romd() condition again. Further note that RAM DEVICE regions are also RAM regions, so we can check for RAM+ROMD first. This is a preparation for further changes. Reviewed-by: Peter Xu <peterx@redhat.com> Signed-off-by: David Hildenbrand <david@redhat.com> Link: https://lore.kernel.org/r/20250210084648.33798-3-david@redhat.com Signed-off-by: Peter Xu <peterx@redhat.com>
-rw-r--r--include/exec/memory.h10
1 files changed, 6 insertions, 4 deletions
diff --git a/include/exec/memory.h b/include/exec/memory.h
index 5cd7574..cb35c38 100644
--- a/include/exec/memory.h
+++ b/include/exec/memory.h
@@ -2997,6 +2997,10 @@ bool prepare_mmio_access(MemoryRegion *mr);
static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write)
{
+ /* ROM DEVICE regions only allow direct access if in ROMD mode. */
+ if (!memory_region_is_ram(mr) && !memory_region_is_romd(mr)) {
+ return false;
+ }
/*
* RAM DEVICE regions can be accessed directly using memcpy, but it might
* be MMIO and access using mempy can be wrong (e.g., using instructions not
@@ -3006,11 +3010,9 @@ static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write)
return false;
}
if (is_write) {
- return memory_region_is_ram(mr) && !mr->readonly &&
- !mr->rom_device;
- } else {
- return memory_region_is_ram(mr) || memory_region_is_romd(mr);
+ return !mr->readonly && !mr->rom_device;
}
+ return true;
}
/**