On Fri, Dec 23, 2011 at 8:55 AM, Christoph Lameter <cl@xxxxxxxxx> wrote: > > There is an #ifndef CONFIG_M386 around the implementation of these for > x86. Use on i386 will not generate an xadd instructions but fallback to a > generic implementation. Ok, good. It's not the really right thing to do, but it will at least work. > The add_return stuff was already available with the earlier per cpu apis > (local_t and percpu) that this_cpu replaces and is still available through > the atomic operations. Sure. The "atomic_op_return()" form actually *makes*sense*. It has atomicity guarantees, and the return value is meaningful. The same IS SIMPLY NOT TRUE of the "this_cpu" versions. > If one wants to exploit the per cpu atomicity then one may want to know > what the result was. No. You're blathering and doing "magical thinking" instead of actually thinking things through. Think about the semantics. What does it mean to get a result of the op on a percpu variable? You have two cases: Case 1: you actually know what CPU you are on, and the number may have some meaning. But in that case you are also *pinned* to that CPU, and there is no difference between x = percpu_value; x += y; percpu_value = x; .. look at 'x' .. to see what you did and percpu_value += x; ..look at percpu_value to see what you did .. and x = xadd percpu_value,y so there are no "atomicity advantages" - xadd is the same as open-coding it. You are pinned to the CPU, all three ways are 100% equivalent. The other case is: Case 2: you're not pinned to the CPU, and you just do statistics and add some value to memory. BUT NOW THE RESULT HAS ABSOLUTELY NO MEANING! Now "xadd" would possibly give different results from "add and read the result", since you migth be moving around between cpu's, but there is absolutely no way you could ever care, sine the value you read back is meaningless regardless of whether it's the return value of xadd, or the value from some other CPU. There are other cpu's with the same percpu variable, and they are all equivalent as far as you are concerned, because you're not pinned to one of them. See? xadd buys you *nothing* from a semantic standpoint. And anybody who *thinks* it buys you something is just confused and just introduced a bug. So the "thiscpu_op_return" functions are broken-by-design! They have no meaning. They are completely crazy. That's why they should be removed. Anybody who thinks they add value has not thought through what they actually do or mean. Linus -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html