qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 5/6] exec: Pass RAMBlock pointer to qemu_ram_fre


From: Gonglei (Arei)
Subject: Re: [Qemu-devel] [PATCH 5/6] exec: Pass RAMBlock pointer to qemu_ram_free
Date: Tue, 1 Mar 2016 02:39:48 +0000

> 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 <address@hidden>
> ---
>  exec.c                  | 21 +++++++--------------
>  include/exec/ram_addr.h |  2 +-
>  memory.c                |  4 ++--
>  3 files changed, 10 insertions(+), 17 deletions(-)
> 

Nice ;)

Reviewed-by: Gonglei <address@hidden>


> 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
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]