• Paul E. McKenney's avatar
    srcu: Add contention-triggered addition of srcu_node tree · 9f2e91d9
    Paul E. McKenney authored
    This commit instruments the acquisitions of the srcu_struct structure's
    ->lock, enabling the initiation of a transition from SRCU_SIZE_SMALL
    to SRCU_SIZE_BIG when sufficient contention is experienced.  The
    instrumentation counts the number of trylock failures within the confines
    of a single jiffy.  If that number exceeds the value specified by the
    srcutree.small_contention_lim kernel boot parameter (which defaults to
    100), and if the value specified by the srcutree.convert_to_big kernel
    boot parameter has the 0x10 bit set (defaults to 0), then a transition
    will be automatically initiated.
    
    By default, there will never be any transitions, so that none of the
    srcu_struct structures ever gains an srcu_node array.
    
    The useful values for srcutree.convert_to_big are:
    
    0x00:  Never convert.
    0x01:  Always convert at init_srcu_struct() time.
    0x02:  Convert when rcutorture prints its first round of statistics.
    0x03:  Decide conversion approach at boot given system size.
    0x10:  Convert if contention is encountered.
    0x12:  Convert if contention is encountered or when rcutorture prints
            its first round of statistics, whichever comes first.
    
    The value 0x11 acts the same as 0x01 because the conversion happens
    before there is any chance of contention.
    
    [ paulmck: Apply "static" feedback from kernel test robot. ]
    Co-developed-by: default avatarNeeraj Upadhyay <quic_neeraju@quicinc.com>
    Signed-off-by: default avatarNeeraj Upadhyay <quic_neeraju@quicinc.com>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    9f2e91d9
srcutree.c 55 KB