• Arnd Bergmann's avatar
    media: em28xx: split up em28xx_dvb_init to reduce stack size · f410b409
    Arnd Bergmann authored
    With CONFIG_KASAN, the init function uses a large amount of kernel stack:
    
    drivers/media/usb/em28xx/em28xx-dvb.c: In function 'em28xx_dvb_init.part.4':
    drivers/media/usb/em28xx/em28xx-dvb.c:2061:1: error: the frame size of 3232 bytes is larger than 2048 bytes [-Werror=frame-larger-than=]
    
    Using gcc-7 with -fsanitize-address-use-after-scope makes this even worse:
    
    drivers/media/usb/em28xx/em28xx-dvb.c: In function 'em28xx_dvb_init':
    drivers/media/usb/em28xx/em28xx-dvb.c:2069:1: error: the frame size of 4280 bytes is larger than 3072 bytes [-Werror=frame-larger-than=]
    
    By splitting out each part of the switch/case statement that has its own local
    variables into a separate function, no single one of them uses more than 500 bytes,
    and with a noinline_for_stack annotation we can ensure that they are not merged
    back together.
    
    [mchehab@s-opensource.com: fix conflict with changeset
     be7fd3c3 ("media: em28xx: Hauppauge DualHD second tuner functionality")]
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: Mauro Carvalho Chehab <>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
    f410b409
em28xx-dvb.c 60.3 KB