* [PATCH] Use do_div for a subtract loop
@ 2007-05-01 18:11 Thiemo Seufer
0 siblings, 0 replies; only message in thread
From: Thiemo Seufer @ 2007-05-01 18:11 UTC (permalink / raw)
To: linux-mips; +Cc: ralf
Hello All,
this patch switches the subtract loop in timespec_add_ns to use
do_div. The latest GCC SVN version grew intelligent enough to
optimize the loop to a division which calls libgcc's __udivdi3,
which breaks kernel builds.
Tested by building and booting a little endian qemu MIPS kernel.
Thiemo
Signed-off-by: Thiemo Seufer <ths@networkno.de>
diff --git a/include/linux/time.h b/include/linux/time.h
index 8ea8dea..e1a11d7 100644
--- a/include/linux/time.h
+++ b/include/linux/time.h
@@ -5,6 +5,7 @@
#ifdef __KERNEL__
# include <linux/seqlock.h>
+# include <asm/div64.h>
#endif
#ifndef _STRUCT_TIMESPEC
@@ -169,9 +170,10 @@ extern struct timeval ns_to_timeval(const s64 nsec);
static inline void timespec_add_ns(struct timespec *a, u64 ns)
{
ns += a->tv_nsec;
- while(unlikely(ns >= NSEC_PER_SEC)) {
- ns -= NSEC_PER_SEC;
- a->tv_sec++;
+ if(unlikely(ns >= NSEC_PER_SEC)) {
+ u64 tmp = ns;
+ ns = do_div(tmp, NSEC_PER_SEC);
+ a->tv_sec += tmp;
}
a->tv_nsec = ns;
}
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2007-05-01 18:10 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-01 18:11 [PATCH] Use do_div for a subtract loop Thiemo Seufer
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.