mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-01-22 04:01:09 +00:00
Convert ram_list to RCU
Allow "unlocked" reads of the ram_list by using an RCU-enabled QLIST. The ramlist mutex is kept. call_rcu callbacks are run with the iothread lock taken, but that may change in the future. Writers still take the ramlist mutex, but they no longer need to assume that the iothread lock is taken. Readers of the list, instead, no longer require either the iothread or ramlist mutex, but they need to use rcu_read_lock() and rcu_read_unlock(). One place in arch_init.c was downgrading from write side to read side like this: qemu_mutex_lock_iothread() qemu_mutex_lock_ramlist() ... qemu_mutex_unlock_iothread() ... qemu_mutex_unlock_ramlist() and the equivalent idiom is: qemu_mutex_lock_ramlist() rcu_read_lock() ... qemu_mutex_unlock_ramlist() ... rcu_read_unlock() Backports the write barriers from commit 0dc3f44aca18b1be8b425f3f4feb4b3e8d68de2e in qemu
This commit is contained in:
parent
2b93290eea
commit
024ec1755e
|
@ -1105,6 +1105,8 @@ static ram_addr_t ram_block_add(struct uc_struct *uc, RAMBlock *new_block, Error
|
|||
}
|
||||
uc->ram_list.mru_block = NULL;
|
||||
|
||||
/* Write list before version */
|
||||
smp_wmb();
|
||||
uc->ram_list.version++;
|
||||
|
||||
new_ram_size = last_ram_offset(uc) >> TARGET_PAGE_BITS;
|
||||
|
|
Loading…
Reference in a new issue