From: Li Huafei <lihuafei1@huawei.com>
To: <linux@armlinux.org.uk>, <rmk+kernel@armlinux.org.uk>,
<ardb@kernel.org>, <will@kernel.org>
Cc: <mark.rutland@arm.com>, <broonie@kernel.org>,
<peterz@infradead.org>, <mingo@redhat.com>, <acme@kernel.org>,
<alexander.shishkin@linux.intel.com>, <jolsa@kernel.org>,
<namhyung@kernel.org>, <arnd@arndb.de>,
<linus.walleij@linaro.org>, <rostedt@goodmis.org>,
<nick.hawkins@hpe.com>, <john@phrozen.org>, <mhiramat@kernel.org>,
<ast@kernel.org>, <linyujun809@huawei.com>,
<ndesaulniers@google.com>, <lihuafei1@huawei.com>,
<linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>,
<linux-perf-users@vger.kernel.org>
Subject: [PATCH 4/5] ARM: stacktrace: Make stack walk callback consistent with generic code
Date: Tue, 12 Jul 2022 10:15:26 +0800 [thread overview]
Message-ID: <20220712021527.109921-5-lihuafei1@huawei.com> (raw)
In-Reply-To: <20220712021527.109921-1-lihuafei1@huawei.com>
In order to use generic arch_stack_walk() code, make stack walk callback
consistent with it.
Signed-off-by: Li Huafei <lihuafei1@huawei.com>
---
arch/arm/include/asm/stacktrace.h | 2 +-
arch/arm/kernel/perf_callchain.c | 9 ++++-----
arch/arm/kernel/return_address.c | 8 ++++----
arch/arm/kernel/stacktrace.c | 13 ++++++-------
4 files changed, 15 insertions(+), 17 deletions(-)
diff --git a/arch/arm/include/asm/stacktrace.h b/arch/arm/include/asm/stacktrace.h
index 25282ff645fb..ce85d3ad5d05 100644
--- a/arch/arm/include/asm/stacktrace.h
+++ b/arch/arm/include/asm/stacktrace.h
@@ -44,7 +44,7 @@ void arm_get_current_stackframe(struct pt_regs *regs, struct stackframe *frame)
extern int unwind_frame(struct stackframe *frame);
extern void walk_stackframe(struct stackframe *frame,
- int (*fn)(struct stackframe *, void *), void *data);
+ bool (*fn)(void *, unsigned long), void *data);
extern void dump_mem(const char *lvl, const char *str, unsigned long bottom,
unsigned long top);
diff --git a/arch/arm/kernel/perf_callchain.c b/arch/arm/kernel/perf_callchain.c
index bc6b246ab55e..7147edbe56c6 100644
--- a/arch/arm/kernel/perf_callchain.c
+++ b/arch/arm/kernel/perf_callchain.c
@@ -81,13 +81,12 @@ perf_callchain_user(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs
* whist unwinding the stackframe and is like a subroutine return so we use
* the PC.
*/
-static int
-callchain_trace(struct stackframe *fr,
- void *data)
+static bool
+callchain_trace(void *data, unsigned long pc)
{
struct perf_callchain_entry_ctx *entry = data;
- perf_callchain_store(entry, fr->pc);
- return 0;
+ perf_callchain_store(entry, pc);
+ return true;
}
void
diff --git a/arch/arm/kernel/return_address.c b/arch/arm/kernel/return_address.c
index 38f1ea9c724d..ac15db66df4c 100644
--- a/arch/arm/kernel/return_address.c
+++ b/arch/arm/kernel/return_address.c
@@ -16,17 +16,17 @@ struct return_address_data {
void *addr;
};
-static int save_return_addr(struct stackframe *frame, void *d)
+static bool save_return_addr(void *d, unsigned long pc)
{
struct return_address_data *data = d;
if (!data->level) {
- data->addr = (void *)frame->pc;
+ data->addr = (void *)pc;
- return 1;
+ return false;
} else {
--data->level;
- return 0;
+ return true;
}
}
diff --git a/arch/arm/kernel/stacktrace.c b/arch/arm/kernel/stacktrace.c
index 836420c00938..ec0ca3192775 100644
--- a/arch/arm/kernel/stacktrace.c
+++ b/arch/arm/kernel/stacktrace.c
@@ -121,12 +121,12 @@ int notrace unwind_frame(struct stackframe *frame)
#endif
void notrace walk_stackframe(struct stackframe *frame,
- int (*fn)(struct stackframe *, void *), void *data)
+ bool (*fn)(void *, unsigned long), void *data)
{
while (1) {
int ret;
- if (fn(frame, data))
+ if (!fn(data, frame->pc))
break;
ret = unwind_frame(frame);
if (ret < 0)
@@ -142,21 +142,20 @@ struct stack_trace_data {
unsigned int skip;
};
-static int save_trace(struct stackframe *frame, void *d)
+static bool save_trace(void *d, unsigned long addr)
{
struct stack_trace_data *data = d;
struct stack_trace *trace = data->trace;
- unsigned long addr = frame->pc;
if (data->no_sched_functions && in_sched_functions(addr))
- return 0;
+ return true;
if (data->skip) {
data->skip--;
- return 0;
+ return true;
}
trace->entries[trace->nr_entries++] = addr;
- return trace->nr_entries >= trace->max_entries;
+ return trace->nr_entries < trace->max_entries;
}
/* This must be noinline to so that our skip calculation works correctly */
--
2.17.1
next prev parent reply other threads:[~2022-07-12 2:18 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-12 2:15 [PATCH 0/5] ARM: Convert to ARCH_STACKWALK Li Huafei
2022-07-12 2:15 ` [PATCH 1/5] ARM: stacktrace: Skip frame pointer boundary check for call_with_stack() Li Huafei
2022-07-18 8:57 ` Linus Walleij
2022-07-26 8:10 ` Li Huafei
2022-07-12 2:15 ` [PATCH 2/5] ARM: stacktrace: Avoid duplicate saving of exception PC value Li Huafei
2022-07-18 9:01 ` Linus Walleij
2022-07-26 9:10 ` Li Huafei
2022-07-26 10:22 ` Russell King (Oracle)
2022-07-26 12:21 ` Li Huafei
2022-07-12 2:15 ` [PATCH 3/5] ARM: stacktrace: Allow stack trace saving for non-current tasks Li Huafei
2022-07-18 9:07 ` Linus Walleij
2022-07-26 9:12 ` Li Huafei
2022-07-26 9:49 ` Russell King (Oracle)
2022-07-26 12:08 ` Li Huafei
2022-07-12 2:15 ` Li Huafei [this message]
2022-07-12 13:34 ` [PATCH 4/5] ARM: stacktrace: Make stack walk callback consistent with generic code Mark Brown
2022-07-13 11:21 ` Li Huafei
2022-07-18 9:09 ` Linus Walleij
2022-07-26 9:19 ` Li Huafei
2022-07-12 2:15 ` [PATCH 5/5] ARM: stacktrace: Convert stacktrace to generic ARCH_STACKWALK Li Huafei
2022-07-18 9:12 ` Linus Walleij
2022-07-26 9:15 ` Li Huafei
2022-07-27 6:29 ` Li Huafei
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220712021527.109921-5-lihuafei1@huawei.com \
--to=lihuafei1@huawei.com \
--cc=acme@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=ardb@kernel.org \
--cc=arnd@arndb.de \
--cc=ast@kernel.org \
--cc=broonie@kernel.org \
--cc=john@phrozen.org \
--cc=jolsa@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=linyujun809@huawei.com \
--cc=mark.rutland@arm.com \
--cc=mhiramat@kernel.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=ndesaulniers@google.com \
--cc=nick.hawkins@hpe.com \
--cc=peterz@infradead.org \
--cc=rmk+kernel@armlinux.org.uk \
--cc=rostedt@goodmis.org \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®