diff options
Diffstat (limited to 'arch/mn10300/kernel/time.c')
-rw-r--r-- | arch/mn10300/kernel/time.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/mn10300/kernel/time.c b/arch/mn10300/kernel/time.c index 8f7f6d22783d..0b5c856b4266 100644 --- a/arch/mn10300/kernel/time.c +++ b/arch/mn10300/kernel/time.c | |||
@@ -54,6 +54,9 @@ unsigned long long sched_clock(void) | |||
54 | unsigned long tsc, tmp; | 54 | unsigned long tsc, tmp; |
55 | unsigned product[3]; /* 96-bit intermediate value */ | 55 | unsigned product[3]; /* 96-bit intermediate value */ |
56 | 56 | ||
57 | /* cnt32_to_63() is not safe with preemption */ | ||
58 | preempt_disable(); | ||
59 | |||
57 | /* read the TSC value | 60 | /* read the TSC value |
58 | */ | 61 | */ |
59 | tsc = 0 - get_cycles(); /* get_cycles() counts down */ | 62 | tsc = 0 - get_cycles(); /* get_cycles() counts down */ |
@@ -64,6 +67,8 @@ unsigned long long sched_clock(void) | |||
64 | */ | 67 | */ |
65 | tsc64.ll = cnt32_to_63(tsc) & 0x7fffffffffffffffULL; | 68 | tsc64.ll = cnt32_to_63(tsc) & 0x7fffffffffffffffULL; |
66 | 69 | ||
70 | preempt_enable(); | ||
71 | |||
67 | /* scale the 64-bit TSC value to a nanosecond value via a 96-bit | 72 | /* scale the 64-bit TSC value to a nanosecond value via a 96-bit |
68 | * intermediate | 73 | * intermediate |
69 | */ | 74 | */ |