Messages in this thread | | | Subject | Re: [PATCH] kernel: context_tracking: use extern function instead of static inline function for user_enter/exit() | From | Steven Rostedt <> | Date | Wed, 23 Oct 2013 06:47:24 -0400 |
| |
On Wed, 2013-10-23 at 18:38 +0800, Chen Gang wrote:
> > Signed-off-by: Chen Gang <gang.chen@asianux.com> > --- > include/linux/context_tracking.h | 14 ++------------ > kernel/context_tracking.c | 12 ++++++++++++ > 2 files changed, 14 insertions(+), 12 deletions(-) > > diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h > index 1581587..bf220f7 100644 > --- a/include/linux/context_tracking.h > +++ b/include/linux/context_tracking.h > @@ -10,23 +10,13 @@ > #ifdef CONFIG_CONTEXT_TRACKING > extern void context_tracking_cpu_set(int cpu); > > +extern void user_enter(void); > +extern void user_exit(void); > extern void context_tracking_user_enter(void); > extern void context_tracking_user_exit(void); > extern void __context_tracking_task_switch(struct task_struct *prev, > struct task_struct *next); > > -static inline void user_enter(void) > -{ > - if (static_key_false(&context_tracking_enabled)) > - context_tracking_user_enter(); > - > -} > -static inline void user_exit(void) > -{ > - if (static_key_false(&context_tracking_enabled)) > - context_tracking_user_exit(); > -} > - > static inline enum ctx_state exception_enter(void) > { > enum ctx_state prev_ctx; > diff --git a/kernel/context_tracking.c b/kernel/context_tracking.c > index 013161f..c03d0d6 100644 > --- a/kernel/context_tracking.c > +++ b/kernel/context_tracking.c > @@ -29,6 +29,18 @@ EXPORT_SYMBOL_GPL(context_tracking_enabled); > DEFINE_PER_CPU(struct context_tracking, context_tracking); > EXPORT_SYMBOL_GPL(context_tracking); > > +void user_enter(void) > +{ > + if (static_key_false(&context_tracking_enabled)) > + context_tracking_user_enter(); > +} > + > +void user_exit(void) > +{ > + if (static_key_false(&context_tracking_enabled)) > + context_tracking_user_exit(); > +} > + > void context_tracking_cpu_set(int cpu) > { > if (!per_cpu(context_tracking.active, cpu)) {
Ug, you just put an unneeded function call into a fast path because of a failure with a particular arch.
If you need the assembly to call this code, then make yourself a wrapper function to call that does the user_enter/exit() calls.
void arch_user_enter(void) { user_enter(); }
-- Steve
| |