aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index 9887ca005c50..5a91fe0b5de6 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -3303,6 +3303,25 @@ void account_user_time(struct task_struct *p, cputime_t cputime)
3303} 3303}
3304 3304
3305/* 3305/*
3306 * Account guest cpu time to a process.
3307 * @p: the process that the cpu time gets accounted to
3308 * @cputime: the cpu time spent in virtual machine since the last update
3309 */
3310void account_guest_time(struct task_struct *p, cputime_t cputime)
3311{
3312 cputime64_t tmp;
3313 struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat;
3314
3315 tmp = cputime_to_cputime64(cputime);
3316
3317 p->utime = cputime_add(p->utime, cputime);
3318 p->gtime = cputime_add(p->gtime, cputime);
3319
3320 cpustat->user = cputime64_add(cpustat->user, tmp);
3321 cpustat->guest = cputime64_add(cpustat->guest, tmp);
3322}
3323
3324/*
3306 * Account system cpu time to a process. 3325 * Account system cpu time to a process.
3307 * @p: the process that the cpu time gets accounted to 3326 * @p: the process that the cpu time gets accounted to
3308 * @hardirq_offset: the offset to subtract from hardirq_count() 3327 * @hardirq_offset: the offset to subtract from hardirq_count()
@@ -3315,6 +3334,12 @@ void account_system_time(struct task_struct *p, int hardirq_offset,
3315 struct rq *rq = this_rq(); 3334 struct rq *rq = this_rq();
3316 cputime64_t tmp; 3335 cputime64_t tmp;
3317 3336
3337 if (p->flags & PF_VCPU) {
3338 account_guest_time(p, cputime);
3339 p->flags &= ~PF_VCPU;
3340 return;
3341 }
3342
3318 p->stime = cputime_add(p->stime, cputime); 3343 p->stime = cputime_add(p->stime, cputime);
3319 3344
3320 /* Add system time to cpustat. */ 3345 /* Add system time to cpustat. */