mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-10 19:14:58 -06:00
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>
This commit is contained in:
parent
52012209e1
commit
e76d7b6b8c
1 changed files with 6 additions and 4 deletions
|
@ -2997,6 +2997,10 @@ bool prepare_mmio_access(MemoryRegion *mr);
|
||||||
|
|
||||||
static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write)
|
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
|
* 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
|
* 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;
|
return false;
|
||||||
}
|
}
|
||||||
if (is_write) {
|
if (is_write) {
|
||||||
return memory_region_is_ram(mr) && !mr->readonly &&
|
return !mr->readonly && !mr->rom_device;
|
||||||
!mr->rom_device;
|
|
||||||
} else {
|
|
||||||
return memory_region_is_ram(mr) || memory_region_is_romd(mr);
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue