Commit-ID: e2e1214438bb25ec4e37b8aedb3d3e502535b09b Gitweb: http://git.kernel.org/tip/e2e1214438bb25ec4e37b8aedb3d3e502535b09b Author: Richard Cochran <rcochran@xxxxxxxxxxxxx> AuthorDate: Wed, 7 Sep 2016 23:05:53 +0200 Committer: Thomas Gleixner <tglx@xxxxxxxxxxxxx> CommitDate: Tue, 18 Apr 2017 11:46:39 +0200 tick/sched: Split out jiffies update helper function The logic to get the time of the last jiffies update will be needed by the timer pull model as well. Move the code into a global funtion in anticipation of the new caller. No functional change. Signed-off-by: Richard Cochran <rcochran@xxxxxxxxxxxxx> Signed-off-by: Anna-Maria Gleixner <anna-maria@xxxxxxxxxxxxx> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> --- kernel/time/tick-internal.h | 1 + kernel/time/tick-sched.c | 27 ++++++++++++++++++++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/kernel/time/tick-internal.h b/kernel/time/tick-internal.h index cdff0f7..30dde50 100644 --- a/kernel/time/tick-internal.h +++ b/kernel/time/tick-internal.h @@ -151,6 +151,7 @@ static inline void tick_nohz_init(void) { } #ifdef CONFIG_NO_HZ_COMMON extern unsigned long tick_nohz_active; +extern u64 get_jiffies_update(unsigned long *basej); #else #define tick_nohz_active (0) #endif diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index 5c22651..fda488b 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c @@ -112,6 +112,24 @@ static ktime_t tick_init_jiffy_update(void) return period; } +#ifdef CONFIG_NO_HZ_COMMON +/* + * Read jiffies and the time when jiffies were updated last + */ +u64 get_jiffies_update(unsigned long *basej) +{ + unsigned long seq, basejiff; + u64 basemono; + + do { + seq = read_seqbegin(&jiffies_lock); + basemono = last_jiffies_update; + basejiff = jiffies; + } while (read_seqretry(&jiffies_lock, seq)); + *basej = basejiff; + return basemono; +} +#endif static void tick_sched_do_timer(ktime_t now) { @@ -667,15 +685,10 @@ static ktime_t tick_nohz_stop_sched_tick(struct tick_sched *ts, { struct clock_event_device *dev = __this_cpu_read(tick_cpu_device.evtdev); u64 basemono, next_tick, next_local, next_global, next_rcu, delta, expires; - unsigned long seq, basejiff; + unsigned long basejiff; ktime_t tick; - /* Read jiffies and the time when jiffies were updated last */ - do { - seq = read_seqbegin(&jiffies_lock); - basemono = last_jiffies_update; - basejiff = jiffies; - } while (read_seqretry(&jiffies_lock, seq)); + basemono = get_jiffies_update(&basejiff); ts->last_jiffies = basejiff; if (rcu_needs_cpu(basemono, &next_rcu) || -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |