* Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > Unrelated: > > On Thu, 8 Jan 2009, Chris Mason wrote: > > > > RIP: 0010:[<ffffffff8024f4de>] [<ffffffff8024f4de>] __cmpxchg+0x36/0x3f > > Ouch. HOW THE HELL DID THAT NOT GET INLINED? > > cmpxchg() is a _single_ instruction if it's inlined, but it's a horrible > mess of dynamic conditionals on the (constant - per call-site) size > argument if it isn't. > > It looks like you probably enabled the "let gcc mess up inlining" config > option. > > Ingo - I think we need to remove that crap again. Because gcc gets the > inlining horribly horribly wrong. As usual. Apparently it messes up with asm()s: it doesnt know the contents of the asm() and hence it over-estimates the size [based on string heuristics] ... Which is bad - asm()s tend to be the most important entities to inline - all over our fastpaths . Despite that messup it's still a 1% net size win: text data bss dec hex filename 7109652 1464684 802888 9377224 8f15c8 vmlinux.always-inline 7046115 1465324 802888 9314327 8e2017 vmlinux.optimized-inlining That win is mixed in slowpath and fastpath as well. I see three options: - Disable CONFIG_OPTIMIZE_INLINING=y altogether (it's already default-off) - Change the asm() inline markers to something new like asm_inline, which defaults to __always_inline. - Just mark all asm() inline markers as __always_inline - realizing that these should never ever be out of line. We might still try the second or third options, as i think we shouldnt go back into the business of managing the inline attributes of ~100,000 kernel functions. I'll try to annotate the inline asms (there's not _that_ many of them), and measure what the size impact is. Ingo -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html