Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933662AbcCNEtI (ORCPT ); Mon, 14 Mar 2016 00:49:08 -0400 Received: from mail.kernel.org ([198.145.29.136]:59832 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933278AbcCNEsX (ORCPT ); Mon, 14 Mar 2016 00:48:23 -0400 From: Andy Lutomirski To: len.brown@intel.com Cc: "linux-kernel@vger.kernel.org" , Andy Lutomirski Subject: [PATCH 1/4] intel_idle: Consolidate auto-promotion/auto-demotion fixups Date: Sun, 13 Mar 2016 21:48:10 -0700 Message-Id: <680e5297faf9d7dbd0a91babb7e14f08055514dd.1457930807.git.luto@kernel.org> X-Mailer: git-send-email 2.5.0 In-Reply-To: References: <1A7043D5F58CCB44A599DFD55ED4C94846A12FBC@fmsmsx115.amr.corp.intel.com> In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2343 Lines: 78 This eliminates some duplicate code and will make it easier add fixup calls in places where they're currently missing. Signed-off-by: Andy Lutomirski --- drivers/idle/intel_idle.c | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c index cd4510a63375..32b3e6049994 100644 --- a/drivers/idle/intel_idle.c +++ b/drivers/idle/intel_idle.c @@ -810,21 +810,21 @@ static struct notifier_block cpu_hotplug_notifier = { .notifier_call = cpu_hotplug_notify, }; -static void auto_demotion_disable(void *dummy) +static void fix_this_cpu(void *dummy) { unsigned long long msr_bits; - rdmsrl(MSR_NHM_SNB_PKG_CST_CFG_CTL, msr_bits); - msr_bits &= ~(icpu->auto_demotion_disable_flags); - wrmsrl(MSR_NHM_SNB_PKG_CST_CFG_CTL, msr_bits); -} -static void c1e_promotion_disable(void *dummy) -{ - unsigned long long msr_bits; + if (icpu->auto_demotion_disable_flags) { + rdmsrl(MSR_NHM_SNB_PKG_CST_CFG_CTL, msr_bits); + msr_bits &= ~(icpu->auto_demotion_disable_flags); + wrmsrl(MSR_NHM_SNB_PKG_CST_CFG_CTL, msr_bits); + } - rdmsrl(MSR_IA32_POWER_CTL, msr_bits); - msr_bits &= ~0x2; - wrmsrl(MSR_IA32_POWER_CTL, msr_bits); + if (icpu->disable_promotion_to_c1e) { + rdmsrl(MSR_IA32_POWER_CTL, msr_bits); + msr_bits &= ~0x2; + wrmsrl(MSR_IA32_POWER_CTL, msr_bits); + } } static const struct idle_cpu idle_cpu_nehalem = { @@ -1074,16 +1074,12 @@ static int __init intel_idle_cpuidle_driver_init(void) drv->state_count += 1; } - if (icpu->auto_demotion_disable_flags) - on_each_cpu(auto_demotion_disable, NULL, 1); - if (icpu->byt_auto_demotion_disable_flag) { wrmsrl(MSR_CC6_DEMOTION_POLICY_CONFIG, 0); wrmsrl(MSR_MC6_DEMOTION_POLICY_CONFIG, 0); } - if (icpu->disable_promotion_to_c1e) /* each-cpu is redundant */ - on_each_cpu(c1e_promotion_disable, NULL, 1); + on_each_cpu(fix_this_cpu, NULL, 1); return 0; } @@ -1108,11 +1104,7 @@ static int intel_idle_cpu_init(int cpu) return -EIO; } - if (icpu->auto_demotion_disable_flags) - smp_call_function_single(cpu, auto_demotion_disable, NULL, 1); - - if (icpu->disable_promotion_to_c1e) - smp_call_function_single(cpu, c1e_promotion_disable, NULL, 1); + smp_call_function_single(cpu, fix_this_cpu, NULL, 1); return 0; } -- 2.5.0