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. Reviewed-by: Gonglei <arei.gonglei@huawei.com> Signed-off-by: Fam Zheng <famz@redhat.com> Message-Id: <1456813104-25902-6-git-send-email-famz@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
8e41fb63c5
commit
f1060c55bf
21
exec.c
21
exec.c
@ -1751,22 +1751,15 @@ static void reclaim_ramblock(RAMBlock *block)
|
|||||||
g_free(block);
|
g_free(block);
|
||||||
}
|
}
|
||||||
|
|
||||||
void qemu_ram_free(ram_addr_t addr)
|
void qemu_ram_free(RAMBlock *block)
|
||||||
{
|
{
|
||||||
RAMBlock *block;
|
|
||||||
|
|
||||||
qemu_mutex_lock_ramlist();
|
qemu_mutex_lock_ramlist();
|
||||||
QLIST_FOREACH_RCU(block, &ram_list.blocks, next) {
|
QLIST_REMOVE_RCU(block, next);
|
||||||
if (addr == block->offset) {
|
ram_list.mru_block = NULL;
|
||||||
QLIST_REMOVE_RCU(block, next);
|
/* Write list before version */
|
||||||
ram_list.mru_block = NULL;
|
smp_wmb();
|
||||||
/* Write list before version */
|
ram_list.version++;
|
||||||
smp_wmb();
|
call_rcu(block, reclaim_ramblock, rcu);
|
||||||
ram_list.version++;
|
|
||||||
call_rcu(block, reclaim_ramblock, rcu);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
qemu_mutex_unlock_ramlist();
|
qemu_mutex_unlock_ramlist();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
int qemu_get_ram_fd(ram_addr_t addr);
|
||||||
void qemu_set_ram_fd(ram_addr_t addr, int fd);
|
void qemu_set_ram_fd(ram_addr_t addr, int fd);
|
||||||
void *qemu_get_ram_block_host_ptr(ram_addr_t addr);
|
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);
|
int qemu_ram_resize(ram_addr_t base, ram_addr_t newsize, Error **errp);
|
||||||
|
|
||||||
|
4
memory.c
4
memory.c
@ -902,12 +902,12 @@ static void memory_region_destructor_none(MemoryRegion *mr)
|
|||||||
|
|
||||||
static void memory_region_destructor_ram(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)
|
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)
|
static bool memory_region_need_escape(char c)
|
||||||
|
Loading…
Reference in New Issue
Block a user