Hello, 07/12/2013 18:54, Fran?ois-Fr?d?ric Ozog : > 1) If the critical section deals with weakly ordered loads then explicit > fencing MUST be used: if not, out of order execution will just kill your > idea of critical section. [...] > So use rte_mb() or rte_wmb() or rte_rmb() where appropriate. I recommend > the rte_unlock code and documentation explains the out of order execution > issues and the conditions they have to be mitigated with rte*mb(). I > wonder if having an explicit mfence in rte_sinlock_unlock wouldn't be just > necessary to avoid "hairy" bugs. In addition, we would have > rte_sinlock_unlock_no_mb used internally for performance reasons, and > usable externally by advanced users.
Using lock prefix is lighter than using memory barrier and have the same effects. But you're right about the bug in spinlocks. I am going to send a patch for this. -- Thomas