diff options
Diffstat (limited to 'kernel/time/tick-sched.c')
-rw-r--r-- | kernel/time/tick-sched.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index d58e552d9fd1..a19a39952c1b 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/profile.h> | 20 | #include <linux/profile.h> |
21 | #include <linux/sched.h> | 21 | #include <linux/sched.h> |
22 | #include <linux/module.h> | 22 | #include <linux/module.h> |
23 | #include <linux/irq_work.h> | ||
23 | 24 | ||
24 | #include <asm/irq_regs.h> | 25 | #include <asm/irq_regs.h> |
25 | 26 | ||
@@ -28,7 +29,7 @@ | |||
28 | /* | 29 | /* |
29 | * Per cpu nohz control structure | 30 | * Per cpu nohz control structure |
30 | */ | 31 | */ |
31 | static DEFINE_PER_CPU(struct tick_sched, tick_cpu_sched); | 32 | DEFINE_PER_CPU(struct tick_sched, tick_cpu_sched); |
32 | 33 | ||
33 | /* | 34 | /* |
34 | * The time, when the last jiffy update happened. Protected by jiffies_lock. | 35 | * The time, when the last jiffy update happened. Protected by jiffies_lock. |
@@ -331,8 +332,8 @@ static ktime_t tick_nohz_stop_sched_tick(struct tick_sched *ts, | |||
331 | time_delta = timekeeping_max_deferment(); | 332 | time_delta = timekeeping_max_deferment(); |
332 | } while (read_seqretry(&jiffies_lock, seq)); | 333 | } while (read_seqretry(&jiffies_lock, seq)); |
333 | 334 | ||
334 | if (rcu_needs_cpu(cpu, &rcu_delta_jiffies) || printk_needs_cpu(cpu) || | 335 | if (rcu_needs_cpu(cpu, &rcu_delta_jiffies) || |
335 | arch_needs_cpu(cpu)) { | 336 | arch_needs_cpu(cpu) || irq_work_needs_cpu()) { |
336 | next_jiffies = last_jiffies + 1; | 337 | next_jiffies = last_jiffies + 1; |
337 | delta_jiffies = 1; | 338 | delta_jiffies = 1; |
338 | } else { | 339 | } else { |
@@ -553,6 +554,7 @@ void tick_nohz_idle_enter(void) | |||
553 | 554 | ||
554 | local_irq_enable(); | 555 | local_irq_enable(); |
555 | } | 556 | } |
557 | EXPORT_SYMBOL_GPL(tick_nohz_idle_enter); | ||
556 | 558 | ||
557 | /** | 559 | /** |
558 | * tick_nohz_irq_exit - update next tick event from interrupt exit | 560 | * tick_nohz_irq_exit - update next tick event from interrupt exit |
@@ -631,8 +633,11 @@ static void tick_nohz_restart_sched_tick(struct tick_sched *ts, ktime_t now) | |||
631 | 633 | ||
632 | static void tick_nohz_account_idle_ticks(struct tick_sched *ts) | 634 | static void tick_nohz_account_idle_ticks(struct tick_sched *ts) |
633 | { | 635 | { |
634 | #ifndef CONFIG_VIRT_CPU_ACCOUNTING | 636 | #ifndef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE |
635 | unsigned long ticks; | 637 | unsigned long ticks; |
638 | |||
639 | if (vtime_accounting_enabled()) | ||
640 | return; | ||
636 | /* | 641 | /* |
637 | * We stopped the tick in idle. Update process times would miss the | 642 | * We stopped the tick in idle. Update process times would miss the |
638 | * time we slept as update_process_times does only a 1 tick | 643 | * time we slept as update_process_times does only a 1 tick |
@@ -681,6 +686,7 @@ void tick_nohz_idle_exit(void) | |||
681 | 686 | ||
682 | local_irq_enable(); | 687 | local_irq_enable(); |
683 | } | 688 | } |
689 | EXPORT_SYMBOL_GPL(tick_nohz_idle_exit); | ||
684 | 690 | ||
685 | static int tick_nohz_reprogram(struct tick_sched *ts, ktime_t now) | 691 | static int tick_nohz_reprogram(struct tick_sched *ts, ktime_t now) |
686 | { | 692 | { |