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: Mark Rutland <mark.rutland@arm.com>
Reviewed-by: Kalesh Singh <kaleshsingh@google.com>
Reviewed-by: Madhavan T. Venkataraman <madvenka@linux.microsoft.com>
Reviewed-by: Mark 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: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
Mark Rutland 2022-09-01 14:06:42 +01:00 committed by Catalin Marinas
parent 75758d5114
commit 36f9a8793c
1 changed files with 21 additions and 8 deletions

View File

@ -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)
struct stack_info tmp = {
.low = low,
.high = high,
.type = type,
};
if (!stackinfo_on_stack(&tmp, sp, size))
return false;
if (sp < low || sp + size < sp || sp + size > high)
return false;
if (info)
*info = tmp;
if (info) {
info->low = low;
info->high = high;
info->type = type;
}
return true;
}