|
@@ -342,14 +342,16 @@ int do_adjtimex(struct timex *txc)
|
|
freq_adj = shift_right(freq_adj, time_constant * 2 +
|
|
freq_adj = shift_right(freq_adj, time_constant * 2 +
|
|
(SHIFT_PLL + 2) * 2 - SHIFT_NSEC);
|
|
(SHIFT_PLL + 2) * 2 - SHIFT_NSEC);
|
|
if (mtemp >= MINSEC && (time_status & STA_FLL || mtemp > MAXSEC)) {
|
|
if (mtemp >= MINSEC && (time_status & STA_FLL || mtemp > MAXSEC)) {
|
|
|
|
+ u64 utemp64;
|
|
temp64 = time_offset << (SHIFT_NSEC - SHIFT_FLL);
|
|
temp64 = time_offset << (SHIFT_NSEC - SHIFT_FLL);
|
|
if (time_offset < 0) {
|
|
if (time_offset < 0) {
|
|
- temp64 = -temp64;
|
|
|
|
- do_div(temp64, mtemp);
|
|
|
|
- freq_adj -= temp64;
|
|
|
|
|
|
+ utemp64 = -temp64;
|
|
|
|
+ do_div(utemp64, mtemp);
|
|
|
|
+ freq_adj -= utemp64;
|
|
} else {
|
|
} else {
|
|
- do_div(temp64, mtemp);
|
|
|
|
- freq_adj += temp64;
|
|
|
|
|
|
+ utemp64 = temp64;
|
|
|
|
+ do_div(utemp64, mtemp);
|
|
|
|
+ freq_adj += utemp64;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
freq_adj += time_freq;
|
|
freq_adj += time_freq;
|