| 
    
 [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] rwlock and per-cpu rwlock recursive?
 Hi,On Arm, we made the (wrong?) assumption that the rwlock was recursive. We have a couple of places where the read lock can be nested (mostly the memaccess code). 
I found out today that it can actually deadlock in the following case:
        1) CPU A -> Ask for the read lock
                => Succeed
        2) CPU B -> Ask for the write lock
                => Already taken by CPU A so go to the slowpath
                => Take the internal lock (lock->lock)
                => Wait until the lock is released.
        3) CPU A -> Ask for the read lock recursively
                => A writer is waiting so go to the slowpath
                => Try to take the internal lock (lock->lock)
                        => Blocking because CPU B already has it
So we end up in a deadlock case. Can someone confirm whether whether 
rwlock was meant to be recursive?
Similarly, I was thinking to move the p2m code to the per-cpu rwlock as x86 does. From what I gathered by reading the x86 code, this lock could be taken recursively. Am I right? Lastly, the x86 p2m code seemed to use rwlock before hand. How did the p2m code was handling recursive locking? Cheers, -- Julien Grall _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel 
 
  | 
  
![]()  | 
            
         Lists.xenproject.org is hosted with RackSpace, monitoring our  |