[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] memory: move MemoryRegion::size cleanup to memo
From: |
Laszlo Ersek |
Subject: |
Re: [Qemu-devel] [PATCH] memory: move MemoryRegion::size cleanup to memory_region_finalize() |
Date: |
Tue, 9 Oct 2018 17:23:20 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 |
On 10/09/18 15:50, Igor Mammedov wrote:
> It's not necessary to clean up MemoryRegion::size manually in multiple places
> like it's been implemented in
> (1cd3d49262 "memory: cleanup side effects of memory_region_init_foo() on
> failure")
> since each memory_region_init_foo() now calls object_unparent(mr) on failure,
> memory region destructor memory_region_finalize() will be called upon its
> completion for each memory_region_init_foo().
> It's sufficient to clean MemoryRegion::size only from
> memory_region_finalize(),
> so do it.
>
> Suggested-by: Laszlo Ersek <address@hidden>
> Signed-off-by: Igor Mammedov <address@hidden>
> ---
> smoke tested with reproducer from 1cd3d49262, thing still works as expected
> ---
> memory.c | 7 +------
> 1 file changed, 1 insertion(+), 6 deletions(-)
>
> diff --git a/memory.c b/memory.c
> index d852f11..ad24b57 100644
> --- a/memory.c
> +++ b/memory.c
> @@ -1491,7 +1491,6 @@ void
> memory_region_init_ram_shared_nomigrate(MemoryRegion *mr,
> mr->ram_block = qemu_ram_alloc(size, share, mr, &err);
> mr->dirty_log_mask = tcg_enabled() ? (1 << DIRTY_MEMORY_CODE) : 0;
> if (err) {
> - mr->size = int128_zero();
> object_unparent(OBJECT(mr));
> error_propagate(errp, err);
> }
> @@ -1516,7 +1515,6 @@ void memory_region_init_resizeable_ram(MemoryRegion *mr,
> mr, &err);
> mr->dirty_log_mask = tcg_enabled() ? (1 << DIRTY_MEMORY_CODE) : 0;
> if (err) {
> - mr->size = int128_zero();
> object_unparent(OBJECT(mr));
> error_propagate(errp, err);
> }
> @@ -1541,7 +1539,6 @@ void memory_region_init_ram_from_file(MemoryRegion *mr,
> mr->ram_block = qemu_ram_alloc_from_file(size, mr, ram_flags, path,
> &err);
> mr->dirty_log_mask = tcg_enabled() ? (1 << DIRTY_MEMORY_CODE) : 0;
> if (err) {
> - mr->size = int128_zero();
> object_unparent(OBJECT(mr));
> error_propagate(errp, err);
> }
> @@ -1565,7 +1562,6 @@ void memory_region_init_ram_from_fd(MemoryRegion *mr,
> fd, &err);
> mr->dirty_log_mask = tcg_enabled() ? (1 << DIRTY_MEMORY_CODE) : 0;
> if (err) {
> - mr->size = int128_zero();
> object_unparent(OBJECT(mr));
> error_propagate(errp, err);
> }
> @@ -1628,7 +1624,6 @@ void memory_region_init_rom_nomigrate(MemoryRegion *mr,
> mr->ram_block = qemu_ram_alloc(size, false, mr, &err);
> mr->dirty_log_mask = tcg_enabled() ? (1 << DIRTY_MEMORY_CODE) : 0;
> if (err) {
> - mr->size = int128_zero();
> object_unparent(OBJECT(mr));
> error_propagate(errp, err);
> }
> @@ -1652,7 +1647,6 @@ void
> memory_region_init_rom_device_nomigrate(MemoryRegion *mr,
> mr->destructor = memory_region_destructor_ram;
> mr->ram_block = qemu_ram_alloc(size, false, mr, &err);
> if (err) {
> - mr->size = int128_zero();
> object_unparent(OBJECT(mr));
> error_propagate(errp, err);
> }
> @@ -1701,6 +1695,7 @@ static void memory_region_finalize(Object *obj)
> memory_region_clear_coalescing(mr);
> g_free((char *)mr->name);
> g_free(mr->ioeventfds);
> + mr->size = int128_zero();
> }
>
> Object *memory_region_owner(MemoryRegion *mr)
>
Reviewed-by: Laszlo Ersek <address@hidden>
Thanks!
Laszlo