On 10/08/2015 18:36, Paolo Bonzini wrote: >> > diff --git a/target-arm/translate.c b/target-arm/translate.c >> > index 69ac18c..960c75e 100644 >> > --- a/target-arm/translate.c >> > +++ b/target-arm/translate.c >> > @@ -11166,6 +11166,8 @@ static inline void >> > gen_intermediate_code_internal(ARMCPU *cpu, >> > >> > dc->tb = tb; >> > >> > + tb_lock(); > This locks twice, I think? Both cpu_restore_state_from_tb and > tb_gen_code (which calls cpu_gen_code) take the lock. How does it work? >
... ah, the lock is recursive! I think this can be avoided. Let's look at it next week. Paolo