aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/vtime.h9
-rw-r--r--kernel/sched/cputime.c12
2 files changed, 7 insertions, 14 deletions
diff --git a/include/linux/vtime.h b/include/linux/vtime.h
index 0681fe25abeb..18b405e3cd93 100644
--- a/include/linux/vtime.h
+++ b/include/linux/vtime.h
@@ -67,19 +67,12 @@ static inline void vtime_account_system(struct task_struct *tsk) { }
67 67
68#ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN 68#ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
69extern void arch_vtime_task_switch(struct task_struct *tsk); 69extern void arch_vtime_task_switch(struct task_struct *tsk);
70extern void vtime_account_user(struct task_struct *tsk);
71extern void vtime_user_enter(struct task_struct *tsk); 70extern void vtime_user_enter(struct task_struct *tsk);
72 71extern void vtime_user_exit(struct task_struct *tsk);
73static inline void vtime_user_exit(struct task_struct *tsk)
74{
75 vtime_account_user(tsk);
76}
77
78extern void vtime_guest_enter(struct task_struct *tsk); 72extern void vtime_guest_enter(struct task_struct *tsk);
79extern void vtime_guest_exit(struct task_struct *tsk); 73extern void vtime_guest_exit(struct task_struct *tsk);
80extern void vtime_init_idle(struct task_struct *tsk, int cpu); 74extern void vtime_init_idle(struct task_struct *tsk, int cpu);
81#else /* !CONFIG_VIRT_CPU_ACCOUNTING_GEN */ 75#else /* !CONFIG_VIRT_CPU_ACCOUNTING_GEN */
82static inline void vtime_account_user(struct task_struct *tsk) { }
83static inline void vtime_user_enter(struct task_struct *tsk) { } 76static inline void vtime_user_enter(struct task_struct *tsk) { }
84static inline void vtime_user_exit(struct task_struct *tsk) { } 77static inline void vtime_user_exit(struct task_struct *tsk) { }
85static inline void vtime_guest_enter(struct task_struct *tsk) { } 78static inline void vtime_guest_enter(struct task_struct *tsk) { }
diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c
index 84a419bdf5aa..5adc896d0f64 100644
--- a/kernel/sched/cputime.c
+++ b/kernel/sched/cputime.c
@@ -724,21 +724,21 @@ void vtime_account_system(struct task_struct *tsk)
724 write_seqcount_end(&tsk->vtime_seqcount); 724 write_seqcount_end(&tsk->vtime_seqcount);
725} 725}
726 726
727void vtime_account_user(struct task_struct *tsk) 727void vtime_user_enter(struct task_struct *tsk)
728{ 728{
729 write_seqcount_begin(&tsk->vtime_seqcount); 729 write_seqcount_begin(&tsk->vtime_seqcount);
730 tsk->vtime_snap_whence = VTIME_SYS;
731 if (vtime_delta(tsk)) 730 if (vtime_delta(tsk))
732 account_user_time(tsk, get_vtime_delta(tsk)); 731 __vtime_account_system(tsk);
732 tsk->vtime_snap_whence = VTIME_USER;
733 write_seqcount_end(&tsk->vtime_seqcount); 733 write_seqcount_end(&tsk->vtime_seqcount);
734} 734}
735 735
736void vtime_user_enter(struct task_struct *tsk) 736void vtime_user_exit(struct task_struct *tsk)
737{ 737{
738 write_seqcount_begin(&tsk->vtime_seqcount); 738 write_seqcount_begin(&tsk->vtime_seqcount);
739 tsk->vtime_snap_whence = VTIME_SYS;
739 if (vtime_delta(tsk)) 740 if (vtime_delta(tsk))
740 __vtime_account_system(tsk); 741 account_user_time(tsk, get_vtime_delta(tsk));
741 tsk->vtime_snap_whence = VTIME_USER;
742 write_seqcount_end(&tsk->vtime_seqcount); 742 write_seqcount_end(&tsk->vtime_seqcount);
743} 743}
744 744