|
@@ -77,7 +77,6 @@ void context_tracking_enter(enum ctx_state state)
|
|
|
local_irq_save(flags);
|
|
|
if ( __this_cpu_read(context_tracking.state) != state) {
|
|
|
if (__this_cpu_read(context_tracking.active)) {
|
|
|
- trace_user_enter(0);
|
|
|
/*
|
|
|
* At this stage, only low level arch entry code remains and
|
|
|
* then we'll run in userspace. We can assume there won't be
|
|
@@ -85,7 +84,10 @@ void context_tracking_enter(enum ctx_state state)
|
|
|
* user_exit() or rcu_irq_enter(). Let's remove RCU's dependency
|
|
|
* on the tick.
|
|
|
*/
|
|
|
- vtime_user_enter(current);
|
|
|
+ if (state == CONTEXT_USER) {
|
|
|
+ trace_user_enter(0);
|
|
|
+ vtime_user_enter(current);
|
|
|
+ }
|
|
|
rcu_user_enter();
|
|
|
}
|
|
|
/*
|
|
@@ -143,8 +145,10 @@ void context_tracking_exit(enum ctx_state state)
|
|
|
* RCU core about that (ie: we may need the tick again).
|
|
|
*/
|
|
|
rcu_user_exit();
|
|
|
- vtime_user_exit(current);
|
|
|
- trace_user_exit(0);
|
|
|
+ if (state == CONTEXT_USER) {
|
|
|
+ vtime_user_exit(current);
|
|
|
+ trace_user_exit(0);
|
|
|
+ }
|
|
|
}
|
|
|
__this_cpu_write(context_tracking.state, CONTEXT_KERNEL);
|
|
|
}
|