diff options
author | Singh, Brijesh <brijesh.singh@amd.com> | 2019-02-04 22:23:39 +0000 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2019-03-18 09:39:57 +0100 |
commit | 2ddb89b00f947f785c9ca6742f28f954e3b75e62 (patch) | |
tree | d0244e7a49530b470bed7436ccae7bb36f38b3ca /memory.c | |
parent | d6c1bd4a223776aaa6ef3845be12d3c7408b4ffb (diff) | |
download | qemu-2ddb89b00f947f785c9ca6742f28f954e3b75e62.zip qemu-2ddb89b00f947f785c9ca6742f28f954e3b75e62.tar.gz qemu-2ddb89b00f947f785c9ca6742f28f954e3b75e62.tar.bz2 |
memory: Fix the memory region type assignment order
Currently, a callback registered through the RAMBlock notifier
is not able to get the memory region type (i.e callback is not
able to use memory_region_is_ram_device function). This is
because mr->ram assignment happens _after_ the memory is allocated
whereas the callback is executed during allocation.
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1667249
Suggested-by: Alex Williamson <alex.williamson@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Brijesh Singh <brijesh.singh@amd.com>
Message-Id: <20190204222322.26766-2-brijesh.singh@amd.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'memory.c')
-rw-r--r-- | memory.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -1649,10 +1649,17 @@ void memory_region_init_ram_device_ptr(MemoryRegion *mr, uint64_t size, void *ptr) { - memory_region_init_ram_ptr(mr, owner, name, size, ptr); + memory_region_init(mr, owner, name, size); + mr->ram = true; + mr->terminates = true; mr->ram_device = true; mr->ops = &ram_device_mem_ops; mr->opaque = mr; + mr->destructor = memory_region_destructor_ram; + mr->dirty_log_mask = tcg_enabled() ? (1 << DIRTY_MEMORY_CODE) : 0; + /* qemu_ram_alloc_from_ptr cannot fail with ptr != NULL. */ + assert(ptr != NULL); + mr->ram_block = qemu_ram_alloc_from_ptr(size, ptr, mr, &error_fatal); } void memory_region_init_alias(MemoryRegion *mr, |