Messages in this thread | | | Date | Wed, 4 May 2011 13:49:09 -0500 (CDT) | From | Christoph Lameter <> | Subject | Re: [block IO crash] Re: 2.6.39-rc5-git2 boot crashs |
| |
On Wed, 4 May 2011, Linus Torvalds wrote:
> > 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 ]
The unprotected version is the __this_cpu_cmpxchg_double? That currently has no user and could be removed. But all other functions also have __ variants so it was put there for symmetries sake.
> 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?
this_cpu_cmpxchg_double() affords protection against preemption but not irqs. In the allocator case we have to deal with interrupts so its not useful there. Other code that can guarantee that nothing runs from irq context can use this function and then the fallback handling on other arches can avoid disabling and enabling interrupts which is required by irqsafe_cpu_cmpxchg_double().
> 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.
The unlocked cmpxchg8b/16b is quite fast on x86. The __ function allows the use of cmpxchg8b on x86 and the fallback (and therefore longer) code on other archs.
But I see the point that __this_cpu_cmpxchg double is pretty useless. There is no user and so it could be removed.
| |