diff options
Diffstat (limited to 'arch/mips/kernel/time.c')
| -rw-r--r-- | arch/mips/kernel/time.c | 74 |
1 files changed, 0 insertions, 74 deletions
diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c index 845c7e55505d..a8340802f2d7 100644 --- a/arch/mips/kernel/time.c +++ b/arch/mips/kernel/time.c | |||
| @@ -149,80 +149,6 @@ void (*mips_timer_ack)(void); | |||
| 149 | unsigned int (*mips_hpt_read)(void); | 149 | unsigned int (*mips_hpt_read)(void); |
| 150 | void (*mips_hpt_init)(unsigned int); | 150 | void (*mips_hpt_init)(unsigned int); |
| 151 | 151 | ||
| 152 | |||
| 153 | /* | ||
| 154 | * This version of gettimeofday has microsecond resolution and better than | ||
| 155 | * microsecond precision on fast machines with cycle counter. | ||
| 156 | */ | ||
| 157 | void do_gettimeofday(struct timeval *tv) | ||
| 158 | { | ||
| 159 | unsigned long seq; | ||
| 160 | unsigned long usec, sec; | ||
| 161 | unsigned long max_ntp_tick; | ||
| 162 | |||
| 163 | do { | ||
| 164 | seq = read_seqbegin(&xtime_lock); | ||
| 165 | |||
| 166 | usec = do_gettimeoffset(); | ||
| 167 | |||
| 168 | /* | ||
| 169 | * If time_adjust is negative then NTP is slowing the clock | ||
| 170 | * so make sure not to go into next possible interval. | ||
| 171 | * Better to lose some accuracy than have time go backwards.. | ||
| 172 | */ | ||
| 173 | if (unlikely(time_adjust < 0)) { | ||
| 174 | max_ntp_tick = (USEC_PER_SEC / HZ) - tickadj; | ||
| 175 | usec = min(usec, max_ntp_tick); | ||
| 176 | } | ||
| 177 | |||
| 178 | sec = xtime.tv_sec; | ||
| 179 | usec += (xtime.tv_nsec / 1000); | ||
| 180 | |||
| 181 | } while (read_seqretry(&xtime_lock, seq)); | ||
| 182 | |||
| 183 | while (usec >= 1000000) { | ||
| 184 | usec -= 1000000; | ||
| 185 | sec++; | ||
| 186 | } | ||
| 187 | |||
| 188 | tv->tv_sec = sec; | ||
| 189 | tv->tv_usec = usec; | ||
| 190 | } | ||
| 191 | |||
| 192 | EXPORT_SYMBOL(do_gettimeofday); | ||
| 193 | |||
| 194 | int do_settimeofday(struct timespec *tv) | ||
| 195 | { | ||
| 196 | time_t wtm_sec, sec = tv->tv_sec; | ||
| 197 | long wtm_nsec, nsec = tv->tv_nsec; | ||
| 198 | |||
| 199 | if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC) | ||
| 200 | return -EINVAL; | ||
| 201 | |||
| 202 | write_seqlock_irq(&xtime_lock); | ||
| 203 | |||
| 204 | /* | ||
| 205 | * This is revolting. We need to set "xtime" correctly. However, | ||
| 206 | * the value in this location is the value at the most recent update | ||
| 207 | * of wall time. Discover what correction gettimeofday() would have | ||
| 208 | * made, and then undo it! | ||
| 209 | */ | ||
| 210 | nsec -= do_gettimeoffset() * NSEC_PER_USEC; | ||
| 211 | |||
| 212 | wtm_sec = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec); | ||
| 213 | wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec); | ||
| 214 | |||
| 215 | set_normalized_timespec(&xtime, sec, nsec); | ||
| 216 | set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec); | ||
| 217 | |||
| 218 | ntp_clear(); | ||
| 219 | write_sequnlock_irq(&xtime_lock); | ||
| 220 | clock_was_set(); | ||
| 221 | return 0; | ||
| 222 | } | ||
| 223 | |||
| 224 | EXPORT_SYMBOL(do_settimeofday); | ||
| 225 | |||
| 226 | /* | 152 | /* |
| 227 | * Gettimeoffset routines. These routines returns the time duration | 153 | * Gettimeoffset routines. These routines returns the time duration |
| 228 | * since last timer interrupt in usecs. | 154 | * since last timer interrupt in usecs. |
