Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp449806ybl; Wed, 29 Jan 2020 03:35:31 -0800 (PST) X-Google-Smtp-Source: APXvYqzLO5d0pPOeGvIhq6M+0X+23iMJqSKxGgIGFSturNWe3k2Z/KufKBuU5TIMo1qcpEhwnyOo X-Received: by 2002:a54:408f:: with SMTP id i15mr5826666oii.64.1580297731830; Wed, 29 Jan 2020 03:35:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580297731; cv=none; d=google.com; s=arc-20160816; b=xY8iL6gf9bKIRmY8LyibsfyB8HK3wjKyQvNo5p8kcaeg9YQy8DEJIQCavO1aCeElTq MX+4ryJ5eJXmVS/5m6noaK/w+TEWIYqSKt2vJ2vBeVhjvvb0xCraVQ6E09jwOxAGCfxk aeDa4s0lcYMJN89Gd840wbCK44r1VsYTbHmm7A+DBqcCnbUiiRT0cGcTTzF2YAl9fHx1 xRHYw1KT5DjHht8JpXc4CU7gy6AhOIFBSJm0eBWrTLoxM4vqtmMuUW76mZoj0w9yitN8 gSKtJ58tqP2bnB4Jqf3jwiabHKtBJAqza3kZe4M4PghOlJqGX0DgGy0t5Cr2xR0S/lqV yLDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :robot-unsubscribe:robot-id:message-id:mime-version:references :in-reply-to:cc:subject:to:reply-to:from:date; bh=hdzG8qWsA8BBuEF/4bxr3noljE6MosmLwBgHbNR5hRQ=; b=jqY/Y+V3kgbavgSROhGOv0Bd0bbuOHjPuWIb26zgcWdyXwbQy/KCwX1ax2/DSg8IE8 cRKeR3r1apujFbAnHixswDt1WevtRL4lrSuU0ZVovF+efoa2EAcAxlx2OQWdAEUJfMP1 yBm1vgHn66HtRqG8gLBw2WOLWBWqtiiXWBGGU+UN2hxSSAFFLhCIXuiTdl21jmXp9nD5 jb1cLczHDXECi8yaeKi5+4hpk6E1Bd1UDxRKbsGtEphCkWAEk0sBROF7KbZx5733dcDM KcrNC6pfqeOfnGuYiYgZY92ylD7FCTV/ZWY5pE8pY11zX5m/JijfzQSxAGrFxzS5J069 rYKg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x7si955420oia.165.2020.01.29.03.35.19; Wed, 29 Jan 2020 03:35:31 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726793AbgA2LdO (ORCPT + 99 others); Wed, 29 Jan 2020 06:33:14 -0500 Received: from Galois.linutronix.de ([193.142.43.55]:51104 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726679AbgA2LdM (ORCPT ); Wed, 29 Jan 2020 06:33:12 -0500 Received: from [5.158.153.53] (helo=tip-bot2.lab.linutronix.de) by Galois.linutronix.de with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1iwlab-0007kn-Lp; Wed, 29 Jan 2020 12:32:57 +0100 Received: from [127.0.1.1] (localhost [IPv6:::1]) by tip-bot2.lab.linutronix.de (Postfix) with ESMTP id 5153A1C0095; Wed, 29 Jan 2020 12:32:57 +0100 (CET) Date: Wed, 29 Jan 2020 11:32:57 -0000 From: "tip-bot2 for Giovanni Gherdovich" Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: sched/core] x86/intel_pstate: Handle runtime turbo disablement/enablement in frequency invariance Cc: Giovanni Gherdovich , "Peter Zijlstra (Intel)" , Ingo Molnar , "Rafael J. Wysocki" , x86 , LKML In-Reply-To: <20200122151617.531-7-ggherdovich@suse.cz> References: <20200122151617.531-7-ggherdovich@suse.cz> MIME-Version: 1.0 Message-ID: <158029757712.396.8991863522896309415.tip-bot2@tip-bot2> X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Linutronix-Spam-Score: 1.5 X-Linutronix-Spam-Level: + X-Linutronix-Spam-Status: No , 1.5 points, 5.0 required, ALL_TRUSTED=-1,SHORTCIRCUIT=-0.0001,URIBL_DBL_ABUSE_MALW=2.5 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The following commit has been merged into the sched/core branch of tip: Commit-ID: 918229cdd5abb50d8a2edfcd8dc6b6bc53afd765 Gitweb: https://git.kernel.org/tip/918229cdd5abb50d8a2edfcd8dc6b6bc53afd765 Author: Giovanni Gherdovich AuthorDate: Wed, 22 Jan 2020 16:16:17 +01:00 Committer: Ingo Molnar CommitterDate: Tue, 28 Jan 2020 21:37:06 +01:00 x86/intel_pstate: Handle runtime turbo disablement/enablement in frequency invariance On some platforms such as the Dell XPS 13 laptop the firmware disables turbo when the machine is disconnected from AC, and viceversa it enables it again when it's reconnected. In these cases a _PPC ACPI notification is issued. The scheduler needs to know freq_max for frequency-invariant calculations. To account for turbo availability to come and go, record freq_max at boot as if turbo was available and store it in a helper variable. Use a setter function to swap between freq_base and freq_max every time turbo goes off or on. Signed-off-by: Giovanni Gherdovich Signed-off-by: Peter Zijlstra (Intel) Signed-off-by: Ingo Molnar Acked-by: Rafael J. Wysocki Link: https://lkml.kernel.org/r/20200122151617.531-7-ggherdovich@suse.cz --- arch/x86/include/asm/topology.h | 5 +++++ arch/x86/kernel/smpboot.c | 15 ++++++++++----- drivers/cpufreq/intel_pstate.c | 1 + 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/arch/x86/include/asm/topology.h b/arch/x86/include/asm/topology.h index 2ebf7b7..79d8d54 100644 --- a/arch/x86/include/asm/topology.h +++ b/arch/x86/include/asm/topology.h @@ -211,6 +211,11 @@ static inline long arch_scale_freq_capacity(int cpu) extern void arch_scale_freq_tick(void); #define arch_scale_freq_tick arch_scale_freq_tick +extern void arch_set_max_freq_ratio(bool turbo_disabled); +#else +static inline void arch_set_max_freq_ratio(bool turbo_disabled) +{ +} #endif #endif /* _ASM_X86_TOPOLOGY_H */ diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 5f04bf8..467191e 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -1807,8 +1807,15 @@ DEFINE_STATIC_KEY_FALSE(arch_scale_freq_key); static DEFINE_PER_CPU(u64, arch_prev_aperf); static DEFINE_PER_CPU(u64, arch_prev_mperf); +static u64 arch_turbo_freq_ratio = SCHED_CAPACITY_SCALE; static u64 arch_max_freq_ratio = SCHED_CAPACITY_SCALE; +void arch_set_max_freq_ratio(bool turbo_disabled) +{ + arch_max_freq_ratio = turbo_disabled ? SCHED_CAPACITY_SCALE : + arch_turbo_freq_ratio; +} + static bool turbo_disabled(void) { u64 misc_en; @@ -1956,10 +1963,7 @@ static bool core_set_max_freq_ratio(u64 *base_freq, u64 *turbo_freq) static bool intel_set_max_freq_ratio(void) { - u64 base_freq = 1, turbo_freq = 1; - - if (turbo_disabled()) - goto out; + u64 base_freq, turbo_freq; if (slv_set_max_freq_ratio(&base_freq, &turbo_freq)) goto out; @@ -1981,8 +1985,9 @@ static bool intel_set_max_freq_ratio(void) return false; out: - arch_max_freq_ratio = div_u64(turbo_freq * SCHED_CAPACITY_SCALE, + arch_turbo_freq_ratio = div_u64(turbo_freq * SCHED_CAPACITY_SCALE, base_freq); + arch_set_max_freq_ratio(turbo_disabled()); return true; } diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c index d2fa3e9..abbeeca 100644 --- a/drivers/cpufreq/intel_pstate.c +++ b/drivers/cpufreq/intel_pstate.c @@ -922,6 +922,7 @@ static void intel_pstate_update_limits(unsigned int cpu) */ if (global.turbo_disabled_mf != global.turbo_disabled) { global.turbo_disabled_mf = global.turbo_disabled; + arch_set_max_freq_ratio(global.turbo_disabled); for_each_possible_cpu(cpu) intel_pstate_update_max_freq(cpu); } else {