Hello, We have an issue with the kernel implementation :)
When lock debugging is enabled (MACH_LDEBUG set to 1 in configfrag.ac), simple_lock uses _simple_lock to check using simple locks correctly. It happens that vm_map_lock_read, i.e. lock_read, calls check_simple_locks(): no simple lock is supposed to be taken. So vm_map_lock_read can't come after simple_lock (&hbp->lock). It seems we could just invert the locking, could you check on that? Samuel