• Rasmus Villemoes's avatar
    x86: bug.h: use asm_inline in _BUG_FLAGS definitions · 32ee8230
    Rasmus Villemoes authored
    This helps preventing a BUG* or WARN* in some static inline from
    preventing that (or one of its callers) being inlined, so should allow
    gcc to make better informed inlining decisions.
    
    For example, with gcc 9.2, tcp_fastopen_no_cookie() vanishes from
    net/ipv4/tcp_fastopen.o. It does not itself have any BUG or WARN, but
    it calls dst_metric() which has a WARN_ON_ONCE - and despite that
    WARN_ON_ONCE vanishing since the condition is compile-time false,
    dst_metric() is apparently sufficiently "large" that when it gets
    inlined into tcp_fastopen_no_cookie(), the latter becomes too large
    for inlining.
    
    Overall, if one asks size(1), .text decreases a little and .data
    increases by about the same amount (x86-64 defconfig)
    
    $ size vmlinux.{before,after}
       text    data     bss     dec     hex filename
    19709726        5202600 1630280 26542606        195020e vmlinux.before
    19709330        5203068 1630280 26542678        1950256 vmlinux.after
    
    while bloat-o-meter says
    
    add/remove: 10/28 grow/shrink: 103/51 up/down: 3669/-2854 (815)
    ...
    Total: Before=14783683, After=14784498, chg +0.01%
    Acked-by: default avatarIngo Molnar <mingo@kernel.org>
    Signed-off-by: default avatarRasmus Villemoes <linux@rasmusvillemoes.dk>
    Signed-off-by: default avatarMiguel Ojeda <miguel.ojeda.sandonis@gmail.com>
    32ee8230
bug.h 2.08 KB