On Tue, Jun 26, 2012 at 10:34:00PM +0200, Andi Kleen wrote: > > How is the compiler meant to optimise away "cond" if it's a function > > call? > > Inlines can be optimized away. These tests are usually inlines. > > > What did I miss? If nothing, then I will revert this particular change > > and Rafael will need to be sure his patch is not using VM_BUG_ON to call > > a function with side-effects. > > Do you have an example where the code is actually different, > or are you just speculating? > > FWIW for my config both generates the same code: > > size vmlinux-andi-vmbug vmlinux-vmbug-nothing > text data bss dec hex filename > 11809704 1457352 1159168 14426224 dc2070 vmlinux-andi-vmbug > 11809704 1457352 1159168 14426224 dc2070 vmlinux-vmbug-nothing > They are the same size because CONFIG_DEBUG_VM and !CONFIG_DEBUG_VM generate the same code! I applied the patch below again 3.4 and got the following results text data bss dec hex filename 6918617 1795640 2260992 10975249 a77811 vmlinux-default-no-vmdebug 6916633 1795640 2260992 10973265 a77051 vmlinux-patched-no-vmdebug That's almost 2K of text! I see now that in 3.5 this was already spotted and fixed by Konstantin in commit [02602a18: bug: completely remove code generated by disabled VM_BUG_ON()]. That patch restores the rule that VM_BUG_ON() cannot call anything with side-effects. So Rafael, watch your use of VM_BUG_ON or you'll find that the your patches work in 3.4 and leak in 3.5. diff --git a/include/linux/mmdebug.h b/include/linux/mmdebug.h index c04ecfe..ee24ef8 100644 --- a/include/linux/mmdebug.h +++ b/include/linux/mmdebug.h @@ -4,7 +4,7 @@ #ifdef CONFIG_DEBUG_VM #define VM_BUG_ON(cond) BUG_ON(cond) #else -#define VM_BUG_ON(cond) do { (void)(cond); } while (0) +#define VM_BUG_ON(cond) do { } while (0) #endif #ifdef CONFIG_DEBUG_VIRTUAL -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>