diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-10-01 05:20:33 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-10-01 05:20:48 -0400 |
| commit | 0aa73ba1c4e1ad1d51a29e0df95ccd9f746918b6 (patch) | |
| tree | f0714ddcd02812b4fbe3b5405df9e4068f5587e2 /kernel/time.c | |
| parent | 925936ebf35a95c290e010b784c962164e6728f3 (diff) | |
| parent | 33974093c024f08caadd2fc71a83bd811ed1831d (diff) | |
Merge branch 'tracing/urgent' into tracing/core
Merge reason: Pick up latest fixes and update to latest upstream.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/time.c')
| -rw-r--r-- | kernel/time.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/kernel/time.c b/kernel/time.c index 29511943871a..2e2e469a7fec 100644 --- a/kernel/time.c +++ b/kernel/time.c | |||
| @@ -370,13 +370,20 @@ EXPORT_SYMBOL(mktime); | |||
| 370 | * 0 <= tv_nsec < NSEC_PER_SEC | 370 | * 0 <= tv_nsec < NSEC_PER_SEC |
| 371 | * For negative values only the tv_sec field is negative ! | 371 | * For negative values only the tv_sec field is negative ! |
| 372 | */ | 372 | */ |
| 373 | void set_normalized_timespec(struct timespec *ts, time_t sec, long nsec) | 373 | void set_normalized_timespec(struct timespec *ts, time_t sec, s64 nsec) |
| 374 | { | 374 | { |
| 375 | while (nsec >= NSEC_PER_SEC) { | 375 | while (nsec >= NSEC_PER_SEC) { |
| 376 | /* | ||
| 377 | * The following asm() prevents the compiler from | ||
| 378 | * optimising this loop into a modulo operation. See | ||
| 379 | * also __iter_div_u64_rem() in include/linux/time.h | ||
| 380 | */ | ||
| 381 | asm("" : "+rm"(nsec)); | ||
| 376 | nsec -= NSEC_PER_SEC; | 382 | nsec -= NSEC_PER_SEC; |
| 377 | ++sec; | 383 | ++sec; |
| 378 | } | 384 | } |
| 379 | while (nsec < 0) { | 385 | while (nsec < 0) { |
| 386 | asm("" : "+rm"(nsec)); | ||
| 380 | nsec += NSEC_PER_SEC; | 387 | nsec += NSEC_PER_SEC; |
| 381 | --sec; | 388 | --sec; |
| 382 | } | 389 | } |
