Commit 15a59f19 authored by Kalesh Singh's avatar Kalesh Singh Committed by Marc Zyngier
Browse files

arm64: stacktrace: Factor out on_accessible_stack_common()



Move common on_accessible_stack checks to stacktrace/common.h. This is
used in the implementation of the nVHE hypervisor unwinder later in
this series.

Signed-off-by: default avatarKalesh Singh <kaleshsingh@google.com>
Reviewed-by: default avatarFuad Tabba <tabba@google.com>
Reviewed-by: default avatarMark Brown <broonie@kernel.org>
Tested-by: default avatarFuad Tabba <tabba@google.com>
Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20220726073750.3219117-3-kaleshsingh@google.com
parent 6bf212c8
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -65,8 +65,8 @@ static inline bool on_accessible_stack(const struct task_struct *tsk,
				       unsigned long sp, unsigned long size,
				       struct stack_info *info)
{
	if (info)
		info->type = STACK_TYPE_UNKNOWN;
	if (on_accessible_stack_common(tsk, sp, size, info))
		return true;

	if (on_task_stack(tsk, sp, size, info))
		return true;
@@ -74,8 +74,6 @@ static inline bool on_accessible_stack(const struct task_struct *tsk,
		return false;
	if (on_irq_stack(sp, size, info))
		return true;
	if (on_overflow_stack(sp, size, info))
		return true;
	if (on_sdei_stack(sp, size, info))
		return true;

+18 −0
Original line number Diff line number Diff line
@@ -62,6 +62,9 @@ struct unwind_state {
	struct task_struct *task;
};

static inline bool on_overflow_stack(unsigned long sp, unsigned long size,
				     struct stack_info *info);

static inline bool on_stack(unsigned long sp, unsigned long size,
			    unsigned long low, unsigned long high,
			    enum stack_type type, struct stack_info *info)
@@ -80,6 +83,21 @@ static inline bool on_stack(unsigned long sp, unsigned long size,
	return true;
}

static inline bool on_accessible_stack_common(const struct task_struct *tsk,
					      unsigned long sp,
					      unsigned long size,
					      struct stack_info *info)
{
	if (info)
		info->type = STACK_TYPE_UNKNOWN;

	/*
	 * Both the kernel and nvhe hypervisor make use of
	 * an overflow_stack
	 */
	return on_overflow_stack(sp, size, info);
}

static inline void unwind_init_common(struct unwind_state *state,
				      struct task_struct *task)
{