mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-06-02 03:50:31 +00:00
Move RAMBlock deallocation to reclaim_ramblock
Backports a minor portion of commit 43771539d4666cba16298fc6b0ea63867425277c from qemu
This commit is contained in:
parent
aa0ce52b97
commit
6a7974277a
30
qemu/exec.c
30
qemu/exec.c
|
@ -1205,6 +1205,21 @@ 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);
|
return qemu_ram_alloc_internal(size, maxsz, resized, NULL, true, mr, errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void reclaim_ramblock(RAMBlock *block)
|
||||||
|
{
|
||||||
|
if (block->flags & RAM_PREALLOC) {
|
||||||
|
;
|
||||||
|
#ifndef _WIN32
|
||||||
|
} else if (block->fd >= 0) {
|
||||||
|
munmap(block->host, block->max_length);
|
||||||
|
close(block->fd);
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
qemu_anon_ram_free(block->host, block->max_length);
|
||||||
|
}
|
||||||
|
g_free(block);
|
||||||
|
}
|
||||||
|
|
||||||
void qemu_ram_free(struct uc_struct *uc, ram_addr_t addr)
|
void qemu_ram_free(struct uc_struct *uc, ram_addr_t addr)
|
||||||
{
|
{
|
||||||
RAMBlock *block;
|
RAMBlock *block;
|
||||||
|
@ -1213,18 +1228,11 @@ void qemu_ram_free(struct uc_struct *uc, ram_addr_t addr)
|
||||||
if (addr == block->offset) {
|
if (addr == block->offset) {
|
||||||
QLIST_REMOVE(block, next);
|
QLIST_REMOVE(block, next);
|
||||||
uc->ram_list.mru_block = NULL;
|
uc->ram_list.mru_block = NULL;
|
||||||
|
/* Write list before version */
|
||||||
|
smp_wmb();
|
||||||
uc->ram_list.version++;
|
uc->ram_list.version++;
|
||||||
if (block->flags & RAM_PREALLOC) {
|
// Unicorn: call directly instead of via call_rcu
|
||||||
;
|
reclaim_ramblock(block);
|
||||||
#ifndef _WIN32
|
|
||||||
} else if (block->fd >= 0) {
|
|
||||||
munmap(block->host, block->max_length);
|
|
||||||
close(block->fd);
|
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
qemu_anon_ram_free(block->host, block->max_length);
|
|
||||||
}
|
|
||||||
g_free(block);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue