From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54705) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZClwO-0002vj-7d for qemu-devel@nongnu.org; Wed, 08 Jul 2015 05:46:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZClwM-00081t-TO for qemu-devel@nongnu.org; Wed, 08 Jul 2015 05:46:56 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42767) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZClwM-00081b-G6 for qemu-devel@nongnu.org; Wed, 08 Jul 2015 05:46:54 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 0CE7130600D for ; Wed, 8 Jul 2015 09:46:54 +0000 (UTC) From: Igor Mammedov Date: Wed, 8 Jul 2015 11:46:41 +0200 Message-Id: <1436348808-223033-2-git-send-email-imammedo@redhat.com> In-Reply-To: <1436348808-223033-1-git-send-email-imammedo@redhat.com> References: <1436348808-223033-1-git-send-email-imammedo@redhat.com> Subject: [Qemu-devel] [RFC v3 1/8] memory: get rid of memory_region_destructor_ram_from_ptr() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: pbonzini@redhat.com, mst@redhat.com memory_region_destructor_ram() -> qemu_ram_free() calls reclaim_ramblock() which does: if (!(block->flags & RAM_PREALLOC)) free_host_memory() g_free(block) while memory_region_destructor_ram_from_ptr() -> qemu_ram_free_from_ptr() calls g_free_rcu(block, rcu) results -> g_free(block) and for memory_region_init_ram_ptr() we set RAM_PREALLOC so qemu_ram_free() degrades to just g_free(block) so we could just use qemu_ram_free() instead of qemu_ram_free_from_ptr(). Signed-off-by: Igor Mammedov Conflicts: memory.c --- exec.c | 19 ------------------- include/exec/ram_addr.h | 1 - memory.c | 7 +------ 3 files changed, 1 insertion(+), 26 deletions(-) diff --git a/exec.c b/exec.c index 251dc79..eb5ece7 100644 --- a/exec.c +++ b/exec.c @@ -1571,25 +1571,6 @@ ram_addr_t qemu_ram_alloc_resizeable(ram_addr_t size, ram_addr_t maxsz, return qemu_ram_alloc_internal(size, maxsz, resized, NULL, true, mr, errp); } -void qemu_ram_free_from_ptr(ram_addr_t addr) -{ - RAMBlock *block; - - qemu_mutex_lock_ramlist(); - QLIST_FOREACH_RCU(block, &ram_list.blocks, next) { - if (addr == block->offset) { - QLIST_REMOVE_RCU(block, next); - ram_list.mru_block = NULL; - /* Write list before version */ - smp_wmb(); - ram_list.version++; - g_free_rcu(block, rcu); - break; - } - } - qemu_mutex_unlock_ramlist(); -} - static void reclaim_ramblock(RAMBlock *block) { if (block->flags & RAM_PREALLOC) { diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h index c113f21..9c10462 100644 --- a/include/exec/ram_addr.h +++ b/include/exec/ram_addr.h @@ -37,7 +37,6 @@ int qemu_get_ram_fd(ram_addr_t addr); void *qemu_get_ram_block_host_ptr(ram_addr_t addr); void *qemu_get_ram_ptr(ram_addr_t addr); void qemu_ram_free(ram_addr_t addr); -void qemu_ram_free_from_ptr(ram_addr_t addr); int qemu_ram_resize(ram_addr_t base, ram_addr_t newsize, Error **errp); diff --git a/memory.c b/memory.c index 5a0cc66..ec07ae8 100644 --- a/memory.c +++ b/memory.c @@ -864,11 +864,6 @@ static void memory_region_destructor_alias(MemoryRegion *mr) memory_region_unref(mr->alias); } -static void memory_region_destructor_ram_from_ptr(MemoryRegion *mr) -{ - qemu_ram_free_from_ptr(mr->ram_addr); -} - static void memory_region_destructor_rom_device(MemoryRegion *mr) { qemu_ram_free(mr->ram_addr & TARGET_PAGE_MASK); @@ -1251,7 +1246,7 @@ void memory_region_init_ram_ptr(MemoryRegion *mr, memory_region_init(mr, owner, name, size); mr->ram = true; mr->terminates = true; - mr->destructor = memory_region_destructor_ram_from_ptr; + mr->destructor = memory_region_destructor_ram; mr->dirty_log_mask = tcg_enabled() ? (1 << DIRTY_MEMORY_CODE) : 0; /* qemu_ram_alloc_from_ptr cannot fail with ptr != NULL. */ -- 1.8.3.1