]> Pileus Git - ~andy/linux/blobdiff - kernel/sched_clock.c
sched_clock: record from last tick
[~andy/linux] / kernel / sched_clock.c
index ce05271219abcc5bf7dd4087d91ce98f487ee2e9..e383bc7df6dd859ffed2c8d161e4dc4d1559564c 100644 (file)
@@ -40,7 +40,7 @@ struct sched_clock_data {
         */
        raw_spinlock_t          lock;
 
-       unsigned long           prev_jiffies;
+       unsigned long           tick_jiffies;
        u64                     prev_raw;
        u64                     tick_raw;
        u64                     tick_gtod;
@@ -71,7 +71,7 @@ void sched_clock_init(void)
                struct sched_clock_data *scd = cpu_sdc(cpu);
 
                scd->lock = (raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED;
-               scd->prev_jiffies = now_jiffies;
+               scd->tick_jiffies = now_jiffies;
                scd->prev_raw = 0;
                scd->tick_raw = 0;
                scd->tick_gtod = ktime_now;
@@ -90,7 +90,7 @@ void sched_clock_init(void)
 static void __update_sched_clock(struct sched_clock_data *scd, u64 now)
 {
        unsigned long now_jiffies = jiffies;
-       long delta_jiffies = now_jiffies - scd->prev_jiffies;
+       long delta_jiffies = now_jiffies - scd->tick_jiffies;
        u64 clock = scd->clock;
        u64 min_clock, max_clock;
        s64 delta = now - scd->prev_raw;
@@ -119,7 +119,6 @@ static void __update_sched_clock(struct sched_clock_data *scd, u64 now)
                clock = min_clock;
 
        scd->prev_raw = now;
-       scd->prev_jiffies = now_jiffies;
        scd->clock = clock;
 }
 
@@ -179,6 +178,7 @@ u64 sched_clock_cpu(int cpu)
 void sched_clock_tick(void)
 {
        struct sched_clock_data *scd = this_scd();
+       unsigned long now_jiffies = jiffies;
        u64 now, now_gtod;
 
        if (unlikely(!sched_clock_running))
@@ -196,6 +196,7 @@ void sched_clock_tick(void)
         * already observe 1 new jiffy; adding a new tick_gtod to that would
         * increase the clock 2 jiffies.
         */
+       scd->tick_jiffies = now_jiffies;
        scd->tick_raw = now;
        scd->tick_gtod = now_gtod;
        __raw_spin_unlock(&scd->lock);