mirror of
https://github.com/torvalds/linux.git
synced 2026-10-07 22:37:45 -04:00
Add __stack_depot_save(), which provides more fine-grained control over stackdepot's memory allocation behaviour, in case stackdepot runs out of "stack slabs". Normally stackdepot uses alloc_pages() in case it runs out of space; passing can_alloc==false to __stack_depot_save() prohibits this, at the cost of more likely failure to record a stack trace. Link: https://lkml.kernel.org/r/[email protected] Signed-off-by: Marco Elver <[email protected]> Tested-by: Shuah Khan <[email protected]> Acked-by: Sebastian Andrzej Siewior <[email protected]> Reviewed-by: Andrey Konovalov <[email protected]> Cc: Alexander Potapenko <[email protected]> Cc: Andrey Ryabinin <[email protected]> Cc: Dmitry Vyukov <[email protected]> Cc: "Gustavo A. R. Silva" <[email protected]> Cc: Lai Jiangshan <[email protected]> Cc: Taras Madan <[email protected]> Cc: Tejun Heo <[email protected]> Cc: Thomas Gleixner <[email protected]> Cc: Vijayanand Jitta <[email protected]> Cc: Vinayak Menon <[email protected]> Cc: Walter Wu <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
40 lines
926 B
C
40 lines
926 B
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* A generic stack depot implementation
|
|
*
|
|
* Author: Alexander Potapenko <[email protected]>
|
|
* Copyright (C) 2016 Google, Inc.
|
|
*
|
|
* Based on code by Dmitry Chernenkov.
|
|
*/
|
|
|
|
#ifndef _LINUX_STACKDEPOT_H
|
|
#define _LINUX_STACKDEPOT_H
|
|
|
|
#include <linux/gfp.h>
|
|
|
|
typedef u32 depot_stack_handle_t;
|
|
|
|
depot_stack_handle_t __stack_depot_save(unsigned long *entries,
|
|
unsigned int nr_entries,
|
|
gfp_t gfp_flags, bool can_alloc);
|
|
|
|
depot_stack_handle_t stack_depot_save(unsigned long *entries,
|
|
unsigned int nr_entries, gfp_t gfp_flags);
|
|
|
|
unsigned int stack_depot_fetch(depot_stack_handle_t handle,
|
|
unsigned long **entries);
|
|
|
|
unsigned int filter_irq_stacks(unsigned long *entries, unsigned int nr_entries);
|
|
|
|
#ifdef CONFIG_STACKDEPOT
|
|
int stack_depot_init(void);
|
|
#else
|
|
static inline int stack_depot_init(void)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif /* CONFIG_STACKDEPOT */
|
|
|
|
#endif
|