On 07/09/2016 08:43, Richard Henderson wrote: > On 09/06/2016 10:43 PM, Paolo Bonzini wrote: >> >> >> 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? > > You wouldn't check to see if the lock is already taken.
But it's only using qemu_mutex_iothread_locked() at unlock time, when we exit from longjmp. Here it's looking at a MemoryRegion to see if the MMIO callbacks need the lock or not (since most of them do). Paolo