Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[IA64] Add CONFIG_STACKTRACE_SUPPORT

Several Linux features are dependent on stack trace support. Add
it so they can be enabled.

Signed-off-by: Tony Luck <tony.luck@intel.com>

Tony Luck 85718fae 57aebd77

+43
+3
arch/ia64/Kconfig
··· 62 62 config SWIOTLB 63 63 bool 64 64 65 + config STACKTRACE_SUPPORT 66 + def_bool y 67 + 65 68 config GENERIC_LOCKBREAK 66 69 def_bool n 67 70
+1
arch/ia64/kernel/Makefile
··· 34 34 obj-$(CONFIG_PCI_MSI) += msi_ia64.o 35 35 mca_recovery-y += mca_drv.o mca_drv_asm.o 36 36 obj-$(CONFIG_IA64_MC_ERR_INJECT)+= err_inject.o 37 + obj-$(CONFIG_STACKTRACE) += stacktrace.o 37 38 38 39 obj-$(CONFIG_PARAVIRT) += paravirt.o paravirtentry.o \ 39 40 paravirt_patch.o
+39
arch/ia64/kernel/stacktrace.c
··· 1 + /* 2 + * arch/ia64/kernel/stacktrace.c 3 + * 4 + * Stack trace management functions 5 + * 6 + */ 7 + #include <linux/sched.h> 8 + #include <linux/stacktrace.h> 9 + #include <linux/module.h> 10 + 11 + static void 12 + ia64_do_save_stack(struct unw_frame_info *info, void *arg) 13 + { 14 + struct stack_trace *trace = arg; 15 + unsigned long ip; 16 + int skip = trace->skip; 17 + 18 + trace->nr_entries = 0; 19 + do { 20 + unw_get_ip(info, &ip); 21 + if (ip == 0) 22 + break; 23 + if (skip == 0) { 24 + trace->entries[trace->nr_entries++] = ip; 25 + if (trace->nr_entries == trace->max_entries) 26 + break; 27 + } else 28 + skip--; 29 + } while (unw_unwind(info) >= 0); 30 + } 31 + 32 + /* 33 + * Save stack-backtrace addresses into a stack_trace buffer. 34 + */ 35 + void save_stack_trace(struct stack_trace *trace) 36 + { 37 + unw_init_running(ia64_do_save_stack, trace); 38 + } 39 + EXPORT_SYMBOL(save_stack_trace);