From: Rik van Riel <r...@redhat.com>

Only run vtime_user_enter, vtime_user_exit, and the user enter & exit
trace points when we are entering or exiting user state, respectively.

The KVM code in guest_enter and guest_exit already take care of calling
vtime_guest_enter and vtime_guest_exit, respectively.

The RCU code only distinguishes between "idle" and "not idle or kernel".
There should be no need to add an additional (unused) state there.

Reviewed-by: Paul E. McKenney <paul...@linux.vnet.ibm.com>
Signed-off-by: Rik van Riel <r...@redhat.com>
Cc: Paul E. McKenney <paul...@linux.vnet.ibm.com>
Cc: Andy Lutomirski <l...@amacapital.net>
Cc: Will deacon <will.dea...@arm.com>
Cc: Marcelo Tosatti <mtosa...@redhat.com>
Cc: Christian Borntraeger <borntrae...@de.ibm.com>
Cc: Luiz Capitulino <lcapitul...@redhat.com>
Cc: Paolo Bonzini <pbonz...@redhat.com>
Signed-off-by: Frederic Weisbecker <fweis...@gmail.com>
---
 kernel/context_tracking.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/kernel/context_tracking.c b/kernel/context_tracking.c
index 17715d8..a2c0866 100644
--- a/kernel/context_tracking.c
+++ b/kernel/context_tracking.c
@@ -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);
        }
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to