On Sun, Oct 20, 2019 at 4:12 PM Philippe Mathieu-Daudé <phi...@redhat.com> wrote: > > All the codebase calls memory_region_allocate_system_memory() with > a NULL 'owner' from the board_init() function. > Let pass a MachineState argument, and enforce the QOM ownership of > the system memory. > > Signed-off-by: Philippe Mathieu-Daudé <phi...@redhat.com>
Reviewed-by: Alistair Francis <alistair.fran...@wdc.com> Alistair > --- > hw/core/numa.c | 11 +++++++---- > include/hw/boards.h | 6 ++++-- > 2 files changed, 11 insertions(+), 6 deletions(-) > > diff --git a/hw/core/numa.c b/hw/core/numa.c > index 038c96d4ab..2e29e4bfe0 100644 > --- a/hw/core/numa.c > +++ b/hw/core/numa.c > @@ -520,21 +520,24 @@ static void allocate_system_memory_nonnuma(MemoryRegion > *mr, Object *owner, > vmstate_register_ram_global(mr); > } > > -void memory_region_allocate_system_memory(MemoryRegion *mr, Object *owner, > +void memory_region_allocate_system_memory(MemoryRegion *mr, MachineState *ms, > const char *name, > uint64_t ram_size) > { > uint64_t addr = 0; > int i; > - MachineState *ms = MACHINE(qdev_get_machine()); > + > + if (!ms) { > + ms = MACHINE(qdev_get_machine()); > + } > > if (ms->numa_state == NULL || > ms->numa_state->num_nodes == 0 || !have_memdevs) { > - allocate_system_memory_nonnuma(mr, owner, name, ram_size); > + allocate_system_memory_nonnuma(mr, OBJECT(ms), name, ram_size); > return; > } > > - memory_region_init(mr, owner, name, ram_size); > + memory_region_init(mr, OBJECT(ms), name, ram_size); > for (i = 0; i < ms->numa_state->num_nodes; i++) { > uint64_t size = ms->numa_state->nodes[i].node_mem; > HostMemoryBackend *backend = ms->numa_state->nodes[i].node_memdev; > diff --git a/include/hw/boards.h b/include/hw/boards.h > index de45087f34..3b6cb82b6c 100644 > --- a/include/hw/boards.h > +++ b/include/hw/boards.h > @@ -14,7 +14,7 @@ > /** > * memory_region_allocate_system_memory - Allocate a board's main memory > * @mr: the #MemoryRegion to be initialized > - * @owner: the object that tracks the region's reference count > + * @ms: the #MachineState object that own the system memory > * @name: name of the memory region > * @ram_size: size of the region in bytes > * > @@ -38,8 +38,10 @@ > * Smaller pieces of memory (display RAM, static RAMs, etc) don't need > * to be backed via the -mem-path memory backend and can simply > * be created via memory_region_init_ram(). > + * > + * The #MachineState object will track the region's reference count. > */ > -void memory_region_allocate_system_memory(MemoryRegion *mr, Object *owner, > +void memory_region_allocate_system_memory(MemoryRegion *mr, MachineState *ms, > const char *name, > uint64_t ram_size); > > -- > 2.21.0 > >