From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751872AbdBAKET (ORCPT ); Wed, 1 Feb 2017 05:04:19 -0500 Received: from terminus.zytor.com ([65.50.211.136]:55412 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751380AbdBAKEQ (ORCPT ); Wed, 1 Feb 2017 05:04:16 -0500 Date: Wed, 1 Feb 2017 02:03:17 -0800 From: tip-bot for Frederic Weisbecker Message-ID: Cc: benh@kernel.crashing.org, tglx@linutronix.de, fenghua.yu@intel.com, linux-kernel@vger.kernel.org, mpe@ellerman.id.au, riel@redhat.com, schwidefsky@de.ibm.com, heiko.carstens@de.ibm.com, wanpeng.li@hotmail.com, paulus@samba.org, peterz@infradead.org, tony.luck@intel.com, fweisbec@gmail.com, torvalds@linux-foundation.org, hpa@zytor.com, mingo@kernel.org, sgruszka@redhat.com Reply-To: mingo@kernel.org, sgruszka@redhat.com, hpa@zytor.com, torvalds@linux-foundation.org, fweisbec@gmail.com, paulus@samba.org, tony.luck@intel.com, peterz@infradead.org, heiko.carstens@de.ibm.com, wanpeng.li@hotmail.com, schwidefsky@de.ibm.com, mpe@ellerman.id.au, riel@redhat.com, linux-kernel@vger.kernel.org, fenghua.yu@intel.com, tglx@linutronix.de, benh@kernel.crashing.org In-Reply-To: <1485832191-26889-27-git-send-email-fweisbec@gmail.com> References: <1485832191-26889-27-git-send-email-fweisbec@gmail.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:sched/core] sched/cputime, vtime: Return nsecs instead of cputime_t to account Git-Commit-ID: bfce1d6006f383fbb55a89580af37819a77195b7 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: bfce1d6006f383fbb55a89580af37819a77195b7 Gitweb: http://git.kernel.org/tip/bfce1d6006f383fbb55a89580af37819a77195b7 Author: Frederic Weisbecker AuthorDate: Tue, 31 Jan 2017 04:09:42 +0100 Committer: Ingo Molnar CommitDate: Wed, 1 Feb 2017 09:13:59 +0100 sched/cputime, vtime: Return nsecs instead of cputime_t to account Turn the full dynticks cputime clock source to return nsec while keeping its very internals jiffies based for performance reasons. Signed-off-by: Frederic Weisbecker Cc: Benjamin Herrenschmidt Cc: Fenghua Yu Cc: Heiko Carstens Cc: Linus Torvalds Cc: Martin Schwidefsky Cc: Michael Ellerman Cc: Paul Mackerras Cc: Peter Zijlstra Cc: Rik van Riel Cc: Stanislaw Gruszka Cc: Thomas Gleixner Cc: Tony Luck Cc: Wanpeng Li Link: http://lkml.kernel.org/r/1485832191-26889-27-git-send-email-fweisbec@gmail.com Signed-off-by: Ingo Molnar --- kernel/sched/cputime.c | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c index f3a56bf..2ecec3a 100644 --- a/kernel/sched/cputime.c +++ b/kernel/sched/cputime.c @@ -678,20 +678,20 @@ void thread_group_cputime_adjusted(struct task_struct *p, u64 *ut, u64 *st) #endif /* !CONFIG_VIRT_CPU_ACCOUNTING_NATIVE */ #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN -static cputime_t vtime_delta(struct task_struct *tsk) +static u64 vtime_delta(struct task_struct *tsk) { unsigned long now = READ_ONCE(jiffies); if (time_before(now, (unsigned long)tsk->vtime_snap)) return 0; - return jiffies_to_cputime(now - tsk->vtime_snap); + return jiffies_to_nsecs(now - tsk->vtime_snap); } -static cputime_t get_vtime_delta(struct task_struct *tsk) +static u64 get_vtime_delta(struct task_struct *tsk) { unsigned long now = READ_ONCE(jiffies); - cputime_t delta, other; + u64 delta, other; /* * Unlike tick based timing, vtime based timing never has lost @@ -700,7 +700,7 @@ static cputime_t get_vtime_delta(struct task_struct *tsk) * elapsed time. Limit account_other_time to prevent rounding * errors from causing elapsed vtime to go negative. */ - delta = jiffies_to_cputime(now - tsk->vtime_snap); + delta = jiffies_to_nsecs(now - tsk->vtime_snap); other = account_other_time(delta); WARN_ON_ONCE(tsk->vtime_snap_whence == VTIME_INACTIVE); tsk->vtime_snap = now; @@ -710,9 +710,7 @@ static cputime_t get_vtime_delta(struct task_struct *tsk) static void __vtime_account_system(struct task_struct *tsk) { - cputime_t delta_cpu = get_vtime_delta(tsk); - - account_system_time(tsk, irq_count(), cputime_to_nsecs(delta_cpu)); + account_system_time(tsk, irq_count(), get_vtime_delta(tsk)); } void vtime_account_system(struct task_struct *tsk) @@ -727,15 +725,10 @@ void vtime_account_system(struct task_struct *tsk) void vtime_account_user(struct task_struct *tsk) { - cputime_t delta_cpu; - write_seqcount_begin(&tsk->vtime_seqcount); tsk->vtime_snap_whence = VTIME_SYS; - if (vtime_delta(tsk)) { - u64 nsecs; - delta_cpu = get_vtime_delta(tsk); - account_user_time(tsk, cputime_to_nsecs(delta_cpu)); - } + if (vtime_delta(tsk)) + account_user_time(tsk, get_vtime_delta(tsk)); write_seqcount_end(&tsk->vtime_seqcount); } @@ -776,9 +769,7 @@ EXPORT_SYMBOL_GPL(vtime_guest_exit); void vtime_account_idle(struct task_struct *tsk) { - cputime_t delta_cpu = get_vtime_delta(tsk); - - account_idle_time(cputime_to_nsecs(delta_cpu)); + account_idle_time(get_vtime_delta(tsk)); } void arch_vtime_task_switch(struct task_struct *prev) @@ -818,7 +809,7 @@ u64 task_gtime(struct task_struct *t) gtime = t->gtime; if (t->vtime_snap_whence == VTIME_SYS && t->flags & PF_VCPU) - gtime += cputime_to_nsecs(vtime_delta(t)); + gtime += vtime_delta(t); } while (read_seqcount_retry(&t->vtime_seqcount, seq)); @@ -851,7 +842,7 @@ void task_cputime(struct task_struct *t, u64 *utime, u64 *stime) if (t->vtime_snap_whence == VTIME_INACTIVE || is_idle_task(t)) continue; - delta = cputime_to_nsecs(vtime_delta(t)); + delta = vtime_delta(t); /* * Task runs either in user or kernel space, add pending nohz time to