All of lore.kernel.org
 help / color / mirror / Atom feed
* rwlock and per-cpu rwlock recursive?
@ 2018-02-27 19:18 Julien Grall
  2018-02-27 19:57 ` Andrew Cooper
  0 siblings, 1 reply; 5+ messages in thread
From: Julien Grall @ 2018-02-27 19:18 UTC (permalink / raw)
  To: xen-devel, Jan Beulich, Andrew Cooper, Stefano Stabellini

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@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-02-28 11:20 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-27 19:18 rwlock and per-cpu rwlock recursive? Julien Grall
2018-02-27 19:57 ` Andrew Cooper
2018-02-28 10:28   ` Julien Grall
2018-02-28 11:18     ` Jan Beulich
2018-02-28 11:20       ` Julien Grall

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.