• Arnd Bergmann's avatar
    i40e: reduce stack usage in i40e_set_fc · 33b16568
    Arnd Bergmann authored
    The functions i40e_aq_get_phy_abilities_resp() and i40e_set_fc() both
    have giant structure on the stack, which makes each one use stack frames
    larger than 500 bytes.
    
    As clang decides one function into the other, we get a warning for
    exceeding the frame size limit on 32-bit architectures:
    
    drivers/net/ethernet/intel/i40e/i40e_common.c:1654:23: error: stack frame size of 1116 bytes in function 'i40e_set_fc' [-Werror,-Wframe-larger-than=]
    
    When building with gcc, the inlining does not happen, but i40e_set_fc()
    calls i40e_aq_get_phy_abilities_resp() anyway, so they add up on the
    kernel stack just as much.
    
    The parts that actually use large stacks don't overlap, so make sure
    each one is a separate function, and mark them as noinline_for_stack to
    prevent the compilers from combining them again.
    
    Fixes: 0a862b43 ("i40e/i40evf: Add module_types and update_link_info")
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    33b16568
i40e_common.c 174 KB