On Tue, Feb 04, 2014 at 12:28:46PM +0000, Will Deacon wrote: > When unlocking a spinlock, we require the following, strictly ordered > sequence of events: > > <barrier> /* dmb */ > <unlock> > <barrier> /* dsb */ > <sev> > > Whilst the code does indeed reflect this in terms of the architecture, > the final <barrier> + <sev> have been contracted into a single inline > asm without a "memory" clobber, therefore the compiler is at liberty to > reorder the unlock to the end of the above sequence. In such a case, > a waiting CPU may be woken up before the lock has been unlocked, leading > to extremely poor performance. > > This patch reworks the dsb_sev() function to make use of the dsb() > macro and ensure ordering against the unlock. > > Cc: <stable@xxxxxxxxxxxxxxx> > Reported-by: Mark Rutland <mark.rutland@xxxxxxx> > Signed-off-by: Will Deacon <will.deacon@xxxxxxx> FWIW: Reviewed-by: Christoffer Dall <christoffer.dall@xxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html