aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/processor_idle.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index 807b0df308f1..cc049338e418 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -843,6 +843,15 @@ static int acpi_processor_power_verify(struct acpi_processor *pr)
843 unsigned int i; 843 unsigned int i;
844 unsigned int working = 0; 844 unsigned int working = 0;
845 845
846#ifdef ARCH_APICTIMER_STOPS_ON_C3
847 struct cpuinfo_x86 *c = cpu_data + pr->id;
848 cpumask_t mask = cpumask_of_cpu(pr->id);
849
850 if (c->x86_vendor == X86_VENDOR_INTEL) {
851 on_each_cpu(switch_ipi_to_APIC_timer, &mask, 1, 1);
852 }
853#endif
854
846 for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) { 855 for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) {
847 struct acpi_processor_cx *cx = &pr->power.states[i]; 856 struct acpi_processor_cx *cx = &pr->power.states[i];
848 857
@@ -857,6 +866,12 @@ static int acpi_processor_power_verify(struct acpi_processor *pr)
857 866
858 case ACPI_STATE_C3: 867 case ACPI_STATE_C3:
859 acpi_processor_power_verify_c3(pr, cx); 868 acpi_processor_power_verify_c3(pr, cx);
869#ifdef ARCH_APICTIMER_STOPS_ON_C3
870 if (c->x86_vendor == X86_VENDOR_INTEL) {
871 on_each_cpu(switch_APIC_timer_to_ipi,
872 &mask, 1, 1);
873 }
874#endif
860 break; 875 break;
861 } 876 }
862 877