From: Linus Torvalds > Sent: 11 May 2017 19:48 ... > The one question I have is about "spin_on_cond()": since you > explicitly document that the "no spinning" case is expected to be the > default, I really think that the default implementation should be > along the lines if > > #define spin_on_cond(cond) do { \ > if (unlikely(!(cond))) { \ > spin_begin(); do spin_cpu_relax(); while (!(cond)); spin_end(); \ > } \ > } while (0) > > which will actually result in better code generation even if > spin_begin/end() are no-ops, and just generally optimizes for the > right behavior (ie do the spinning out-of-line, since by definition it > cannot be performance-critical after the first iteration). At least some versions of gcc convert while (cond) do {body} into if (cond) do {body} while (cond) even when 'cond' is a non-trivial expression and 'body' is trivial. The code-bloat is silly. No point enforcing the 'optimisation' here. David