On Thu, Mar 30, 2006 at 04:58:25PM -0800, Christoph Lameter wrote: > On Thu, 30 Mar 2006, Luck, Tony wrote: > > > > Also some higher level functions may want to have the mode passed to them > > > as parameters. See f.e. include/linux/buffer_head.h. Without the > > > parameters you will have to maintain farms of definitions for all cases. > > > > But if any part of the call chain from those higher level functions > > down to these low level functions is not inline, then the compiler > > won't be able to collapse out the "switch (mode)" ... so we'd end up > > with a ton of extra object code. > > Correct. But such bitops are typically defined to be inline. That's doesn't seem to be the point that Tony was making. To illustrate it let's add a practical example: static inline void clear_bit_mode(int bit, unsigned long *ptr, int mode) { case (mode) { ... } } void foo(blah blah, int mode) { ... complex function ... clear_bit_mode(bit, ptr, mode); ... } void bar(blah blah) { foo(blah, MODE_BARRIER); } In this case, the compiler can not optimise the unnecessary code from the clear_bit_mode because the mode argument quite definitely is not a constant known at compile time. Only if 'foo' was a static inline would it be known. -- Russell King Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/ maintainer of: 2.6 Serial core - : send the line "unsubscribe linux-ia64" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |