Commit 36f9a879 authored by Mark Rutland's avatar Mark Rutland Committed by Catalin Marinas
Browse files

arm64: stacktrace: add stackinfo_on_stack() helper



Factor the core predicate out of on_stack() into a helper which can be
used on a pre-populated stack_info.

There should be no functional change as a result of this patch.

Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
Reviewed-by: default avatarKalesh Singh <kaleshsingh@google.com>
Reviewed-by: default avatarMadhavan T. Venkataraman <madvenka@linux.microsoft.com>
Reviewed-by: default avatarMark Brown <broonie@kernel.org>
Cc: Fuad Tabba <tabba@google.com>
Cc: Marc Zyngier <maz@kernel.org>
Cc: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20220901130646.1316937-6-mark.rutland@arm.com


Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent 75758d51
Loading
Loading
Loading
Loading
+21 −8
Original line number Diff line number Diff line
@@ -65,21 +65,34 @@ struct unwind_state {
	struct task_struct *task;
};

static inline bool stackinfo_on_stack(const struct stack_info *info,
				      unsigned long sp, unsigned long size)
{
	if (!info->low)
		return false;

	if (sp < info->low || sp + size < sp || sp + size > info->high)
		return false;

	return true;
}

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)
{
	if (!low)
		return false;
	struct stack_info tmp = {
		.low = low,
		.high = high,
		.type = type,
	};

	if (sp < low || sp + size < sp || sp + size > high)
	if (!stackinfo_on_stack(&tmp, sp, size))
		return false;

	if (info) {
		info->low = low;
		info->high = high;
		info->type = type;
	}
	if (info)
		*info = tmp;

	return true;
}