diff options
author | David Hildenbrand <david@redhat.com> | 2025-02-10 09:46:43 +0100 |
---|---|---|
committer | Peter Xu <peterx@redhat.com> | 2025-02-12 10:13:27 -0500 |
commit | e76d7b6b8cd564d4d5ea6e7c7daea541e100caa4 (patch) | |
tree | d33a74694419f29c1012a5946ad416b6be924382 | |
parent | 52012209e1802e67aa186459e3e965f669e553df (diff) | |
download | qemu-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.h | 10 |
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; } /** |