softmmu/memory: Pass ram_flags to qemu_ram_alloc() and qemu_ram_alloc_internal()

Let's pass ram_flags to qemu_ram_alloc() and qemu_ram_alloc_internal(),
preparing for passing additional flags.

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Acked-by: Eduardo Habkost <ehabkost@redhat.com> for memory backend and machine core
Signed-off-by: David Hildenbrand <david@redhat.com>
Message-Id: <20210510114328.21835-7-david@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
David Hildenbrand 2021-05-10 13:43:19 +02:00 committed by Paolo Bonzini
parent 7f863cba4d
commit ebef62d0e5
3 changed files with 15 additions and 20 deletions

View File

@ -122,7 +122,7 @@ RAMBlock *qemu_ram_alloc_from_fd(ram_addr_t size, MemoryRegion *mr,
RAMBlock *qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, RAMBlock *qemu_ram_alloc_from_ptr(ram_addr_t size, void *host,
MemoryRegion *mr, Error **errp); MemoryRegion *mr, Error **errp);
RAMBlock *qemu_ram_alloc(ram_addr_t size, bool share, MemoryRegion *mr, RAMBlock *qemu_ram_alloc(ram_addr_t size, uint32_t ram_flags, MemoryRegion *mr,
Error **errp); Error **errp);
RAMBlock *qemu_ram_alloc_resizeable(ram_addr_t size, ram_addr_t max_size, RAMBlock *qemu_ram_alloc_resizeable(ram_addr_t size, ram_addr_t max_size,
void (*resized)(const char*, void (*resized)(const char*,

View File

@ -1546,7 +1546,7 @@ void memory_region_init_ram_flags_nomigrate(MemoryRegion *mr,
mr->ram = true; mr->ram = true;
mr->terminates = true; mr->terminates = true;
mr->destructor = memory_region_destructor_ram; mr->destructor = memory_region_destructor_ram;
mr->ram_block = qemu_ram_alloc(size, ram_flags & RAM_SHARED, mr, &err); mr->ram_block = qemu_ram_alloc(size, ram_flags, mr, &err);
if (err) { if (err) {
mr->size = int128_zero(); mr->size = int128_zero();
object_unparent(OBJECT(mr)); object_unparent(OBJECT(mr));
@ -1702,7 +1702,7 @@ void memory_region_init_rom_device_nomigrate(MemoryRegion *mr,
mr->terminates = true; mr->terminates = true;
mr->rom_device = true; mr->rom_device = true;
mr->destructor = memory_region_destructor_ram; mr->destructor = memory_region_destructor_ram;
mr->ram_block = qemu_ram_alloc(size, false, mr, &err); mr->ram_block = qemu_ram_alloc(size, 0, mr, &err);
if (err) { if (err) {
mr->size = int128_zero(); mr->size = int128_zero();
object_unparent(OBJECT(mr)); object_unparent(OBJECT(mr));

View File

@ -2128,12 +2128,15 @@ RAMBlock *qemu_ram_alloc_internal(ram_addr_t size, ram_addr_t max_size,
void (*resized)(const char*, void (*resized)(const char*,
uint64_t length, uint64_t length,
void *host), void *host),
void *host, bool resizeable, bool share, void *host, uint32_t ram_flags,
MemoryRegion *mr, Error **errp) MemoryRegion *mr, Error **errp)
{ {
RAMBlock *new_block; RAMBlock *new_block;
Error *local_err = NULL; Error *local_err = NULL;
assert((ram_flags & ~(RAM_SHARED | RAM_RESIZEABLE | RAM_PREALLOC)) == 0);
assert(!host ^ (ram_flags & RAM_PREALLOC));
size = HOST_PAGE_ALIGN(size); size = HOST_PAGE_ALIGN(size);
max_size = HOST_PAGE_ALIGN(max_size); max_size = HOST_PAGE_ALIGN(max_size);
new_block = g_malloc0(sizeof(*new_block)); new_block = g_malloc0(sizeof(*new_block));
@ -2145,15 +2148,7 @@ RAMBlock *qemu_ram_alloc_internal(ram_addr_t size, ram_addr_t max_size,
new_block->fd = -1; new_block->fd = -1;
new_block->page_size = qemu_real_host_page_size; new_block->page_size = qemu_real_host_page_size;
new_block->host = host; new_block->host = host;
if (host) { new_block->flags = ram_flags;
new_block->flags |= RAM_PREALLOC;
}
if (share) {
new_block->flags |= RAM_SHARED;
}
if (resizeable) {
new_block->flags |= RAM_RESIZEABLE;
}
ram_block_add(new_block, &local_err); ram_block_add(new_block, &local_err);
if (local_err) { if (local_err) {
g_free(new_block); g_free(new_block);
@ -2166,15 +2161,15 @@ RAMBlock *qemu_ram_alloc_internal(ram_addr_t size, ram_addr_t max_size,
RAMBlock *qemu_ram_alloc_from_ptr(ram_addr_t size, void *host, RAMBlock *qemu_ram_alloc_from_ptr(ram_addr_t size, void *host,
MemoryRegion *mr, Error **errp) MemoryRegion *mr, Error **errp)
{ {
return qemu_ram_alloc_internal(size, size, NULL, host, false, return qemu_ram_alloc_internal(size, size, NULL, host, RAM_PREALLOC, mr,
false, mr, errp); errp);
} }
RAMBlock *qemu_ram_alloc(ram_addr_t size, bool share, RAMBlock *qemu_ram_alloc(ram_addr_t size, uint32_t ram_flags,
MemoryRegion *mr, Error **errp) MemoryRegion *mr, Error **errp)
{ {
return qemu_ram_alloc_internal(size, size, NULL, NULL, false, assert((ram_flags & ~RAM_SHARED) == 0);
share, mr, errp); return qemu_ram_alloc_internal(size, size, NULL, NULL, ram_flags, mr, errp);
} }
RAMBlock *qemu_ram_alloc_resizeable(ram_addr_t size, ram_addr_t maxsz, RAMBlock *qemu_ram_alloc_resizeable(ram_addr_t size, ram_addr_t maxsz,
@ -2183,8 +2178,8 @@ RAMBlock *qemu_ram_alloc_resizeable(ram_addr_t size, ram_addr_t maxsz,
void *host), void *host),
MemoryRegion *mr, Error **errp) MemoryRegion *mr, Error **errp)
{ {
return qemu_ram_alloc_internal(size, maxsz, resized, NULL, true, return qemu_ram_alloc_internal(size, maxsz, resized, NULL,
false, mr, errp); RAM_RESIZEABLE, mr, errp);
} }
static void reclaim_ramblock(RAMBlock *block) static void reclaim_ramblock(RAMBlock *block)