On 07/09/2016 06:03, Richard Henderson wrote: > >> + if (mr->global_locking) { >> + qemu_mutex_lock_iothread(); >> + locked = true; >> + } >> memory_region_dispatch_read(mr, physaddr, &val, 1 << SHIFT, >> iotlbentry->attrs); >> + if (locked) { >> + qemu_mutex_unlock_iothread(); >> + } > > I'm not keen on this pattern. > > (1) Why not use recursive locks?
Probably I'm biased by looking at this code too long, but... how would they help? > (2) If there's a good reason why not, then perhaps > > if (mr->global_locking) { > qemu_mutex_lock_iothread(); > do_something; > qemu_mutex_unlock_iothread(); > } else { > do_something; > } I went with the other one because the arguments to memory_region_dispatch_read are relatively many, but this can work too if Alex prefers it. Paolo