Playing with memory_region_is_mapped(), I realized that memory regions mapped via an alias behave a little bit "differently", as they don't have their ->container set. * memory_region_is_mapped() will never succeed for memory regions mapped via an alias * memory_region_to_address_space(), memory_region_find(), memory_region_find_rcu(), memory_region_present() won't work, which seems okay, because we don't expect such memory regions getting passed to these functions. * memory_region_to_absolute_addr() will result in a wrong address. As the result is only used for tracing, that is tolerable.
Let's cleanup/fix the code and documentation of memory_region_is_mapped() and change one user that really should be checking something else. v1 -> v2: - "memory: Make memory_region_is_mapped() succeed when mapped via an alias" -- Add an assertion - Add RBs Cc: Eduardo Habkost <[email protected]> Cc: Marcel Apfelbaum <[email protected]> Cc: Paolo Bonzini <[email protected]> Cc: Peter Xu <[email protected]> Cc: Igor Mammedov <[email protected]> Cc: Richard Henderson <[email protected]> Cc: "Philippe Mathieu-Daudé" <[email protected]> David Hildenbrand (3): machine: Use host_memory_backend_is_mapped() in machine_consume_memdev() memory: Make memory_region_is_mapped() succeed when mapped via an alias memory: Update description of memory_region_is_mapped() hw/core/machine.c | 2 +- include/exec/memory.h | 4 +++- softmmu/memory.c | 13 ++++++++++++- 3 files changed, 16 insertions(+), 3 deletions(-) -- 2.31.1
