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

sched/cputime: Push time to account_steal_time() in nsecs



This is one more step toward converting cputime accounting to pure nsecs.

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-23-git-send-email-fweisbec@gmail.com


Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 23244a5c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -402,7 +402,7 @@ void vtime_flush(struct task_struct *tsk)
		account_guest_time(tsk, acct->gtime);

	if (acct->steal_time)
		account_steal_time(acct->steal_time);
		account_steal_time(cputime_to_nsecs(acct->steal_time));

	if (acct->idle_time)
		account_idle_time(acct->idle_time);
+1 −1
Original line number Diff line number Diff line
@@ -188,7 +188,7 @@ static int do_account_vtime(struct task_struct *tsk)
	steal = S390_lowcore.steal_timer;
	if ((s64) steal > 0) {
		S390_lowcore.steal_timer = 0;
		account_steal_time(steal);
		account_steal_time(cputime_to_nsecs(steal));
	}

	return virt_timer_forward(user + guest + system + hardirq + softirq);
+1 −1
Original line number Diff line number Diff line
@@ -83,7 +83,7 @@ extern void account_guest_time(struct task_struct *, cputime_t);
extern void account_system_time(struct task_struct *, int, cputime_t);
extern void account_system_index_time(struct task_struct *, cputime_t,
				      enum cpu_usage_stat);
extern void account_steal_time(cputime_t);
extern void account_steal_time(u64);
extern void account_idle_time(cputime_t);

#ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
+6 −5
Original line number Diff line number Diff line
@@ -207,11 +207,11 @@ void account_system_time(struct task_struct *p, int hardirq_offset,
 * Account for involuntary wait time.
 * @cputime: the cpu time spent in involuntary wait
 */
void account_steal_time(cputime_t cputime)
void account_steal_time(u64 cputime)
{
	u64 *cpustat = kcpustat_this_cpu->cpustat;

	cpustat[CPUTIME_STEAL] += cputime_to_nsecs(cputime);
	cpustat[CPUTIME_STEAL] += cputime;
}

/*
@@ -239,14 +239,15 @@ static __always_inline cputime_t steal_account_process_time(cputime_t maxtime)
#ifdef CONFIG_PARAVIRT
	if (static_key_false(&paravirt_steal_enabled)) {
		cputime_t steal_cputime;
		u64 steal;
		u64 steal, rounded;

		steal = paravirt_steal_clock(smp_processor_id());
		steal -= this_rq()->prev_steal_time;

		steal_cputime = min(nsecs_to_cputime(steal), maxtime);
		account_steal_time(steal_cputime);
		this_rq()->prev_steal_time += cputime_to_nsecs(steal_cputime);
		rounded = cputime_to_nsecs(steal_cputime);
		account_steal_time(rounded);
		this_rq()->prev_steal_time += rounded;

		return steal_cputime;
	}