Linus Torvalds <torvalds at linux-foundation.org> writes: > On Wed, 13 Aug 2008, Huang Ying wrote: >> >> - xchg(&kexec_lock, 0); >> + locked = xchg(&kexec_lock, 0); >> + BUG_ON(!locked); > > Why do you want to do this at all? > > And why do you implement your locks with xchg() in the first place? That's > total and utter crap. > > Hint: we have _real_ locking primitives in the kernel. This part certainly. The way the code should work, and the way it has in the past is: image = xchg(&kexec_image, NULL) if (!image) return -EINVAL; Very simple and very obvious and very easy to get right, and it has been that way for years. Eric