From: tip-bot for Fenghua Yu <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: tglx@linutronix.de, vikas.shivappa@linux.intel.com,
fenghua.yu@intel.com, linux-kernel@vger.kernel.org,
mingo@kernel.org, hpa@zytor.com
Subject: [tip:x86/cache] x86/intel_rdt: Hot cpu support for Cache Allocation
Date: Fri, 18 Dec 2015 13:36:11 -0800 [thread overview]
Message-ID: <tip-cf0978cd31053d58c99ab74e613147f86ecd1724@git.kernel.org> (raw)
In-Reply-To: <1450392376-6397-9-git-send-email-fenghua.yu@intel.com>
Commit-ID: cf0978cd31053d58c99ab74e613147f86ecd1724
Gitweb: http://git.kernel.org/tip/cf0978cd31053d58c99ab74e613147f86ecd1724
Author: Fenghua Yu <fenghua.yu@intel.com>
AuthorDate: Thu, 17 Dec 2015 14:46:13 -0800
Committer: H. Peter Anvin <hpa@linux.intel.com>
CommitDate: Fri, 18 Dec 2015 13:17:56 -0800
x86/intel_rdt: Hot cpu support for Cache Allocation
From: Vikas Shivappa <vikas.shivappa@linux.intel.com>
This patch adds hot plug cpu support for Intel Cache allocation. Support
includes updating the cache bitmask MSRs IA32_L3_QOS_n when a new CPU
package comes online or goes offline. The IA32_L3_QOS_n MSRs are one per
Class of service on each CPU package. The new package's MSRs are
synchronized with the values of existing MSRs. Also the software cache
for IA32_PQR_ASSOC MSRs are reset during hot cpu notifications.
Signed-off-by: Vikas Shivappa <vikas.shivappa@linux.intel.com>
Link: http://lkml.kernel.org/r/1450392376-6397-9-git-send-email-fenghua.yu@intel.com
Signed-off-by: Fenghua Yu <fenghua.yu@intel.com>
---
arch/x86/kernel/cpu/intel_rdt.c | 76 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 76 insertions(+)
diff --git a/arch/x86/kernel/cpu/intel_rdt.c b/arch/x86/kernel/cpu/intel_rdt.c
index 8379df8..31f8588 100644
--- a/arch/x86/kernel/cpu/intel_rdt.c
+++ b/arch/x86/kernel/cpu/intel_rdt.c
@@ -24,6 +24,7 @@
#include <linux/slab.h>
#include <linux/err.h>
+#include <linux/cpu.h>
#include <linux/sched.h>
#include <asm/pqr_common.h>
#include <asm/intel_rdt.h>
@@ -234,6 +235,75 @@ static inline bool rdt_cpumask_update(int cpu)
return false;
}
+/*
+ * cbm_update_msrs() - Updates all the existing IA32_L3_MASK_n MSRs
+ * which are one per CLOSid on the current package.
+ */
+static void cbm_update_msrs(void *dummy)
+{
+ int maxid = boot_cpu_data.x86_cache_max_closid;
+ struct rdt_remote_data info;
+ unsigned int i;
+
+ for (i = 0; i < maxid; i++) {
+ if (cctable[i].clos_refcnt) {
+ info.msr = CBM_FROM_INDEX(i);
+ info.val = cctable[i].l3_cbm;
+ msr_cpu_update(&info);
+ }
+ }
+}
+
+static inline void intel_rdt_cpu_start(int cpu)
+{
+ struct intel_pqr_state *state = &per_cpu(pqr_state, cpu);
+
+ state->closid = 0;
+ mutex_lock(&rdt_group_mutex);
+ if (rdt_cpumask_update(cpu))
+ smp_call_function_single(cpu, cbm_update_msrs, NULL, 1);
+ mutex_unlock(&rdt_group_mutex);
+}
+
+static void intel_rdt_cpu_exit(unsigned int cpu)
+{
+ int i;
+
+ mutex_lock(&rdt_group_mutex);
+ if (!cpumask_test_and_clear_cpu(cpu, &rdt_cpumask)) {
+ mutex_unlock(&rdt_group_mutex);
+ return;
+ }
+
+ cpumask_and(&tmp_cpumask, topology_core_cpumask(cpu), cpu_online_mask);
+ cpumask_clear_cpu(cpu, &tmp_cpumask);
+ i = cpumask_any(&tmp_cpumask);
+
+ if (i < nr_cpu_ids)
+ cpumask_set_cpu(i, &rdt_cpumask);
+ mutex_unlock(&rdt_group_mutex);
+}
+
+static int intel_rdt_cpu_notifier(struct notifier_block *nb,
+ unsigned long action, void *hcpu)
+{
+ unsigned int cpu = (unsigned long)hcpu;
+
+ switch (action) {
+ case CPU_DOWN_FAILED:
+ case CPU_ONLINE:
+ intel_rdt_cpu_start(cpu);
+ break;
+ case CPU_DOWN_PREPARE:
+ intel_rdt_cpu_exit(cpu);
+ break;
+ default:
+ break;
+ }
+
+ return NOTIFY_OK;
+}
+
static int __init intel_rdt_late_init(void)
{
struct cpuinfo_x86 *c = &boot_cpu_data;
@@ -261,9 +331,15 @@ static int __init intel_rdt_late_init(void)
goto out_err;
}
+ cpu_notifier_register_begin();
+
for_each_online_cpu(i)
rdt_cpumask_update(i);
+ __hotcpu_notifier(intel_rdt_cpu_notifier, 0);
+
+ cpu_notifier_register_done();
+
static_key_slow_inc(&rdt_enable_key);
pr_info("Intel cache allocation enabled\n");
out_err:
next prev parent reply other threads:[~2015-12-18 21:36 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-17 22:46 [PATCH V16 00/11] x86: Intel Cache Allocation Technology Support Fenghua Yu
2015-12-17 22:46 ` [PATCH V16 01/11] x86/intel_cqm: Modify hot cpu notification handling Fenghua Yu
2015-12-18 21:33 ` [tip:x86/cache] " tip-bot for Fenghua Yu
2015-12-17 22:46 ` [PATCH V16 02/11] x86/intel_rapl: " Fenghua Yu
2015-12-18 21:34 ` [tip:x86/cache] " tip-bot for Fenghua Yu
2015-12-17 22:46 ` [PATCH V16 03/11] x86/intel_rdt: Cache Allocation documentation Fenghua Yu
2015-12-18 21:34 ` [tip:x86/cache] " tip-bot for Fenghua Yu
2015-12-17 22:46 ` [PATCH V16 04/11] x86/intel_rdt: Add support for Cache Allocation detection Fenghua Yu
2015-12-18 21:34 ` [tip:x86/cache] " tip-bot for Fenghua Yu
2015-12-17 22:46 ` [PATCH V16 05/11] x86/intel_rdt: Add Class of service management Fenghua Yu
2015-12-18 21:35 ` [tip:x86/cache] " tip-bot for Fenghua Yu
2015-12-17 22:46 ` [PATCH V16 06/11] x86/intel_rdt: Add L3 cache capacity bitmask management Fenghua Yu
2015-12-18 21:35 ` [tip:x86/cache] " tip-bot for Fenghua Yu
2015-12-17 22:46 ` [PATCH V16 07/11] x86/intel_rdt: Implement scheduling support for Intel RDT Fenghua Yu
2015-12-18 21:35 ` [tip:x86/cache] " tip-bot for Fenghua Yu
2015-12-17 22:46 ` [PATCH V16 08/11] x86/intel_rdt: Hot cpu support for Cache Allocation Fenghua Yu
2015-12-18 21:36 ` tip-bot for Fenghua Yu [this message]
2015-12-17 22:46 ` [PATCH V16 09/11] x86/intel_rdt: Intel haswell Cache Allocation enumeration Fenghua Yu
2015-12-18 21:36 ` [tip:x86/cache] " tip-bot for Fenghua Yu
2015-12-17 22:46 ` [PATCH V16 10/11] x86,cgroup/intel_rdt : Add intel_rdt cgroup documentation Fenghua Yu
2015-12-18 21:36 ` [tip:x86/cache] " tip-bot for Fenghua Yu
2015-12-17 22:46 ` [PATCH V16 11/11] x86,cgroup/intel_rdt : Add a cgroup interface to manage Intel cache allocation Fenghua Yu
2015-12-18 21:37 ` [tip:x86/cache] " tip-bot for Fenghua Yu
2015-12-19 10:42 ` [PATCH V16 11/11] " Thomas Gleixner
2015-12-20 0:57 ` Marcelo Tosatti
2015-12-21 13:44 ` Thomas Gleixner
2015-12-21 15:48 ` Luiz Capitulino
2015-12-21 17:05 ` Marcelo Tosatti
2016-01-02 22:53 ` Richard Weinberger
2016-01-04 21:44 ` Yu, Fenghua
2016-01-04 21:47 ` Richard Weinberger
2015-12-18 17:45 ` [PATCH V16 00/11] x86: Intel Cache Allocation Technology Support Christoph Lameter
2015-12-18 20:49 ` Marcelo Tosatti
2015-12-21 12:53 ` Christoph Lameter
2015-12-21 15:55 ` Luiz Capitulino
2015-12-23 15:50 ` Tejun Heo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tip-cf0978cd31053d58c99ab74e613147f86ecd1724@git.kernel.org \
--to=tipbot@zytor.com \
--cc=fenghua.yu@intel.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=tglx@linutronix.de \
--cc=vikas.shivappa@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.