From patchwork Thu Mar 14 06:42:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Viresh Kumar X-Patchwork-Id: 160316 Delivered-To: patch@linaro.org Received: by 2002:a02:5cc1:0:0:0:0:0 with SMTP id w62csp15145649jad; Wed, 13 Mar 2019 23:43:54 -0700 (PDT) X-Google-Smtp-Source: APXvYqxWIK5IHefNPTq3K9kxXi/5cXlbEy8Kq3INTR8PJCaxVukjQm1IupOxhTHfvY2c+fBMcz4Y X-Received: by 2002:a62:568e:: with SMTP id h14mr49613632pfj.134.1552545834006; Wed, 13 Mar 2019 23:43:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1552545833; cv=none; d=google.com; s=arc-20160816; b=cG03WJPYuI6DGGUAkBs+FtXixM+8wKHIYWqkE1KFmnNX0gWH20YCCjogXD5Dlfgpdj axgQGB57/7tBkBnnGOKF6fIfPbMFkoQBWPz3TTprMhswqrI1IkKnl250yiB3aVTHbGV3 6EHND8znALrDMlB94RxsCs/DaQa/zPR5WtFLg77kE3BPiDzYMfs4sKj8Rv1zFrtMsVb3 5H6WtRQGgz6pgYRZuCQ4EDIBHBLvc00Yxs2EUBX+NoK6HZiZGNna8w6vEai9nosgBV50 OFEgN/QqRS2/IcrK4Ybzc53Q234+sNP+rNwqJJn7mnvALQYRaYRBf0QOrRv7Jxe6BXaZ tYFQ== 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:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=3Efw/h9eTUmSrpQZIt5XLwN4VOh2Yp4TaPqLXIdGnJE=; b=yDOGaA9rUR9b0LCje1NvVjqli8jNu4sJElah0qOTaxyUnNxiroHGSHhvXqwa6gUzgl VGhHFyyfusVjIOJzAeiegDBfX5eXPvwddsRgQaoTWcGWhPlg67vkoC4TUQy+IRvxaLSv i16IR9HEeHjjtHGkQRNQJY1iEC5+QHXjd4QWsIrV/4l9nGnYHIpsRdqhADvAyJJIxSV4 P+VPCiGOCENcoQko4kzBD547J6s7XPFX0p4cni4qgmu/rdPakESl/Wbk3HRQJJqOMawj 5gzkRTnFl3Rh1LGfX2u7g8Fq2rL8yHo/BRx3OsE7Nh00U2D4CTVs29T3gGAPZsNukXyu /lyA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=VcL7RStD; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v3si12780459plo.147.2019.03.13.23.43.53; Wed, 13 Mar 2019 23:43:53 -0700 (PDT) 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; dkim=pass header.i=@linaro.org header.s=google header.b=VcL7RStD; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727315AbfCNGng (ORCPT + 31 others); Thu, 14 Mar 2019 02:43:36 -0400 Received: from mail-pf1-f194.google.com ([209.85.210.194]:36394 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727277AbfCNGnd (ORCPT ); Thu, 14 Mar 2019 02:43:33 -0400 Received: by mail-pf1-f194.google.com with SMTP id n22so3192217pfa.3 for ; Wed, 13 Mar 2019 23:43:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3Efw/h9eTUmSrpQZIt5XLwN4VOh2Yp4TaPqLXIdGnJE=; b=VcL7RStD7ZUOTVl184RkW56AOC5OcqHevP735305y843u+17laziRgHfgqbGKiwE3q +aFw0iSojIYAqnB9AMwRoWtlmWGH5F3SkUBMLj1yO3rhcyomSDvrEnZkUyckXDAcIZ9i 0oqiWh25f7QEAYxUmF7FllPqrj06OP72PB2vqNEH2HirpWxjftj3Q/kiDbxUpu81X88u 2gf1ssoQwtl5f6YBbkHk4LKoU0MCWPPVt5ahTurryAHhL+C7qfqHj/8MPfH9UrdFV0g4 /TIi3GxmG3J4QV/DggNwDIAMjNe32yGBXN5TRLQX9DppzLWl47iiFN4qSlEAHcPWBRhp COAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3Efw/h9eTUmSrpQZIt5XLwN4VOh2Yp4TaPqLXIdGnJE=; b=tIpMjPNecQ6Y16cm8MckBnyKfS0g/mJe+NNUeJmfNY1CnEYPYxEPgKdICeFlwrM8fC Jsjnfy98IDSXisSQzTp/kcFmpUmXkxjyNON86UJeC77D7z6QYHa4WmO/rxJSWAxmckl0 HemtGnP2cxO37UfxzKMfWSNtnyFoESFdQkB/hTpvhORhGXgjJIllipud/wBvrrhh9Bjs pMx5B4CnJ6cyLBc/3EID6zHwj3GshTJGDG4mDyXwzvSTM8GSlIS4pC9x9UkZOhxq8lno y5vjQ+I2qMRtKlGhGjaLbpVDQYQnmSAR/G9agoA6XXg9Bx3AAhmQJzR2I9A7us3hmfeY Ullw== X-Gm-Message-State: APjAAAUQph8O8di2AEO2iDG6d2TN59ub/Ev7q6YSdBh/wT83yad9mERN woU8062qTNpFEXcPy30a7uxxMA== X-Received: by 2002:a63:6a88:: with SMTP id f130mr43285394pgc.114.1552545812067; Wed, 13 Mar 2019 23:43:32 -0700 (PDT) Received: from localhost ([122.166.134.37]) by smtp.gmail.com with ESMTPSA id q18sm21517128pgv.9.2019.03.13.23.43.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 13 Mar 2019 23:43:31 -0700 (PDT) From: Viresh Kumar To: Rafael Wysocki , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , x86@kernel.org Cc: Viresh Kumar , linux-pm@vger.kernel.org, Vincent Guittot , linux-kernel@vger.kernel.org Subject: [PATCH 5/7] x86/tsc: Update cpufreq transition notifier to handle multiple CPUs Date: Thu, 14 Mar 2019 12:12:51 +0530 Message-Id: <8a27342332bc467242f6ccdb4d4bd4d10f8aa552.1552545525.git.viresh.kumar@linaro.org> X-Mailer: git-send-email 2.21.0.rc0.269.g1a574e7a288b In-Reply-To: References: MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The cpufreq core currently calls the cpufreq transition notifier callback once for each affected CPU. This is going to change soon and the cpufreq core will call the callback only once for each cpufreq policy. The callback must look at the newly added field in struct cpufreq_freqs, "cpus", which contains policy->related_cpus (both online/offline CPUs) and perform per-cpu actions for them if any. This patch updates time_cpufreq_notifier() to use the new "cpus" field, update per-cpu data for all the related CPUs and call set_cyc2ns_scale() for all online related_cpus. Signed-off-by: Viresh Kumar --- arch/x86/kernel/tsc.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) -- 2.21.0.rc0.269.g1a574e7a288b diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 3fae23834069..587a6aa72f38 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -956,28 +956,37 @@ static int time_cpufreq_notifier(struct notifier_block *nb, unsigned long val, void *data) { struct cpufreq_freqs *freq = data; - unsigned long *lpj; - - lpj = &boot_cpu_data.loops_per_jiffy; -#ifdef CONFIG_SMP - if (!(freq->flags & CPUFREQ_CONST_LOOPS)) - lpj = &cpu_data(freq->cpu).loops_per_jiffy; -#endif + bool boot_cpu = !IS_ENABLED(CONFIG_SMP) || freq->flags & CPUFREQ_CONST_LOOPS; + unsigned long lpj; + int cpu; if (!ref_freq) { ref_freq = freq->old; - loops_per_jiffy_ref = *lpj; tsc_khz_ref = tsc_khz; + + if (boot_cpu) + loops_per_jiffy_ref = boot_cpu_data.loops_per_jiffy; + else + loops_per_jiffy_ref = cpu_data(cpumask_first(freq->cpus)).loops_per_jiffy; } + if ((val == CPUFREQ_PRECHANGE && freq->old < freq->new) || (val == CPUFREQ_POSTCHANGE && freq->old > freq->new)) { - *lpj = cpufreq_scale(loops_per_jiffy_ref, ref_freq, freq->new); - + lpj = cpufreq_scale(loops_per_jiffy_ref, ref_freq, freq->new); tsc_khz = cpufreq_scale(tsc_khz_ref, ref_freq, freq->new); + if (!(freq->flags & CPUFREQ_CONST_LOOPS)) mark_tsc_unstable("cpufreq changes"); - set_cyc2ns_scale(tsc_khz, freq->cpu, rdtsc()); + if (boot_cpu) { + boot_cpu_data.loops_per_jiffy = lpj; + } else { + for_each_cpu(cpu, freq->cpus) + cpu_data(cpu).loops_per_jiffy = lpj; + } + + for_each_cpu_and(cpu, freq->cpus, cpu_online_mask) + set_cyc2ns_scale(tsc_khz, cpu, rdtsc()); } return 0;