From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752817AbdKIKp0 (ORCPT ); Thu, 9 Nov 2017 05:45:26 -0500 Received: from m97138.mail.qiye.163.com ([220.181.97.138]:57203 "EHLO m97138.mail.qiye.163.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751020AbdKIKpY (ORCPT ); Thu, 9 Nov 2017 05:45:24 -0500 X-Greylist: delayed 376 seconds by postgrey-1.27 at vger.kernel.org; Thu, 09 Nov 2017 05:45:23 EST From: WANG Chao To: linux-kernel@vger.kernel.org Cc: Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , Vikas Shivappa , "Rafael J. Wysocki" , Kate Stewart , Len Brown , Greg Kroah-Hartman , Philippe Ombredanne , Mathias Krause , x86@kernel.org, stable@kernel.org Subject: [PATCH] x86: use cpufreq_quick_get() for /proc/cpuinfo "cpu MHz" again Date: Thu, 9 Nov 2017 18:38:14 +0800 Message-Id: <20171109103814.70688-1-chao.wang@ucloud.cn> X-Mailer: git-send-email 2.15.0 X-CM-TRANSID: u+CowABXHA4lMARaKmQNAA--.2S3 X-Coremail-Antispam: 1Uf129KBjDUn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73 VFW2AGmfu7bjvjm3AaLaJ3UbIYCTnIWIevJa73UjIFyTuYvjfUkWv3UUUUU X-Originating-IP: [106.38.57.250] X-CM-SenderInfo: pfkd0hpzdqwq5xfo03fgof0/1tbiZwWLVFlZthA3FQAAs5 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit 941f5f0f6ef5 (x86: CPU: Fix up "cpu MHz" in /proc/cpuinfo) caused a serious performance issue when reading from /proc/cpuinfo on system with aperfmperf. For each cpu, arch_freq_get_on_cpu() sleeps 20ms to get its frequency. On a system with 64 cpus, it takes 1.5s to finish running `cat /proc/cpuinfo`, while it previously was done in 15ms. Some programs use /proc/cpuinfo during startup or runtime, eg. QEMU. This patch will restore the previous behavior and let user space happy. Fixes: 941f5f0f6ef5 (x86: CPU: Fix up "cpu MHz" in /proc/cpuinfo) Cc: stable@kernel.org # 4.13 Signed-off-by: WANG Chao --- arch/x86/kernel/cpu/Makefile | 2 +- arch/x86/kernel/cpu/proc.c | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/arch/x86/kernel/cpu/Makefile b/arch/x86/kernel/cpu/Makefile index 236999c54edc..c60922a66385 100644 --- a/arch/x86/kernel/cpu/Makefile +++ b/arch/x86/kernel/cpu/Makefile @@ -22,7 +22,7 @@ obj-y += common.o obj-y += rdrand.o obj-y += match.o obj-y += bugs.o -obj-y += aperfmperf.o +obj-$(CONFIG_CPU_FREQ) += aperfmperf.o obj-$(CONFIG_PROC_FS) += proc.o obj-$(CONFIG_X86_FEATURE_NAMES) += capflags.o powerflags.o diff --git a/arch/x86/kernel/cpu/proc.c b/arch/x86/kernel/cpu/proc.c index 4378a729b933..6b7e17bf0b71 100644 --- a/arch/x86/kernel/cpu/proc.c +++ b/arch/x86/kernel/cpu/proc.c @@ -78,10 +78,8 @@ static int show_cpuinfo(struct seq_file *m, void *v) seq_printf(m, "microcode\t: 0x%x\n", c->microcode); if (cpu_has(c, X86_FEATURE_TSC)) { - unsigned int freq = arch_freq_get_on_cpu(cpu); + unsigned int freq = cpufreq_quick_get(cpu); - if (!freq) - freq = cpufreq_quick_get(cpu); if (!freq) freq = cpu_khz; seq_printf(m, "cpu MHz\t\t: %u.%03u\n", -- 2.15.0