Skip to content

Commit

Permalink
exec: Pass RAMBlock pointer to qemu_ram_free
Browse files Browse the repository at this point in the history
The only caller now knows exactly which RAMBlock to free, so it's not
necessary to do the lookup.

Reviewed-by: Gonglei <[email protected]>
Signed-off-by: Fam Zheng <[email protected]>
Message-Id: <[email protected]>
Signed-off-by: Paolo Bonzini <[email protected]>
  • Loading branch information
Fam Zheng authored and bonzini committed Mar 7, 2016
1 parent 8e41fb6 commit f1060c5
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 17 deletions.
21 changes: 7 additions & 14 deletions exec.c
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}

Expand Down
2 changes: 1 addition & 1 deletion include/exec/ram_addr.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
4 changes: 2 additions & 2 deletions memory.c
Original file line number Diff line number Diff line change
Expand Up @@ -902,12 +902,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)
Expand Down

0 comments on commit f1060c5

Please sign in to comment.