Messages in this thread | | | Date | Wed, 4 May 2011 23:40:33 +0200 (CEST) | From | Thomas Gleixner <> | Subject | Re: [block IO crash] Re: 2.6.39-rc5-git2 boot crashs |
| |
On Wed, 4 May 2011, Linus Torvalds wrote:
> On Wed, May 4, 2011 at 2:06 PM, Linus Torvalds > <torvalds@linux-foundation.org> wrote: > > > > The problem is that cmpxchg *IS*NOT*AN*CMPXCHG*AT*ALL*. Not even on UP. > > Btw, the really sad thing is that as far as I can tell, the > cmpxchg64_local() function that we define actually gets this *right*, > with a helper function that actually works (and disables interrupts) > and all the alternative_io() stuff to then use the right instruction > automatically if the CPU supports it, rather than making it a > hardcoded decision. > > But we don't use it, because the "percpu_cmpxchg8b_double()" code > rolls its own inferior version, and has slightly different semantics > (ie the whole "return value success" thing).
Yeah, I tripped over that as well. And the new shiny extra CONFIG_CMPXCHG_DOUBLE misfeature Christoph nailed together is just ignoring it as well. It's just more useless #ifdef and CONFIG bloat.
That whole this_cpu_* stuff seems to be designed by committee. A quick grep shows that max. 10% of the implemented macro hell is actually used. Can we get rid of all unused ones and bring them back when they are actually required?
Thanks,
tglx
| |