Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5613fda9 authored by Frederic Weisbecker's avatar Frederic Weisbecker Committed by Ingo Molnar
Browse files

sched/cputime: Convert task/group cputime to nsecs



Now that most cputime readers use the transition API which return the
task cputime in old style cputime_t, we can safely store the cputime in
nsecs. This will eventually make cputime statistics less opaque and more
granular. Back and forth convertions between cputime_t and nsecs in order
to deal with cputime_t random granularity won't be needed anymore.

Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: Stanislaw Gruszka <sgruszka@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Wanpeng Li <wanpeng.li@hotmail.com>
Link: http://lkml.kernel.org/r/1485832191-26889-8-git-send-email-fweisbec@gmail.com


Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent a1cecf2b
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1163,8 +1163,8 @@ SYSCALL_DEFINE2(osf_getrusage, int, who, struct rusage32 __user *, ru)
		r.ru_majflt = current->maj_flt;
		break;
	case RUSAGE_CHILDREN:
		utime_jiffies = cputime_to_jiffies(current->signal->cutime);
		stime_jiffies = cputime_to_jiffies(current->signal->cstime);
		utime_jiffies = nsecs_to_jiffies(current->signal->cutime);
		stime_jiffies = nsecs_to_jiffies(current->signal->cstime);
		jiffies_to_timeval32(utime_jiffies, &r.ru_utime);
		jiffies_to_timeval32(stime_jiffies, &r.ru_stime);
		r.ru_minflt = current->signal->cmin_flt;
+2 −2
Original line number Diff line number Diff line
@@ -396,7 +396,7 @@ void vtime_flush(struct task_struct *tsk)
		account_user_time(tsk, acct->utime);

	if (acct->utime_scaled)
		tsk->utimescaled += acct->utime_scaled;
		tsk->utimescaled += cputime_to_nsecs(acct->utime_scaled);

	if (acct->gtime)
		account_guest_time(tsk, acct->gtime);
@@ -411,7 +411,7 @@ void vtime_flush(struct task_struct *tsk)
		account_system_index_time(tsk, acct->stime, CPUTIME_SYSTEM);

	if (acct->stime_scaled)
		tsk->stimescaled += acct->stime_scaled;
		tsk->stimescaled += cputime_to_nsecs(acct->stime_scaled);

	if (acct->hardirq_time)
		account_system_index_time(tsk, acct->hardirq_time, CPUTIME_IRQ);
+3 −3
Original line number Diff line number Diff line
@@ -114,7 +114,7 @@ static void account_system_index_scaled(struct task_struct *p,
					cputime_t cputime, cputime_t scaled,
					enum cpu_usage_stat index)
{
	p->stimescaled += scaled;
	p->stimescaled += cputime_to_nsecs(scaled);
	account_system_index_time(p, cputime, index);
}

@@ -167,12 +167,12 @@ static int do_account_vtime(struct task_struct *tsk)
	/* Push account value */
	if (user) {
		account_user_time(tsk, user);
		tsk->utimescaled += scale_vtime(user);
		tsk->utimescaled += cputime_to_nsecs(scale_vtime(user));
	}

	if (guest) {
		account_guest_time(tsk, guest);
		tsk->utimescaled += scale_vtime(guest);
		tsk->utimescaled += cputime_to_nsecs(scale_vtime(guest));
	}

	if (system)
+3 −2
Original line number Diff line number Diff line
@@ -964,10 +964,11 @@ static int kvm_hv_set_msr_pw(struct kvm_vcpu *vcpu, u32 msr, u64 data,
/* Calculate cpu time spent by current task in 100ns units */
static u64 current_task_runtime_100ns(void)
{
	cputime_t utime, stime;
	u64 utime, stime;

	task_cputime_adjusted(current, &utime, &stime);
	return div_u64(cputime_to_nsecs(utime + stime), 100);

	return div_u64(utime + stime, 100);
}

static int kvm_hv_set_msr(struct kvm_vcpu *vcpu, u32 msr, u64 data, bool host)
+9 −2
Original line number Diff line number Diff line
@@ -1411,6 +1411,8 @@ static void fill_note(struct memelfnote *note, const char *name, int type,
static void fill_prstatus(struct elf_prstatus *prstatus,
		struct task_struct *p, long signr)
{
	struct timeval tv;

	prstatus->pr_info.si_signo = prstatus->pr_cursig = signr;
	prstatus->pr_sigpend = p->pending.signal.sig[0];
	prstatus->pr_sighold = p->blocked.sig[0];
@@ -1437,8 +1439,13 @@ static void fill_prstatus(struct elf_prstatus *prstatus,
		cputime_to_timeval(utime, &prstatus->pr_utime);
		cputime_to_timeval(stime, &prstatus->pr_stime);
	}
	cputime_to_timeval(p->signal->cutime, &prstatus->pr_cutime);
	cputime_to_timeval(p->signal->cstime, &prstatus->pr_cstime);
	tv = ns_to_timeval(p->signal->cutime);
	prstatus->pr_cutime.tv_sec = tv.tv_sec;
	prstatus->pr_cutime.tv_usec = tv.tv_usec;

	tv = ns_to_timeval(p->signal->cstime);
	prstatus->pr_cstime.tv_sec = tv.tv_sec;
	prstatus->pr_cstime.tv_usec = tv.tv_usec;
}

static int fill_psinfo(struct elf_prpsinfo *psinfo, struct task_struct *p,
Loading