aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/sched.h1
-rw-r--r--kernel/sched.c25
2 files changed, 26 insertions, 0 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h
index fefce22e4c16..228e0a8ce248 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1342,6 +1342,7 @@ static inline void put_task_struct(struct task_struct *t)
1342#define PF_STARTING 0x00000002 /* being created */ 1342#define PF_STARTING 0x00000002 /* being created */
1343#define PF_EXITING 0x00000004 /* getting shut down */ 1343#define PF_EXITING 0x00000004 /* getting shut down */
1344#define PF_EXITPIDONE 0x00000008 /* pi exit done on shut down */ 1344#define PF_EXITPIDONE 0x00000008 /* pi exit done on shut down */
1345#define PF_VCPU 0x00000010 /* I'm a virtual CPU */
1345#define PF_FORKNOEXEC 0x00000040 /* forked but didn't exec */ 1346#define PF_FORKNOEXEC 0x00000040 /* forked but didn't exec */
1346#define PF_SUPERPRIV 0x00000100 /* used super-user privileges */ 1347#define PF_SUPERPRIV 0x00000100 /* used super-user privileges */
1347#define PF_DUMPCORE 0x00000200 /* dumped core */ 1348#define PF_DUMPCORE 0x00000200 /* dumped core */
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. */