hostmem: Apply merge property after the memory region is initialized
The semantic change has been introduced by commit5becdc0ab0
("hostmem: simplify the code for merge and dump properties") even it clarifies that no senmatic change has been introduced. After the commit, the merge property can be applied even the corresponding memory region isn't initialized yet. This leads to crash dump by the following command lines. # /home/gavin/sandbox/qemu.main/build/qemu-system-aarch64 \ -accel kvm -machine virt -cpu host \ -object memory-backend-ram,id=mem-memN0,size=4096M,merge=off : qemu-system-aarch64: ../system/memory.c:2419: memory_region_get_ram_ptr: \ Assertion `mr->ram_block' failed. Fix it by applying the merge property only when the memory region is initialized. Message-ID: <20240915233117.478169-1-gshan@redhat.com> Fixes:5becdc0ab0
("hostmem: simplify the code for merge and dump properties") Reported-by: Zhenyu Zhang <zhenyzha@redhat.com> Tested-by: Zhenyu Zhang <zhenyzha@redhat.com> Signed-off-by: Gavin Shan <gshan@redhat.com> Signed-off-by: David Hildenbrand <david@redhat.com>
This commit is contained in:
parent
1f5f49056d
commit
78c8f780d3
@ -178,7 +178,7 @@ static void host_memory_backend_set_merge(Object *obj, bool value, Error **errp)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!host_memory_backend_mr_inited(backend) &&
|
if (host_memory_backend_mr_inited(backend) &&
|
||||||
value != backend->merge) {
|
value != backend->merge) {
|
||||||
void *ptr = memory_region_get_ram_ptr(&backend->mr);
|
void *ptr = memory_region_get_ram_ptr(&backend->mr);
|
||||||
uint64_t sz = memory_region_size(&backend->mr);
|
uint64_t sz = memory_region_size(&backend->mr);
|
||||||
|
Loading…
Reference in New Issue
Block a user