[PATCH v4 5/9] arm64: stacktrace: add stackinfo_on_stack() helper

Mark Rutland mark.rutland at arm.com
Thu Sep 1 06:06:42 PDT 2022


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 at arm.com>
Reviewed-by: Kalesh Singh <kaleshsingh at google.com>
Reviewed-by: Madhavan T. Venkataraman <madvenka at linux.microsoft.com>
Reviewed-by: Mark Brown <broonie at kernel.org>
Cc: Catalin Marinas <catalin.marinas at arm.com>
Cc: Fuad Tabba <tabba at google.com>
Cc: Marc Zyngier <maz at kernel.org>
Cc: Will Deacon <will at kernel.org>
---
 arch/arm64/include/asm/stacktrace/common.h | 29 ++++++++++++++++------
 1 file changed, 21 insertions(+), 8 deletions(-)

diff --git a/arch/arm64/include/asm/stacktrace/common.h b/arch/arm64/include/asm/stacktrace/common.h
index a74fa301fe953..81c21378b1ac9 100644
--- a/arch/arm64/include/asm/stacktrace/common.h
+++ b/arch/arm64/include/asm/stacktrace/common.h
@@ -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;
 }
 
-- 
2.30.2




More information about the linux-arm-kernel mailing list