• Peter Zijlstra's avatar
    module: Rework module_addr_{min,max} · 4f666546
    Peter Zijlstra authored
    __module_address() does an initial bound check before doing the
    {list/tree} iteration to find the actual module. The bound variables
    are nowhere near the mod_tree cacheline, in fact they're nowhere near
    one another.
    module_addr_min lives in .data while module_addr_max lives in .bss
    (smarty pants GCC thinks the explicit 0 assignment is a mistake).
    Rectify this by moving the two variables into a structure together
    with the latch_tree_root to guarantee they all share the same
    cacheline and avoid hitting two extra cachelines for the lookup.
    While reworking the bounds code, move the bound update from allocation
    to insertion time, this avoids updating the bounds for a few error
    Cc: Rusty Russell <rusty@rustcorp.com.au>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
module.c 102 KB