Messages in this thread Patch in this message | | | Date | Tue, 15 Nov 2022 11:27:03 +0000 | From | Will Deacon <> | Subject | Re: [PATCH v2 4/4] ftrace: arm64: move from REGS to ARGS |
| |
On Thu, Nov 03, 2022 at 05:05:20PM +0000, Mark Rutland wrote: > This commit replaces arm64's support for FTRACE_WITH_REGS with support > for FTRACE_WITH_ARGS. This removes some overhead and complexity, and > removes some latent issues with inconsistent presentation of struct > pt_regs (which can only be reliably saved/restored at exception > boundaries).
[...]
> @@ -78,10 +77,71 @@ static inline unsigned long ftrace_call_adjust(unsigned long addr) > return addr; > } > > -#ifdef CONFIG_DYNAMIC_FTRACE_WITH_REGS > +#ifdef CONFIG_DYNAMIC_FTRACE_WITH_ARGS > struct dyn_ftrace; > struct ftrace_ops; > -struct ftrace_regs; > + > +#define arch_ftrace_get_regs(regs) NULL > + > +struct ftrace_regs { > + /* x0 - x8 */ > + unsigned long regs[9]; > + unsigned long __unused; > + > + unsigned long fp; > + unsigned long lr; > + > + unsigned long sp; > + unsigned long pc; > +}; > + > +static __always_inline unsigned long > +ftrace_regs_get_instruction_pointer(const struct ftrace_regs *fregs) > +{ > + return fregs->pc; > +} > + > +static __always_inline void > +ftrace_regs_set_instruction_pointer(struct ftrace_regs *fregs, > + unsigned long pc) > +{ > + fregs->pc = pc; > +} > + > +static __always_inline unsigned long > +ftrace_regs_get_stack_pointer(const struct ftrace_regs *fregs) > +{ > + return fregs->sp; > +} > + > +static __always_inline unsigned long > +ftrace_regs_get_argument(struct ftrace_regs *fregs, unsigned int n) > +{ > + if (n < 8) > + return fregs->regs[n];
Where does this '8' come from?
Will
| |