diff options
Diffstat (limited to 'kernel/time/ntp.c')
| -rw-r--r-- | kernel/time/ntp.c | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c index 419a52cecd20..33db43a39515 100644 --- a/kernel/time/ntp.c +++ b/kernel/time/ntp.c | |||
| @@ -165,21 +165,21 @@ static inline void pps_set_freq(s64 freq) | |||
| 165 | 165 | ||
| 166 | static inline int is_error_status(int status) | 166 | static inline int is_error_status(int status) |
| 167 | { | 167 | { |
| 168 | return (time_status & (STA_UNSYNC|STA_CLOCKERR)) | 168 | return (status & (STA_UNSYNC|STA_CLOCKERR)) |
| 169 | /* PPS signal lost when either PPS time or | 169 | /* PPS signal lost when either PPS time or |
| 170 | * PPS frequency synchronization requested | 170 | * PPS frequency synchronization requested |
| 171 | */ | 171 | */ |
| 172 | || ((time_status & (STA_PPSFREQ|STA_PPSTIME)) | 172 | || ((status & (STA_PPSFREQ|STA_PPSTIME)) |
| 173 | && !(time_status & STA_PPSSIGNAL)) | 173 | && !(status & STA_PPSSIGNAL)) |
| 174 | /* PPS jitter exceeded when | 174 | /* PPS jitter exceeded when |
| 175 | * PPS time synchronization requested */ | 175 | * PPS time synchronization requested */ |
| 176 | || ((time_status & (STA_PPSTIME|STA_PPSJITTER)) | 176 | || ((status & (STA_PPSTIME|STA_PPSJITTER)) |
| 177 | == (STA_PPSTIME|STA_PPSJITTER)) | 177 | == (STA_PPSTIME|STA_PPSJITTER)) |
| 178 | /* PPS wander exceeded or calibration error when | 178 | /* PPS wander exceeded or calibration error when |
| 179 | * PPS frequency synchronization requested | 179 | * PPS frequency synchronization requested |
| 180 | */ | 180 | */ |
| 181 | || ((time_status & STA_PPSFREQ) | 181 | || ((status & STA_PPSFREQ) |
| 182 | && (time_status & (STA_PPSWANDER|STA_PPSERROR))); | 182 | && (status & (STA_PPSWANDER|STA_PPSERROR))); |
| 183 | } | 183 | } |
| 184 | 184 | ||
| 185 | static inline void pps_fill_timex(struct timex *txc) | 185 | static inline void pps_fill_timex(struct timex *txc) |
| @@ -786,8 +786,9 @@ static long hardpps_update_freq(struct pps_normtime freq_norm) | |||
| 786 | time_status |= STA_PPSERROR; | 786 | time_status |= STA_PPSERROR; |
| 787 | pps_errcnt++; | 787 | pps_errcnt++; |
| 788 | pps_dec_freq_interval(); | 788 | pps_dec_freq_interval(); |
| 789 | pr_err("hardpps: PPSERROR: interval too long - %ld s\n", | 789 | printk_deferred(KERN_ERR |
| 790 | freq_norm.sec); | 790 | "hardpps: PPSERROR: interval too long - %ld s\n", |
| 791 | freq_norm.sec); | ||
| 791 | return 0; | 792 | return 0; |
| 792 | } | 793 | } |
| 793 | 794 | ||
| @@ -800,7 +801,8 @@ static long hardpps_update_freq(struct pps_normtime freq_norm) | |||
| 800 | delta = shift_right(ftemp - pps_freq, NTP_SCALE_SHIFT); | 801 | delta = shift_right(ftemp - pps_freq, NTP_SCALE_SHIFT); |
| 801 | pps_freq = ftemp; | 802 | pps_freq = ftemp; |
| 802 | if (delta > PPS_MAXWANDER || delta < -PPS_MAXWANDER) { | 803 | if (delta > PPS_MAXWANDER || delta < -PPS_MAXWANDER) { |
| 803 | pr_warning("hardpps: PPSWANDER: change=%ld\n", delta); | 804 | printk_deferred(KERN_WARNING |
| 805 | "hardpps: PPSWANDER: change=%ld\n", delta); | ||
| 804 | time_status |= STA_PPSWANDER; | 806 | time_status |= STA_PPSWANDER; |
| 805 | pps_stbcnt++; | 807 | pps_stbcnt++; |
| 806 | pps_dec_freq_interval(); | 808 | pps_dec_freq_interval(); |
| @@ -844,8 +846,9 @@ static void hardpps_update_phase(long error) | |||
| 844 | * the time offset is updated. | 846 | * the time offset is updated. |
| 845 | */ | 847 | */ |
| 846 | if (jitter > (pps_jitter << PPS_POPCORN)) { | 848 | if (jitter > (pps_jitter << PPS_POPCORN)) { |
| 847 | pr_warning("hardpps: PPSJITTER: jitter=%ld, limit=%ld\n", | 849 | printk_deferred(KERN_WARNING |
| 848 | jitter, (pps_jitter << PPS_POPCORN)); | 850 | "hardpps: PPSJITTER: jitter=%ld, limit=%ld\n", |
| 851 | jitter, (pps_jitter << PPS_POPCORN)); | ||
| 849 | time_status |= STA_PPSJITTER; | 852 | time_status |= STA_PPSJITTER; |
| 850 | pps_jitcnt++; | 853 | pps_jitcnt++; |
| 851 | } else if (time_status & STA_PPSTIME) { | 854 | } else if (time_status & STA_PPSTIME) { |
| @@ -902,7 +905,7 @@ void __hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts) | |||
| 902 | time_status |= STA_PPSJITTER; | 905 | time_status |= STA_PPSJITTER; |
| 903 | /* restart the frequency calibration interval */ | 906 | /* restart the frequency calibration interval */ |
| 904 | pps_fbase = *raw_ts; | 907 | pps_fbase = *raw_ts; |
| 905 | pr_err("hardpps: PPSJITTER: bad pulse\n"); | 908 | printk_deferred(KERN_ERR "hardpps: PPSJITTER: bad pulse\n"); |
| 906 | return; | 909 | return; |
| 907 | } | 910 | } |
| 908 | 911 | ||
| @@ -923,7 +926,10 @@ void __hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts) | |||
| 923 | 926 | ||
| 924 | static int __init ntp_tick_adj_setup(char *str) | 927 | static int __init ntp_tick_adj_setup(char *str) |
| 925 | { | 928 | { |
| 926 | ntp_tick_adj = simple_strtol(str, NULL, 0); | 929 | int rc = kstrtol(str, 0, (long *)&ntp_tick_adj); |
| 930 | |||
| 931 | if (rc) | ||
| 932 | return rc; | ||
| 927 | ntp_tick_adj <<= NTP_SCALE_SHIFT; | 933 | ntp_tick_adj <<= NTP_SCALE_SHIFT; |
| 928 | 934 | ||
| 929 | return 1; | 935 | return 1; |
