diff options
| -rw-r--r-- | arch/s390/kernel/vtime.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/s390/kernel/vtime.c b/arch/s390/kernel/vtime.c index 56c8687b29b..7eff9b7347c 100644 --- a/arch/s390/kernel/vtime.c +++ b/arch/s390/kernel/vtime.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <linux/kernel_stat.h> | 19 | #include <linux/kernel_stat.h> |
| 20 | #include <linux/rcupdate.h> | 20 | #include <linux/rcupdate.h> |
| 21 | #include <linux/posix-timers.h> | 21 | #include <linux/posix-timers.h> |
| 22 | #include <linux/cpu.h> | ||
| 22 | 23 | ||
| 23 | #include <asm/s390_ext.h> | 24 | #include <asm/s390_ext.h> |
| 24 | #include <asm/timer.h> | 25 | #include <asm/timer.h> |
| @@ -566,6 +567,23 @@ void init_cpu_vtimer(void) | |||
| 566 | __ctl_set_bit(0,10); | 567 | __ctl_set_bit(0,10); |
| 567 | } | 568 | } |
| 568 | 569 | ||
| 570 | static int __cpuinit s390_nohz_notify(struct notifier_block *self, | ||
| 571 | unsigned long action, void *hcpu) | ||
| 572 | { | ||
| 573 | struct s390_idle_data *idle; | ||
| 574 | long cpu = (long) hcpu; | ||
| 575 | |||
| 576 | idle = &per_cpu(s390_idle, cpu); | ||
| 577 | switch (action) { | ||
| 578 | case CPU_DYING: | ||
| 579 | case CPU_DYING_FROZEN: | ||
| 580 | idle->nohz_delay = 0; | ||
| 581 | default: | ||
| 582 | break; | ||
| 583 | } | ||
| 584 | return NOTIFY_OK; | ||
| 585 | } | ||
| 586 | |||
| 569 | void __init vtime_init(void) | 587 | void __init vtime_init(void) |
| 570 | { | 588 | { |
| 571 | /* request the cpu timer external interrupt */ | 589 | /* request the cpu timer external interrupt */ |
| @@ -574,5 +592,6 @@ void __init vtime_init(void) | |||
| 574 | 592 | ||
| 575 | /* Enable cpu timer interrupts on the boot cpu. */ | 593 | /* Enable cpu timer interrupts on the boot cpu. */ |
| 576 | init_cpu_vtimer(); | 594 | init_cpu_vtimer(); |
| 595 | cpu_notifier(s390_nohz_notify, 0); | ||
| 577 | } | 596 | } |
| 578 | 597 | ||
