From: Kevin Hilman <khilman@linaro.org>
To: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Li Zhong <zhong@linux.vnet.ibm.com>,
Namhyung Kim <namhyung.kim@lge.com>,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Paul Gortmaker <paul.gortmaker@windriver.com>,
Peter Zijlstra <peterz@infradead.org>,
Steven Rostedt <rostedt@goodmis.org>,
Thomas Gleixner <tglx@linutronix.de>,
Tony Luck <tony.luck@intel.com>,
Fenghua Yu <fenghua.yu@intel.com>,
Nicolas Pitre <nicolas.pitre@linaro.org>
Subject: Re: [PATCH 2/8] cputime: Librarize per nsecs resolution cputime definitions
Date: Thu, 14 Feb 2013 11:49:28 -0800 [thread overview]
Message-ID: <87ehgid6bb.fsf@linaro.org> (raw)
In-Reply-To: <1359399845-10568-3-git-send-email-fweisbec@gmail.com> (Frederic Weisbecker's message of "Mon, 28 Jan 2013 20:03:59 +0100")
Frederic Weisbecker <fweisbec@gmail.com> writes:
> The full dynticks cputime accounting that we'll soon introduce
> will rely on sched_clock(). And its clock can have a per
> nanosecond granularity.
>
> To prepare for this, we need to have a cputime_t implementation
> that has this precision.
>
> ia64 virtual cputime accounting already uses that granularity
> so all we need is to librarize its implementation in the asm
> generic headers.
...except that for it to be truly generic (i.e. usable on 32-bit arches),
it should be using do_div() for 64-bit divides.
I understand this series is targetted at 64-bit platforms currently, but
I'm looking (again) at getting adaptive NOHZ working on ARM, and this
was the first obvious obstacle to even compiling.
I see this is already merged into tip/sched/core, so below is a patch on
top of that to convert to using do_div(). If you're OK with the
approach, I'll post it formally to LKML.
Thanks,
Kevin
>From b1572b5ae67d4221277484e59d571b639775af70 Mon Sep 17 00:00:00 2001
From: Kevin Hilman <khilman@linaro.org>
Date: Thu, 14 Feb 2013 11:27:36 -0800
Subject: [PATCH] cputime: use do_div() for nsec resolution conversion helpers
For the nsec resolution conversions to be useful on non 64-bit
architectures, do_div() needs to be used for the 64-bit divisions.
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: Kevin Hilman <khilman@linaro.org>
---
include/asm-generic/cputime_nsecs.h | 51 +++++++++++++++++++++++++++----------
1 file changed, 37 insertions(+), 14 deletions(-)
diff --git a/include/asm-generic/cputime_nsecs.h b/include/asm-generic/cputime_nsecs.h
index b6485ca..daa6075 100644
--- a/include/asm-generic/cputime_nsecs.h
+++ b/include/asm-generic/cputime_nsecs.h
@@ -24,13 +24,17 @@ typedef u64 __nocast cputime64_t;
/*
* Convert cputime <-> jiffies (HZ)
*/
-#define cputime_to_jiffies(__ct) \
- ((__force u64)(__ct) / (NSEC_PER_SEC / HZ))
+static inline u64 cputime_to_jiffies(const cputime_t ct)
+{
+ cputime_t __ct = ct;
+
+ do_div(__ct, NSEC_PER_SEC / HZ);
+ return __ct;
+}
#define cputime_to_scaled(__ct) (__ct)
#define jiffies_to_cputime(__jif) \
(__force cputime_t)((__jif) * (NSEC_PER_SEC / HZ))
-#define cputime64_to_jiffies64(__ct) \
- ((__force u64)(__ct) / (NSEC_PER_SEC / HZ))
+#define cputime64_to_jiffies64(__ct) cputime_to_jiffies(__ct)
#define jiffies64_to_cputime64(__jif) \
(__force cputime64_t)((__jif) * (NSEC_PER_SEC / HZ))
@@ -44,8 +48,13 @@ typedef u64 __nocast cputime64_t;
/*
* Convert cputime <-> microseconds
*/
-#define cputime_to_usecs(__ct) \
- ((__force u64)(__ct) / NSEC_PER_USEC)
+static inline u64 cputime_to_usecs(const cputime_t ct)
+{
+ cputime_t __ct = ct;
+
+ do_div(__ct, NSEC_PER_USEC);
+ return __ct;
+}
#define usecs_to_cputime(__usecs) \
(__force cputime_t)((__usecs) * NSEC_PER_USEC)
#define usecs_to_cputime64(__usecs) \
@@ -54,8 +63,13 @@ typedef u64 __nocast cputime64_t;
/*
* Convert cputime <-> seconds
*/
-#define cputime_to_secs(__ct) \
- ((__force u64)(__ct) / NSEC_PER_SEC)
+static inline u64 cputime_to_secs(const cputime_t ct)
+{
+ cputime_t __ct = ct;
+
+ do_div(__ct, NSEC_PER_SEC);
+ return __ct;
+}
#define secs_to_cputime(__secs) \
(__force cputime_t)((__secs) * NSEC_PER_SEC)
@@ -69,8 +83,10 @@ static inline cputime_t timespec_to_cputime(const struct timespec *val)
}
static inline void cputime_to_timespec(const cputime_t ct, struct timespec *val)
{
- val->tv_sec = (__force u64) ct / NSEC_PER_SEC;
- val->tv_nsec = (__force u64) ct % NSEC_PER_SEC;
+ cputime_t __ct = ct;
+
+ val->tv_nsec = do_div(__ct, NSEC_PER_SEC);
+ val->tv_sec = __ct;
}
/*
@@ -83,15 +99,22 @@ static inline cputime_t timeval_to_cputime(struct timeval *val)
}
static inline void cputime_to_timeval(const cputime_t ct, struct timeval *val)
{
- val->tv_sec = (__force u64) ct / NSEC_PER_SEC;
- val->tv_usec = ((__force u64) ct % NSEC_PER_SEC) / NSEC_PER_USEC;
+ cputime_t __ct = ct;
+
+ val->tv_usec = do_div(__ct, NSEC_PER_SEC) / NSEC_PER_USEC;
+ val->tv_sec = __ct;
}
/*
* Convert cputime <-> clock (USER_HZ)
*/
-#define cputime_to_clock_t(__ct) \
- ((__force u64)(__ct) / (NSEC_PER_SEC / USER_HZ))
+static inline u64 cputime_to_clock_t(const cputime_t ct)
+{
+ cputime_t __ct = ct;
+
+ do_div(__ct, (NSEC_PER_SEC / USER_HZ));
+ return __ct;
+}
#define clock_t_to_cputime(__x) \
(__force cputime_t)((__x) * (NSEC_PER_SEC / USER_HZ))
--
1.8.1.2
next prev parent reply other threads:[~2013-02-14 19:49 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-28 19:03 [GIT PULL] cputime: Full dynticks task/cputime accounting v7 Frederic Weisbecker
2013-01-28 19:03 ` [PATCH 1/8] context_tracking: Export context state for generic vtime Frederic Weisbecker
2013-01-28 19:03 ` [PATCH 2/8] cputime: Librarize per nsecs resolution cputime definitions Frederic Weisbecker
2013-02-14 19:49 ` Kevin Hilman [this message]
2013-02-20 16:07 ` Frederic Weisbecker
2013-01-28 19:04 ` [PATCH 3/8] cputime: Move default nsecs_to_cputime() to jiffies based cputime file Frederic Weisbecker
2013-01-28 19:04 ` [PATCH 4/8] cputime: Generic on-demand virtual cputime accounting Frederic Weisbecker
2013-02-08 3:07 ` Stephen Rothwell
2013-02-08 3:07 ` Stephen Rothwell
2013-02-08 3:14 ` Stephen Rothwell
2013-02-08 3:14 ` Stephen Rothwell
2013-02-08 3:19 ` [PATCH] cputime: restore CPU_ACCOUNTING config defaults for PPC64 Stephen Rothwell
2013-02-08 3:19 ` Stephen Rothwell
2013-02-08 15:18 ` [tip:sched/core] cputime: Restore " tip-bot for Stephen Rothwell
2013-02-08 15:18 ` tip-bot for Stephen Rothwell
2013-02-08 14:31 ` [PATCH 4/8] cputime: Generic on-demand virtual cputime accounting Frederic Weisbecker
2013-02-08 14:31 ` Frederic Weisbecker
2013-01-28 19:04 ` [PATCH 5/8] cputime: Allow dynamic switch between tick/virtual based " Frederic Weisbecker
2013-01-28 19:04 ` [PATCH 6/8] cputime: Use accessors to read task cputime stats Frederic Weisbecker
2013-01-28 19:04 ` [PATCH 7/8] kvm: Prepare to add generic guest entry/exit callbacks Frederic Weisbecker
2013-01-28 19:04 ` [PATCH 8/8] cputime: Safely read cputime of full dynticks CPUs Frederic Weisbecker
2013-01-28 21:51 ` Sedat Dilek
2013-01-30 21:57 ` Sedat Dilek
2013-01-31 0:38 ` Frederic Weisbecker
2013-01-31 7:24 ` Sedat Dilek
2013-01-31 10:12 ` Frederic Weisbecker
2013-01-31 10:30 ` Sedat Dilek
2013-01-31 16:29 ` Frederic Weisbecker
2013-01-28 19:18 ` [GIT PULL] cputime: Full dynticks task/cputime accounting v7 Christoph Lameter
2013-01-28 19:21 ` Frederic Weisbecker
2013-01-28 20:14 ` Christoph Lameter
2013-01-29 1:42 ` Frederic Weisbecker
2013-01-29 0:02 ` Steven Rostedt
2013-01-29 1:36 ` Frederic Weisbecker
2013-01-29 2:36 ` Steven Rostedt
2013-01-29 2:39 ` Frederic Weisbecker
2013-01-29 2:44 ` Steven Rostedt
2013-01-29 3:29 ` Frederic Weisbecker
2013-01-29 4:38 ` Steven Rostedt
2013-01-29 15:12 ` Frederic Weisbecker
2013-01-29 16:46 ` Steven Rostedt
2013-01-29 16:55 ` Frederic Weisbecker
2013-01-29 17:08 ` Steven Rostedt
2013-01-29 21:26 ` Steven Rostedt
2013-01-29 21:37 ` Frederic Weisbecker
2013-02-15 1:55 ` Kevin Hilman
2013-02-15 14:04 ` Mats Liljegren
2013-02-15 15:06 ` Kevin Hilman
2013-02-20 15:53 ` Frederic Weisbecker
2013-02-20 17:53 ` Kevin Hilman
2013-02-20 15:44 ` Frederic Weisbecker
2013-02-20 18:48 ` Kevin Hilman
-- strict thread matches above, loose matches on Subject: below --
2013-01-23 0:03 [PATCH 0/8] cputime: Full dynticks task/cputime accounting v6 Frederic Weisbecker
2013-01-23 0:03 ` [PATCH 2/8] cputime: Librarize per nsecs resolution cputime definitions Frederic Weisbecker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ehgid6bb.fsf@linaro.org \
--to=khilman@linaro.org \
--cc=akpm@linux-foundation.org \
--cc=fenghua.yu@intel.com \
--cc=fweisbec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung.kim@lge.com \
--cc=nicolas.pitre@linaro.org \
--cc=paul.gortmaker@windriver.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=tony.luck@intel.com \
--cc=zhong@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.