• Steven Rostedt's avatar
    fgraph: Allocate ret_stack_list with proper size · fae4078c
    Steven Rostedt authored
    The ret_stack_list is an array of ret_stack shadow stacks for the function
    graph usage. When the first function graph is enabled, all tasks in the
    system get a shadow stack. The ret_stack_list is a 32 element array of
    pointers to these shadow stacks. It allocates the shadow stack in batches
    (32 stacks at a time), assigns them to running tasks, and continues until
    all tasks are covered.
    
    When the function graph shadow stack changed from an array of
    ftrace_ret_stack structures to an array of longs, the allocation of
    ret_stack_list went from allocating an array of 32 elements to just a
    block defined by SHADOW_STACK_SIZE. Luckily, that's defined as PAGE_SIZE
    and is much more than enough to hold 32 pointers. But it is way overkill
    for the amount needed to allocate.
    
    Change the allocation of ret_stack_list back to a kcalloc() of
    FTRACE_RETSTACK_ALLOC_SIZE pointers.
    
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://lore.kernel.org/20241018215212.23f13f40@rorschach
    Fixes: 42675b72 ("function_graph: Convert ret_stack to a series of longs")
    Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
    fae4078c
fgraph.c 37.7 KB