• Arnd Bergmann's avatar
    scsi: lpfc: reduce stack size with CONFIG_GCC_PLUGIN_STRUCTLEAK_VERBOSE · 057959c6
    Arnd Bergmann authored
    The lpfc_debug_dump_all_queues() function repeatedly calls into
    lpfc_debug_dump_qe() which has a temporary 128 byte buffer.  This was fine
    before the introduction of CONFIG_GCC_PLUGIN_STRUCTLEAK_VERBOSE because
    each instance could occupy the same stack slot. However, now they each get
    their own copy, which leads to a huge increase in stack usage as seen from
    the compiler warning:
    
    drivers/scsi/lpfc/lpfc_debugfs.c: In function 'lpfc_debug_dump_all_queues':
    drivers/scsi/lpfc/lpfc_debugfs.c:6474:1: error: the frame size of 1712 bytes is larger than 100 bytes [-Werror=frame-larger-than=]
    
    Avoid this by not marking lpfc_debug_dump_qe() as inline so the compiler
    can choose to emit a static version of this function when it's needed or
    otherwise silently drop it. As an added benefit, not inlining multiple
    copies of this function means we save several kilobytes of .text section,
    reducing the file size from 47kb to 43.
    
    It is somewhat unusual to have a function that is static but not inline in
    a header file, but this does not cause problems here because it is only
    used by other inline functions. It would however seem reasonable to move
    all the lpfc_debug_dump_* functions into lpfc_debugfs.c and not mark them
    inline as a later cleanup.
    
    Fixes: 81a56f6d ("gcc-plugins: structleak: Generalize to all variable types")
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Acked-by: default avatarJames Smart <james.smart@broadcom.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    057959c6
lpfc_debugfs.h 19.3 KB