mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-11 08:18:47 +00:00
3d13e839e8
current_stack_pointer(), which was called __get_SP(), used to just return the value in r1. But that caused problems in some cases, so it was turned into a function in commit bfe9a2cfe91a ("powerpc: Reimplement __get_SP() as a function not a define"). Because it's a function in a separate compilation unit to all its callers, it has the effect of causing a stack frame to be created, and then returns the address of that frame. This is good in some cases like those described in the above commit, but in other cases it's overkill, we just need to know what stack page we're on. On some other arches current_stack_pointer is just a register global giving the stack pointer, and we'd like to do that too. So rename our current_stack_pointer() to current_stack_frame() to make that possible. Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Reviewed-by: Christophe Leroy <christophe.leroy@c-s.fr> Link: https://lore.kernel.org/r/20200220115141.2707-1-mpe@ellerman.id.au
42 lines
1.2 KiB
C
42 lines
1.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* Performance event support - hardware-specific disambiguation
|
|
*
|
|
* For now this is a compile-time decision, but eventually it should be
|
|
* runtime. This would allow multiplatform perf event support for e300 (fsl
|
|
* embedded perf counters) plus server/classic, and would accommodate
|
|
* devices other than the core which provide their own performance counters.
|
|
*
|
|
* Copyright 2010 Freescale Semiconductor, Inc.
|
|
*/
|
|
|
|
#ifdef CONFIG_PPC_PERF_CTRS
|
|
#include <asm/perf_event_server.h>
|
|
#endif
|
|
|
|
#ifdef CONFIG_FSL_EMB_PERF_EVENT
|
|
#include <asm/perf_event_fsl_emb.h>
|
|
#endif
|
|
|
|
#ifdef CONFIG_PERF_EVENTS
|
|
#include <asm/ptrace.h>
|
|
#include <asm/reg.h>
|
|
|
|
#define perf_arch_bpf_user_pt_regs(regs) ®s->user_regs
|
|
|
|
/*
|
|
* Overload regs->result to specify whether we should use the MSR (result
|
|
* is zero) or the SIAR (result is non zero).
|
|
*/
|
|
#define perf_arch_fetch_caller_regs(regs, __ip) \
|
|
do { \
|
|
(regs)->result = 0; \
|
|
(regs)->nip = __ip; \
|
|
(regs)->gpr[1] = current_stack_frame(); \
|
|
asm volatile("mfmsr %0" : "=r" ((regs)->msr)); \
|
|
} while (0)
|
|
|
|
/* To support perf_regs sier update */
|
|
extern bool is_sier_available(void);
|
|
#endif
|