• L
    module: reduce stack usage for each_symbol() · 44032e63
    Linus Torvalds 提交于
    And now that I'm looking at that call-chain (to see if it would make sense
    to use some other more specific lock - doesn't look like it: all the
    readers are using RCU and this is the only writer), I also give you this
    trivial one-liner. It changes each_symbol() to not put that constant array
    on the stack, resulting in changing
    
            movq    $C.388.31095, %rsi      #, tmp85
            subq    $376, %rsp      #,
            movq    %rdi, %rbx      # fn, fn
            leaq    -208(%rbp), %rdi        #, tmp84
            movq    %rbx, %rdx      # fn,
            rep movsl
            xorl    %esi, %esi      #
            leaq    -208(%rbp), %rdi        #, tmp87
            movq    %r12, %rcx      # data,
            call    each_symbol_in_section.clone.0  #
    
    into
    
            xorl    %esi, %esi      #
            subq    $216, %rsp      #,
            movq    %rdi, %rbx      # fn, fn
            movq    $arr.31078, %rdi        #,
            call    each_symbol_in_section.clone.0  #
    
    which is not so much about being obviously shorter and simpler because we
    don't unnecessarily copy that constant array around onto the stack, but
    also about having a much smaller stack footprint (376 vs 216 bytes - see
    the update of 'rsp').
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: NRusty Russell <rusty@rustcorp.com.au>
    44032e63
module.c 82.2 KB