diff options
| author | Igor Mammedov | 2014-10-31 17:38:37 +0100 |
|---|---|---|
| committer | Michael S. Tsirkin | 2014-11-23 11:11:30 +0100 |
| commit | a2b257d6212ade772473f86bf0637480b2578a7e (patch) | |
| tree | b4b86c7b8887920f8bff0b3e8ca498b574d64f00 /exec.c | |
| parent | pc: limit DIMM address and size to page aligned values (diff) | |
| download | qemu-a2b257d6212ade772473f86bf0637480b2578a7e.tar.gz qemu-a2b257d6212ade772473f86bf0637480b2578a7e.tar.xz qemu-a2b257d6212ade772473f86bf0637480b2578a7e.zip | |
memory: expose alignment used for allocating RAM as MemoryRegion API
introduce memory_region_get_alignment() that returns
underlying memory block alignment or 0 if it's not
relevant/implemented for backend.
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Diffstat (limited to 'exec.c')
| -rw-r--r-- | exec.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -909,14 +909,15 @@ static int subpage_register (subpage_t *mmio, uint32_t start, uint32_t end, uint16_t section); static subpage_t *subpage_init(AddressSpace *as, hwaddr base); -static void *(*phys_mem_alloc)(size_t size) = qemu_anon_ram_alloc; +static void *(*phys_mem_alloc)(size_t size, uint64_t *align) = + qemu_anon_ram_alloc; /* * Set a custom physical guest memory alloator. * Accelerators with unusual needs may need this. Hopefully, we can * get rid of it eventually. */ -void phys_mem_set_alloc(void *(*alloc)(size_t)) +void phys_mem_set_alloc(void *(*alloc)(size_t, uint64_t *align)) { phys_mem_alloc = alloc; } @@ -1098,6 +1099,7 @@ static void *file_ram_alloc(RAMBlock *block, error_propagate(errp, local_err); goto error; } + block->mr->align = hpagesize; if (memory < hpagesize) { error_setg(errp, "memory size 0x" RAM_ADDR_FMT " must be equal to " @@ -1309,7 +1311,8 @@ static ram_addr_t ram_block_add(RAMBlock *new_block, Error **errp) if (xen_enabled()) { xen_ram_alloc(new_block->offset, new_block->length, new_block->mr); } else { - new_block->host = phys_mem_alloc(new_block->length); + new_block->host = phys_mem_alloc(new_block->length, + &new_block->mr->align); if (!new_block->host) { error_setg_errno(errp, errno, "cannot set up guest memory '%s'", |
