Introduce internal helper function to remove duplicated code from different memory_region_init_*ram functions. Shorten some function prototypes while at it.
Signed-off-by: BALATON Zoltan <[email protected]> --- system/memory.c | 109 +++++++++++++++++++----------------------------- 1 file changed, 43 insertions(+), 66 deletions(-) diff --git a/system/memory.c b/system/memory.c index e15f931a8a..8246743d54 100644 --- a/system/memory.c +++ b/system/memory.c @@ -1568,29 +1568,29 @@ static void memory_region_set_ops(MemoryRegion *mr, mr->terminates = true; } -void memory_region_init_io(MemoryRegion *mr, - Object *owner, - const MemoryRegionOps *ops, - void *opaque, - const char *name, - uint64_t size) +void memory_region_init_io(MemoryRegion *mr, Object *owner, + const MemoryRegionOps *ops, void *opaque, + const char *name, uint64_t size) { memory_region_init(mr, owner, name, size); memory_region_set_ops(mr, ops, opaque); } -bool memory_region_init_ram_flags_nomigrate(MemoryRegion *mr, - Object *owner, - const char *name, - uint64_t size, - uint32_t ram_flags, - Error **errp) +static void memory_region_setup_ram(MemoryRegion *mr) { - Error *err = NULL; - memory_region_init(mr, owner, name, size); mr->ram = true; mr->terminates = true; mr->destructor = memory_region_destructor_ram; +} + +bool memory_region_init_ram_flags_nomigrate(MemoryRegion *mr, Object *owner, + const char *name, uint64_t size, + uint32_t ram_flags, Error **errp) +{ + Error *err = NULL; + + memory_region_init(mr, owner, name, size); + memory_region_setup_ram(mr); mr->ram_block = qemu_ram_alloc(size, ram_flags, mr, &err); if (err) { mr->size = int128_zero(); @@ -1612,12 +1612,11 @@ bool memory_region_init_resizeable_ram(MemoryRegion *mr, Error **errp) { Error *err = NULL; + memory_region_init(mr, owner, name, size); - mr->ram = true; - mr->terminates = true; - mr->destructor = memory_region_destructor_ram; - mr->ram_block = qemu_ram_alloc_resizeable(size, max_size, resized, - mr, &err); + memory_region_setup_ram(mr); + mr->ram_block = qemu_ram_alloc_resizeable(size, max_size, resized, mr, + &err); if (err) { mr->size = int128_zero(); object_unparent(OBJECT(mr)); @@ -1628,22 +1627,17 @@ bool memory_region_init_resizeable_ram(MemoryRegion *mr, } #if defined(CONFIG_POSIX) && !defined(EMSCRIPTEN) -bool memory_region_init_ram_from_file(MemoryRegion *mr, - Object *owner, - const char *name, - uint64_t size, - uint64_t align, - uint32_t ram_flags, - const char *path, - ram_addr_t offset, +bool memory_region_init_ram_from_file(MemoryRegion *mr, Object *owner, + const char *name, uint64_t size, + uint64_t align, uint32_t ram_flags, + const char *path, ram_addr_t offset, Error **errp) { Error *err = NULL; + memory_region_init(mr, owner, name, size); - mr->ram = true; + memory_region_setup_ram(mr); mr->readonly = !!(ram_flags & RAM_READONLY); - mr->terminates = true; - mr->destructor = memory_region_destructor_ram; mr->align = align; mr->ram_block = qemu_ram_alloc_from_file(size, mr, ram_flags, path, offset, &err); @@ -1656,21 +1650,16 @@ bool memory_region_init_ram_from_file(MemoryRegion *mr, return true; } -bool memory_region_init_ram_from_fd(MemoryRegion *mr, - Object *owner, - const char *name, - uint64_t size, - uint32_t ram_flags, - int fd, - ram_addr_t offset, - Error **errp) +bool memory_region_init_ram_from_fd(MemoryRegion *mr, Object *owner, + const char *name, uint64_t size, + uint32_t ram_flags, int fd, + ram_addr_t offset, Error **errp) { Error *err = NULL; + memory_region_init(mr, owner, name, size); - mr->ram = true; + memory_region_setup_ram(mr); mr->readonly = !!(ram_flags & RAM_READONLY); - mr->terminates = true; - mr->destructor = memory_region_destructor_ram; mr->ram_block = qemu_ram_alloc_from_fd(size, size, NULL, mr, ram_flags, fd, offset, false, &err); if (err) { @@ -1683,45 +1672,32 @@ bool memory_region_init_ram_from_fd(MemoryRegion *mr, } #endif -void memory_region_init_ram_ptr(MemoryRegion *mr, - Object *owner, - const char *name, - uint64_t size, - void *ptr) +void memory_region_init_ram_ptr(MemoryRegion *mr, Object *owner, + const char *name, uint64_t size, void *ptr) { memory_region_init(mr, owner, name, size); - mr->ram = true; - mr->terminates = true; - mr->destructor = memory_region_destructor_ram; - + memory_region_setup_ram(mr); /* 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_abort); } -void memory_region_init_ram_device_ptr(MemoryRegion *mr, - Object *owner, - const char *name, - uint64_t size, +void memory_region_init_ram_device_ptr(MemoryRegion *mr, Object *owner, + const char *name, uint64_t size, void *ptr) { memory_region_init(mr, owner, name, size); - mr->ram = true; - mr->ram_device = true; + memory_region_setup_ram(mr); memory_region_set_ops(mr, &ram_device_mem_ops, mr); - mr->destructor = memory_region_destructor_ram; - /* 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_abort); + mr->ram_device = true; } -void memory_region_init_alias(MemoryRegion *mr, - Object *owner, - const char *name, - MemoryRegion *orig, - hwaddr offset, - uint64_t size) +void memory_region_init_alias(MemoryRegion *mr, Object *owner, + const char *name, MemoryRegion *orig, + hwaddr offset, uint64_t size) { memory_region_init(mr, owner, name, size); mr->alias = orig; @@ -3764,8 +3740,7 @@ bool memory_region_init_rom_device(MemoryRegion *mr, assert(ops); memory_region_init(mr, owner, name, size); memory_region_set_ops(mr, ops, opaque); - mr->rom_device = true; - mr->destructor = memory_region_destructor_ram; + memory_region_setup_ram(mr); mr->ram_block = qemu_ram_alloc(size, 0, mr, &err); if (err) { mr->size = int128_zero(); @@ -3773,6 +3748,8 @@ bool memory_region_init_rom_device(MemoryRegion *mr, error_propagate(errp, err); return false; } + mr->ram = false; + mr->rom_device = true; /* This will assert if owner is neither NULL nor a DeviceState. * We only want the owner here for the purposes of defining a * unique name for migration. TODO: Ideally we should implement -- 2.41.3
