From: Kevin Hilman <khilman@linaro.org> To: Namhyung Kim <namhyung@kernel.org> Cc: Frederic Weisbecker <fweisbec@gmail.com>, Mats Liljegren <mats.liljegren@enea.com>, linaro-dev@lists.linaro.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [RFC/PATCH 4/5] cputime: use do_div() for nsec resolution conversion helpers Date: Thu, 21 Feb 2013 11:21:13 -0800 [thread overview] Message-ID: <87621lo4ly.fsf@linaro.org> (raw) In-Reply-To: <20130221175857.GB14256@danjae.linux.parc55> (Namhyung Kim's message of "Thu, 21 Feb 2013 09:58:57 -0800") Namhyung Kim <namhyung@kernel.org> writes: > Hi Kevin, > > On Wed, Feb 20, 2013 at 11:41:41AM -0800, Kevin Hilman wrote: >> For the nsec resolution conversions to be useful on non 64-bit >> architectures, do_div() needs to be used for the 64-bit divisions. >> >> 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; > > Why it removed the "(__force u64)" conversion part? Shouldn't it be: > > u64 __ct = (__force u64) ct; > > ? You're right, that was an oversight. Updated patch below. Frederic, if you merge this, please take the one below with the __force attributes added back. I've updated my branch to include the fixed version. Kevin >From a8a0a8b8b12512a7f862ade459cd88d2b48e2bf3 Mon Sep 17 00:00:00 2001 From: Kevin Hilman <khilman@linaro.org> Date: Thu, 14 Feb 2013 11:27:36 -0800 Subject: [PATCH 4/5] 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. Special thanks to Namhyung Kim for pointing out omissions of the __force attribute in an earlier version. Cc: Namhyung Kim <namhyung@kernel.org> 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..d4944c9 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) +{ + u64 __ct = (__force u64) 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) +{ + u64 __ct = (__force u64) 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) +{ + u64 __ct = (__force u64) 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; + u64 __ct = (__force u64) 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; + u64 __ct = (__force u64) 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) +{ + u64 __ct = (__force u64) 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
WARNING: multiple messages have this Message-ID (diff)
From: khilman@linaro.org (Kevin Hilman) To: linux-arm-kernel@lists.infradead.org Subject: [RFC/PATCH 4/5] cputime: use do_div() for nsec resolution conversion helpers Date: Thu, 21 Feb 2013 11:21:13 -0800 [thread overview] Message-ID: <87621lo4ly.fsf@linaro.org> (raw) In-Reply-To: <20130221175857.GB14256@danjae.linux.parc55> (Namhyung Kim's message of "Thu, 21 Feb 2013 09:58:57 -0800") Namhyung Kim <namhyung@kernel.org> writes: > Hi Kevin, > > On Wed, Feb 20, 2013 at 11:41:41AM -0800, Kevin Hilman wrote: >> For the nsec resolution conversions to be useful on non 64-bit >> architectures, do_div() needs to be used for the 64-bit divisions. >> >> 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; > > Why it removed the "(__force u64)" conversion part? Shouldn't it be: > > u64 __ct = (__force u64) ct; > > ? You're right, that was an oversight. Updated patch below. Frederic, if you merge this, please take the one below with the __force attributes added back. I've updated my branch to include the fixed version. Kevin >From a8a0a8b8b12512a7f862ade459cd88d2b48e2bf3 Mon Sep 17 00:00:00 2001 From: Kevin Hilman <khilman@linaro.org> Date: Thu, 14 Feb 2013 11:27:36 -0800 Subject: [PATCH 4/5] 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. Special thanks to Namhyung Kim for pointing out omissions of the __force attribute in an earlier version. Cc: Namhyung Kim <namhyung@kernel.org> 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..d4944c9 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) +{ + u64 __ct = (__force u64) 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) +{ + u64 __ct = (__force u64) 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) +{ + u64 __ct = (__force u64) 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; + u64 __ct = (__force u64) 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; + u64 __ct = (__force u64) 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) +{ + u64 __ct = (__force u64) 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-21 19:21 UTC|newest] Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-02-20 19:41 [RFC/PATCH 0/5] context_tracking: prerequisites for ARM support Kevin Hilman 2013-02-20 19:41 ` Kevin Hilman 2013-02-20 19:41 ` [RFC/PATCH 1/5] context tracking: conditionalize guest support based on CONFIG_KVM Kevin Hilman 2013-02-20 19:41 ` Kevin Hilman 2013-02-22 13:27 ` Frederic Weisbecker 2013-02-22 13:27 ` Frederic Weisbecker 2013-02-26 19:29 ` Kevin Hilman 2013-02-26 19:29 ` Kevin Hilman 2013-02-26 22:13 ` Namhyung Kim 2013-02-26 22:13 ` Namhyung Kim 2013-02-27 14:24 ` Kevin Hilman 2013-02-27 14:24 ` Kevin Hilman 2013-02-27 15:21 ` Frederic Weisbecker 2013-02-27 15:21 ` Frederic Weisbecker 2013-02-20 19:41 ` [RFC/PATCH 2/5] kernel_cpustat: convert to atomic 64-bit accessors Kevin Hilman 2013-02-20 19:41 ` Kevin Hilman 2013-02-21 19:38 ` Kevin Hilman 2013-02-21 19:38 ` Kevin Hilman 2013-02-21 21:53 ` Frederic Weisbecker 2013-02-21 21:53 ` Frederic Weisbecker 2013-02-21 21:54 ` Frederic Weisbecker 2013-02-21 21:54 ` Frederic Weisbecker 2013-02-22 5:57 ` Kevin Hilman 2013-02-22 5:57 ` Kevin Hilman 2013-02-21 21:58 ` Russell King - ARM Linux 2013-02-21 21:58 ` Russell King - ARM Linux 2013-02-21 22:15 ` Frederic Weisbecker 2013-02-21 22:15 ` Frederic Weisbecker 2013-02-20 19:41 ` [RFC/PATCH 3/5] virt CPU accounting: Kconfig: drop 64-bit requirment Kevin Hilman 2013-02-20 19:41 ` Kevin Hilman 2013-02-20 19:41 ` [RFC/PATCH 4/5] cputime: use do_div() for nsec resolution conversion helpers Kevin Hilman 2013-02-20 19:41 ` Kevin Hilman 2013-02-21 16:24 ` Frederic Weisbecker 2013-02-21 16:24 ` Frederic Weisbecker 2013-02-21 17:58 ` Namhyung Kim 2013-02-21 17:58 ` Namhyung Kim 2013-02-21 19:21 ` Kevin Hilman [this message] 2013-02-21 19:21 ` Kevin Hilman 2013-02-26 15:21 ` Frederic Weisbecker 2013-02-26 15:21 ` Frederic Weisbecker 2013-02-20 19:41 ` [RFC/PATCH 5/5] ARM: Kconfig: allow virt CPU accounting Kevin Hilman 2013-02-20 19:41 ` Kevin Hilman
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=87621lo4ly.fsf@linaro.org \ --to=khilman@linaro.org \ --cc=fweisbec@gmail.com \ --cc=linaro-dev@lists.linaro.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mats.liljegren@enea.com \ --cc=namhyung@kernel.org \ /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: linkBe 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.