Messages in this thread | | | From | Linus Torvalds <> | Date | Wed, 4 May 2011 11:20:22 -0700 | Subject | Re: [block IO crash] Re: 2.6.39-rc5-git2 boot crashs |
| |
On Wed, May 4, 2011 at 8:53 AM, Linus Torvalds <torvalds@linux-foundation.org> wrote: > > I'll take it. I'm just hoping to also get Werner's tested-by for it. > > I'm pretty confident this is it, though, so if I don't get it by the > end of the day I'll just apply it regardless with just a reported-by > from him.
So I'm still waiting for the tested-by, but in the meantime I wrote a changelog. And part of that changelog reads:
[ Btw, that whole "generic code defaults to no protection" design just sounds stupid - if the code needs no protection, there is no reason to use "cmpxchg_double" to begin with. So we should probably just remove the unprotected version entirely as pointless. - Linus ]
which really sums up the whole thing.
The current "this_cpu_cmpxchg_double()" implementation is just incredibly idiotic. There is absolutely _no_ point to having that function at all. Why does it exist?
I can kind of see the point of the "preempt" version, although I'm not entirely convinced of that either. But the notion of having a "cmpxchg" function that isn't atomic even on a single CPU just makes me go "f*ck that, whoever wrote that is just a moron".
If the function doesn't need atomicity, you're really better off just writing it out. It's going to be faster on pretty much all architectures using just regular load/store instructions.
Linus
| |