diff options
-rw-r--r-- | arch/parisc/kernel/time.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/arch/parisc/kernel/time.c b/arch/parisc/kernel/time.c index 68e88e5c0898..f7e684560186 100644 --- a/arch/parisc/kernel/time.c +++ b/arch/parisc/kernel/time.c | |||
@@ -76,10 +76,10 @@ irqreturn_t __irq_entry timer_interrupt(int irq, void *dev_id) | |||
76 | next_tick = cpuinfo->it_value; | 76 | next_tick = cpuinfo->it_value; |
77 | 77 | ||
78 | /* Calculate how many ticks have elapsed. */ | 78 | /* Calculate how many ticks have elapsed. */ |
79 | now = mfctl(16); | ||
79 | do { | 80 | do { |
80 | ++ticks_elapsed; | 81 | ++ticks_elapsed; |
81 | next_tick += cpt; | 82 | next_tick += cpt; |
82 | now = mfctl(16); | ||
83 | } while (next_tick - now > cpt); | 83 | } while (next_tick - now > cpt); |
84 | 84 | ||
85 | /* Store (in CR16 cycles) up to when we are accounting right now. */ | 85 | /* Store (in CR16 cycles) up to when we are accounting right now. */ |
@@ -103,16 +103,17 @@ irqreturn_t __irq_entry timer_interrupt(int irq, void *dev_id) | |||
103 | * if one or the other wrapped. If "now" is "bigger" we'll end up | 103 | * if one or the other wrapped. If "now" is "bigger" we'll end up |
104 | * with a very large unsigned number. | 104 | * with a very large unsigned number. |
105 | */ | 105 | */ |
106 | while (next_tick - mfctl(16) > cpt) | 106 | now = mfctl(16); |
107 | while (next_tick - now > cpt) | ||
107 | next_tick += cpt; | 108 | next_tick += cpt; |
108 | 109 | ||
109 | /* Program the IT when to deliver the next interrupt. | 110 | /* Program the IT when to deliver the next interrupt. |
110 | * Only bottom 32-bits of next_tick are writable in CR16! | 111 | * Only bottom 32-bits of next_tick are writable in CR16! |
111 | * Timer interrupt will be delivered at least a few hundred cycles | 112 | * Timer interrupt will be delivered at least a few hundred cycles |
112 | * after the IT fires, so if we are too close (<= 500 cycles) to the | 113 | * after the IT fires, so if we are too close (<= 8000 cycles) to the |
113 | * next cycle, simply skip it. | 114 | * next cycle, simply skip it. |
114 | */ | 115 | */ |
115 | if (next_tick - mfctl(16) <= 500) | 116 | if (next_tick - now <= 8000) |
116 | next_tick += cpt; | 117 | next_tick += cpt; |
117 | mtctl(next_tick, 16); | 118 | mtctl(next_tick, 16); |
118 | 119 | ||