dax: use pfn_mkwrite to update c/mtime + freeze protection
[firefly-linux-kernel-4.4.55.git] / include / linux / context_tracking.h
index 37b81bd51ec0e48ce7ec9c24608aeca3ca92ad36..2821838256b4f728640819f9f81842954261ec03 100644 (file)
@@ -10,6 +10,8 @@
 #ifdef CONFIG_CONTEXT_TRACKING
 extern void context_tracking_cpu_set(int cpu);
 
+extern void context_tracking_enter(enum ctx_state state);
+extern void context_tracking_exit(enum ctx_state state);
 extern void context_tracking_user_enter(void);
 extern void context_tracking_user_exit(void);
 extern void __context_tracking_task_switch(struct task_struct *prev,
@@ -35,7 +37,8 @@ static inline enum ctx_state exception_enter(void)
                return 0;
 
        prev_ctx = this_cpu_read(context_tracking.state);
-       context_tracking_user_exit();
+       if (prev_ctx != CONTEXT_KERNEL)
+               context_tracking_exit(prev_ctx);
 
        return prev_ctx;
 }
@@ -43,8 +46,8 @@ static inline enum ctx_state exception_enter(void)
 static inline void exception_exit(enum ctx_state prev_ctx)
 {
        if (context_tracking_is_enabled()) {
-               if (prev_ctx == IN_USER)
-                       context_tracking_user_enter();
+               if (prev_ctx != CONTEXT_KERNEL)
+                       context_tracking_enter(prev_ctx);
        }
 }
 
@@ -78,10 +81,16 @@ static inline void guest_enter(void)
                vtime_guest_enter(current);
        else
                current->flags |= PF_VCPU;
+
+       if (context_tracking_is_enabled())
+               context_tracking_enter(CONTEXT_GUEST);
 }
 
 static inline void guest_exit(void)
 {
+       if (context_tracking_is_enabled())
+               context_tracking_exit(CONTEXT_GUEST);
+
        if (vtime_accounting_enabled())
                vtime_guest_exit(current);
        else