diff mbox

[5/6] exec: Pass RAMBlock pointer to qemu_ram_free

Message ID 1456713443-16834-6-git-send-email-famz@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Fam Zheng Feb. 29, 2016, 2:37 a.m. UTC
The only caller now knows exactly which RAMBlock to free, so it's not
necessary to do the lookup.

Signed-off-by: Fam Zheng <famz@redhat.com>
---
 exec.c                  | 21 +++++++--------------
 include/exec/ram_addr.h |  2 +-
 memory.c                |  4 ++--
 3 files changed, 10 insertions(+), 17 deletions(-)

Comments

Gonglei (Arei) March 1, 2016, 2:39 a.m. UTC | #1
> Subject: [Qemu-devel] [PATCH 5/6] exec: Pass RAMBlock pointer to
> qemu_ram_free
> 
> The only caller now knows exactly which RAMBlock to free, so it's not
> necessary to do the lookup.
> 
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
>  exec.c                  | 21 +++++++--------------
>  include/exec/ram_addr.h |  2 +-
>  memory.c                |  4 ++--
>  3 files changed, 10 insertions(+), 17 deletions(-)
> 

Nice ;)

Reviewed-by: Gonglei <arei.gonglei@huawei.com>


> diff --git a/exec.c b/exec.c
> index 6ed4203..ad8b826 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -1751,22 +1751,15 @@ static void reclaim_ramblock(RAMBlock *block)
>      g_free(block);
>  }
> 
> -void qemu_ram_free(ram_addr_t addr)
> +void qemu_ram_free(RAMBlock *block)
>  {
> -    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++;
> -            call_rcu(block, reclaim_ramblock, rcu);
> -            break;
> -        }
> -    }
> +    QLIST_REMOVE_RCU(block, next);
> +    ram_list.mru_block = NULL;
> +    /* Write list before version */
> +    smp_wmb();
> +    ram_list.version++;
> +    call_rcu(block, reclaim_ramblock, rcu);
>      qemu_mutex_unlock_ramlist();
>  }
> 
> diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h
> index 865e19b..5adf7a4 100644
> --- a/include/exec/ram_addr.h
> +++ b/include/exec/ram_addr.h
> @@ -108,7 +108,7 @@ RAMBlock *qemu_ram_alloc_resizeable(ram_addr_t
> size, ram_addr_t max_size,
>  int qemu_get_ram_fd(ram_addr_t addr);
>  void qemu_set_ram_fd(ram_addr_t addr, int fd);
>  void *qemu_get_ram_block_host_ptr(ram_addr_t addr);
> -void qemu_ram_free(ram_addr_t addr);
> +void qemu_ram_free(RAMBlock *block);
> 
>  int qemu_ram_resize(ram_addr_t base, ram_addr_t newsize, Error **errp);
> 
> diff --git a/memory.c b/memory.c
> index b221f3c..32d2912 100644
> --- a/memory.c
> +++ b/memory.c
> @@ -858,12 +858,12 @@ static void
> memory_region_destructor_none(MemoryRegion *mr)
> 
>  static void memory_region_destructor_ram(MemoryRegion *mr)
>  {
> -    qemu_ram_free(memory_region_get_ram_addr(mr));
> +    qemu_ram_free(mr->ram_block);
>  }
> 
>  static void memory_region_destructor_rom_device(MemoryRegion *mr)
>  {
> -    qemu_ram_free(memory_region_get_ram_addr(mr) &
> TARGET_PAGE_MASK);
> +    qemu_ram_free(mr->ram_block);
>  }
> 
>  static bool memory_region_need_escape(char c)
> --
> 2.4.3
>
diff mbox

Patch

diff --git a/exec.c b/exec.c
index 6ed4203..ad8b826 100644
--- a/exec.c
+++ b/exec.c
@@ -1751,22 +1751,15 @@  static void reclaim_ramblock(RAMBlock *block)
     g_free(block);
 }
 
-void qemu_ram_free(ram_addr_t addr)
+void qemu_ram_free(RAMBlock *block)
 {
-    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++;
-            call_rcu(block, reclaim_ramblock, rcu);
-            break;
-        }
-    }
+    QLIST_REMOVE_RCU(block, next);
+    ram_list.mru_block = NULL;
+    /* Write list before version */
+    smp_wmb();
+    ram_list.version++;
+    call_rcu(block, reclaim_ramblock, rcu);
     qemu_mutex_unlock_ramlist();
 }
 
diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h
index 865e19b..5adf7a4 100644
--- a/include/exec/ram_addr.h
+++ b/include/exec/ram_addr.h
@@ -108,7 +108,7 @@  RAMBlock *qemu_ram_alloc_resizeable(ram_addr_t size, ram_addr_t max_size,
 int qemu_get_ram_fd(ram_addr_t addr);
 void qemu_set_ram_fd(ram_addr_t addr, int fd);
 void *qemu_get_ram_block_host_ptr(ram_addr_t addr);
-void qemu_ram_free(ram_addr_t addr);
+void qemu_ram_free(RAMBlock *block);
 
 int qemu_ram_resize(ram_addr_t base, ram_addr_t newsize, Error **errp);
 
diff --git a/memory.c b/memory.c
index b221f3c..32d2912 100644
--- a/memory.c
+++ b/memory.c
@@ -858,12 +858,12 @@  static void memory_region_destructor_none(MemoryRegion *mr)
 
 static void memory_region_destructor_ram(MemoryRegion *mr)
 {
-    qemu_ram_free(memory_region_get_ram_addr(mr));
+    qemu_ram_free(mr->ram_block);
 }
 
 static void memory_region_destructor_rom_device(MemoryRegion *mr)
 {
-    qemu_ram_free(memory_region_get_ram_addr(mr) & TARGET_PAGE_MASK);
+    qemu_ram_free(mr->ram_block);
 }
 
 static bool memory_region_need_escape(char c)