Messages in this thread | | | Date | Fri, 24 May 2019 13:11:44 +0200 | From | Peter Zijlstra <> | Subject | Re: [RFC][PATCH 01/14 v2] function_graph: Convert ret_stack to a series of longs |
| |
On Mon, May 20, 2019 at 10:20:02AM -0400, Steven Rostedt wrote:
> +#define FGRAPH_RET_SIZE (sizeof(struct ftrace_ret_stack)) > +#define FGRAPH_RET_INDEX (ALIGN(FGRAPH_RET_SIZE, sizeof(long)) / sizeof(long))
I think you want to write that like:
BUILD_BUG_ON(sizeof(ftrace_ret_stack) % sizeof(long));
It'd be very weird for that sizeof not to be right.
> +#define SHADOW_STACK_SIZE (PAGE_SIZE)
Do we really need that big a shadow stack?
> +#define SHADOW_STACK_INDEX \ > + (ALIGN(SHADOW_STACK_SIZE, sizeof(long)) / sizeof(long)) > +/* Leave on a buffer at the end */ > +#define SHADOW_STACK_MAX_INDEX (SHADOW_STACK_INDEX - FGRAPH_RET_INDEX) > + > +#define RET_STACK(t, index) ((struct ftrace_ret_stack *)(&(t)->ret_stack[index])) > +#define RET_STACK_INC(c) ({ c += FGRAPH_RET_INDEX; }) > +#define RET_STACK_DEC(c) ({ c -= FGRAPH_RET_INDEX; })
I'm thinking something like:
#define RET_PUSH(s, val) \ do { \ (s) -= sizeof(val); \ (typeof(val) *)(s) = val; \ } while (0)
#define RET_POP(s, type) \ ({ \ type *__ptr = (void *)(s); \ (s) += sizeof(type); \ *__ptr; \ })
Would me clearer?
| |