diff options
Diffstat (limited to 'arch/arm64/kernel/stacktrace.c')
| -rw-r--r-- | arch/arm64/kernel/stacktrace.c | 12 | 
1 files changed, 12 insertions, 0 deletions
| diff --git a/arch/arm64/kernel/stacktrace.c b/arch/arm64/kernel/stacktrace.c index 117e2c180f3c..83154303e682 100644 --- a/arch/arm64/kernel/stacktrace.c +++ b/arch/arm64/kernel/stacktrace.c @@ -5,6 +5,7 @@   * Copyright (C) 2012 ARM Ltd.   */  #include <linux/kernel.h> +#include <linux/efi.h>  #include <linux/export.h>  #include <linux/ftrace.h>  #include <linux/sched.h> @@ -12,6 +13,7 @@  #include <linux/sched/task_stack.h>  #include <linux/stacktrace.h> +#include <asm/efi.h>  #include <asm/irq.h>  #include <asm/stack_pointer.h>  #include <asm/stacktrace.h> @@ -186,6 +188,13 @@ void show_stack(struct task_struct *tsk, unsigned long *sp, const char *loglvl)  			: stackinfo_get_unknown();		\  	}) +#define STACKINFO_EFI						\ +	({							\ +		((task == current) && current_in_efi())		\ +			? stackinfo_get_efi()			\ +			: stackinfo_get_unknown();		\ +	}) +  noinline noinstr void arch_stack_walk(stack_trace_consume_fn consume_entry,  			      void *cookie, struct task_struct *task,  			      struct pt_regs *regs) @@ -200,6 +209,9 @@ noinline noinstr void arch_stack_walk(stack_trace_consume_fn consume_entry,  		STACKINFO_SDEI(normal),  		STACKINFO_SDEI(critical),  #endif +#ifdef CONFIG_EFI +		STACKINFO_EFI, +#endif  	};  	struct unwind_state state = {  		.stacks = stacks, |