]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
ntp: Make ntp_lock raw
authorThomas Gleixner <tglx@linutronix.de>
Tue, 10 Apr 2012 09:14:55 +0000 (11:14 +0200)
committerIngo Molnar <mingo@kernel.org>
Tue, 19 Feb 2013 07:43:16 +0000 (08:43 +0100)
seconds_overflow() is called from hard interrupt context even on
Preempt-RT. This requires the lock to be a raw_spinlock.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: John Stultz <john.stultz@linaro.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
kernel/time/ntp.c

index 24174b4d669b1280c632d4ed0126dc2f1bb297ef..bb1edfaafe3d10fdc591758a96460a0b2552b8dd 100644 (file)
@@ -22,7 +22,7 @@
  * NTP timekeeping variables:
  */
 
-DEFINE_SPINLOCK(ntp_lock);
+DEFINE_RAW_SPINLOCK(ntp_lock);
 
 
 /* USER_HZ period (usecs): */
@@ -347,7 +347,7 @@ void ntp_clear(void)
 {
        unsigned long flags;
 
-       spin_lock_irqsave(&ntp_lock, flags);
+       raw_spin_lock_irqsave(&ntp_lock, flags);
 
        time_adjust     = 0;            /* stop active adjtime() */
        time_status     |= STA_UNSYNC;
@@ -361,7 +361,7 @@ void ntp_clear(void)
 
        /* Clear PPS state variables */
        pps_clear();
-       spin_unlock_irqrestore(&ntp_lock, flags);
+       raw_spin_unlock_irqrestore(&ntp_lock, flags);
 
 }
 
@@ -371,9 +371,9 @@ u64 ntp_tick_length(void)
        unsigned long flags;
        s64 ret;
 
-       spin_lock_irqsave(&ntp_lock, flags);
+       raw_spin_lock_irqsave(&ntp_lock, flags);
        ret = tick_length;
-       spin_unlock_irqrestore(&ntp_lock, flags);
+       raw_spin_unlock_irqrestore(&ntp_lock, flags);
        return ret;
 }
 
@@ -394,7 +394,7 @@ int second_overflow(unsigned long secs)
        int leap = 0;
        unsigned long flags;
 
-       spin_lock_irqsave(&ntp_lock, flags);
+       raw_spin_lock_irqsave(&ntp_lock, flags);
 
        /*
         * Leap second processing. If in leap-insert state at the end of the
@@ -478,7 +478,7 @@ int second_overflow(unsigned long secs)
        time_adjust = 0;
 
 out:
-       spin_unlock_irqrestore(&ntp_lock, flags);
+       raw_spin_unlock_irqrestore(&ntp_lock, flags);
 
        return leap;
 }
@@ -660,7 +660,7 @@ int do_adjtimex(struct timex *txc)
 
        getnstimeofday(&ts);
 
-       spin_lock_irq(&ntp_lock);
+       raw_spin_lock_irq(&ntp_lock);
 
        if (txc->modes & ADJ_ADJTIME) {
                long save_adjust = time_adjust;
@@ -702,7 +702,7 @@ int do_adjtimex(struct timex *txc)
        /* fill PPS status fields */
        pps_fill_timex(txc);
 
-       spin_unlock_irq(&ntp_lock);
+       raw_spin_unlock_irq(&ntp_lock);
 
        txc->time.tv_sec = ts.tv_sec;
        txc->time.tv_usec = ts.tv_nsec;
@@ -900,7 +900,7 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
 
        pts_norm = pps_normalize_ts(*phase_ts);
 
-       spin_lock_irqsave(&ntp_lock, flags);
+       raw_spin_lock_irqsave(&ntp_lock, flags);
 
        /* clear the error bits, they will be set again if needed */
        time_status &= ~(STA_PPSJITTER | STA_PPSWANDER | STA_PPSERROR);
@@ -913,7 +913,7 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
         * just start the frequency interval */
        if (unlikely(pps_fbase.tv_sec == 0)) {
                pps_fbase = *raw_ts;
-               spin_unlock_irqrestore(&ntp_lock, flags);
+               raw_spin_unlock_irqrestore(&ntp_lock, flags);
                return;
        }
 
@@ -928,7 +928,7 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
                time_status |= STA_PPSJITTER;
                /* restart the frequency calibration interval */
                pps_fbase = *raw_ts;
-               spin_unlock_irqrestore(&ntp_lock, flags);
+               raw_spin_unlock_irqrestore(&ntp_lock, flags);
                pr_err("hardpps: PPSJITTER: bad pulse\n");
                return;
        }
@@ -945,7 +945,7 @@ void hardpps(const struct timespec *phase_ts, const struct timespec *raw_ts)
 
        hardpps_update_phase(pts_norm.nsec);
 
-       spin_unlock_irqrestore(&ntp_lock, flags);
+       raw_spin_unlock_irqrestore(&ntp_lock, flags);
 }
 EXPORT_SYMBOL(hardpps);