This reverts commit e5f03b06dc99348df53118c6ef7b51a8611a7256. Signed-off-by: Thomas Renninger <trenn@xxxxxxx> --- drivers/idle/intel_idle.c | 53 +++++++++++++++++---------------------------- 1 files changed, 20 insertions(+), 33 deletions(-) diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c index e56ae0b..91aff18 100644 --- a/drivers/idle/intel_idle.c +++ b/drivers/idle/intel_idle.c @@ -296,42 +296,33 @@ static void __setup_broadcast_timer(void *arg) clockevents_notify(reason, &cpu); } -static void auto_demotion_disable(void *dummy) -{ - unsigned long long msr_bits; - - rdmsrl(MSR_NHM_SNB_PKG_CST_CFG_CTL, msr_bits); - msr_bits &= ~auto_demotion_disable_flags; - wrmsrl(MSR_NHM_SNB_PKG_CST_CFG_CTL, msr_bits); -} - -static void __intel_idle_notify_handler(void *arg) -{ - if (auto_demotion_disable_flags) - auto_demotion_disable(NULL); - - if (lapic_timer_reliable_states != LAPIC_TIMER_ALWAYS_RELIABLE) - __setup_broadcast_timer((void *)true); -} - -static int setup_intelidle_cpuhp_notify(struct notifier_block *n, +static int setup_broadcast_cpuhp_notify(struct notifier_block *n, unsigned long action, void *hcpu) { int hotcpu = (unsigned long)hcpu; switch (action & 0xf) { case CPU_ONLINE: - smp_call_function_single(hotcpu, __intel_idle_notify_handler, - NULL, 1); + smp_call_function_single(hotcpu, __setup_broadcast_timer, + (void *)true, 1); break; } return NOTIFY_OK; } -static struct notifier_block setup_intelidle_notifier = { - .notifier_call = setup_intelidle_cpuhp_notify, +static struct notifier_block setup_broadcast_notifier = { + .notifier_call = setup_broadcast_cpuhp_notify, }; +static void auto_demotion_disable(void *dummy) +{ + unsigned long long msr_bits; + + rdmsrl(MSR_NHM_SNB_PKG_CST_CFG_CTL, msr_bits); + msr_bits &= ~auto_demotion_disable_flags; + wrmsrl(MSR_NHM_SNB_PKG_CST_CFG_CTL, msr_bits); +} + /* * intel_idle_probe() */ @@ -402,8 +393,10 @@ static int intel_idle_probe(void) if (boot_cpu_has(X86_FEATURE_ARAT)) /* Always Reliable APIC Timer */ lapic_timer_reliable_states = LAPIC_TIMER_ALWAYS_RELIABLE; - else + else { on_each_cpu(__setup_broadcast_timer, (void *)true, 1); + register_cpu_notifier(&setup_broadcast_notifier); + } pr_debug(PREFIX "v" INTEL_IDLE_VERSION " model 0x%X\n", boot_cpu_data.x86_model); @@ -566,10 +559,6 @@ static int __init intel_idle_init(void) return retval; } - if (auto_demotion_disable_flags || lapic_timer_reliable_states != - LAPIC_TIMER_ALWAYS_RELIABLE) - register_cpu_notifier(&setup_intelidle_notifier); - return 0; } @@ -578,12 +567,10 @@ static void __exit intel_idle_exit(void) intel_idle_cpuidle_devices_uninit(); cpuidle_unregister_driver(&intel_idle_driver); - if (lapic_timer_reliable_states != LAPIC_TIMER_ALWAYS_RELIABLE) + if (lapic_timer_reliable_states != LAPIC_TIMER_ALWAYS_RELIABLE) { on_each_cpu(__setup_broadcast_timer, (void *)false, 1); - - if (auto_demotion_disable_flags || lapic_timer_reliable_states != - LAPIC_TIMER_ALWAYS_RELIABLE) - unregister_cpu_notifier(&setup_intelidle_notifier); + unregister_cpu_notifier(&setup_broadcast_notifier); + } return; } -- 1.7.6.1 -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html