On Thu, May 11, 2017 at 9:57 AM, Nicholas Piggin <npiggin@xxxxxxxxx> wrote: > > If you find this acceptable, I'd like to start wiring in the powerpc > and adding the annotations to some important core spin loops (there's > not too many really). I'm hoping if you take this patch during this > merge window, I'll be able to start sending small patches to maintainers > for the next window. Unless you have a better suggestion for how to > deal with this. This looks fine to me as an interface, and yes, I guess I can just take this scaffolding as-is. 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). So it's better even when you don't really have the begin/end overhead, but that version of "spin_on_cond()" is then likely to work _much_ better if you actually do have it, when your version would seem to be entirely unacceptable. Hmm? In fact, do you even want to make that "spin_on_cond()" version conditional? I don't see how an architecture can really improve on it. If an architecture wants to use things like "wait on this particular variable", then that generic "cond" version is too generic an interface anyway. Linus