[PATCH 5/5] x86/intel_rdt: hotcpu updates for RDT
From: Vikas Shivappa
Date: Fri Feb 17 2017 - 14:41:01 EST
For closid and rmid, change both the per cpu cache and PQR_MSR to be
cleared only when offlining cpu at the respective handlers. The other
places to clear them may not be required and is removed. This can be
done at offlining so that the cache occupancy is not counted soon after
the cpu goes down, rather than waiting to clear it during online cpu.
Signed-off-by: Vikas Shivappa <vikas.shivappa@xxxxxxxxxxxxxxx>
---
arch/x86/events/intel/cqm.c | 10 +++++-----
arch/x86/kernel/cpu/intel_rdt.c | 1 -
2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/arch/x86/events/intel/cqm.c b/arch/x86/events/intel/cqm.c
index 8c00dc0..681e32f 100644
--- a/arch/x86/events/intel/cqm.c
+++ b/arch/x86/events/intel/cqm.c
@@ -1569,13 +1569,8 @@ static inline void cqm_pick_event_reader(int cpu)
static int intel_cqm_cpu_starting(unsigned int cpu)
{
- struct intel_pqr_state *state = &per_cpu(pqr_state, cpu);
struct cpuinfo_x86 *c = &cpu_data(cpu);
- state->rmid = 0;
- state->closid = 0;
- state->rmid_usecnt = 0;
-
WARN_ON(c->x86_cache_max_rmid != cqm_max_rmid);
WARN_ON(c->x86_cache_occ_scale != cqm_l3_scale);
@@ -1585,12 +1580,17 @@ static int intel_cqm_cpu_starting(unsigned int cpu)
static int intel_cqm_cpu_exit(unsigned int cpu)
{
+ struct intel_pqr_state *state = &per_cpu(pqr_state, cpu);
int target;
/* Is @cpu the current cqm reader for this package ? */
if (!cpumask_test_and_clear_cpu(cpu, &cqm_cpumask))
return 0;
+ state->rmid = 0;
+ state->rmid_usecnt = 0;
+ wrmsr(MSR_IA32_PQR_ASSOC, 0, state->closid);
+
/* Find another online reader in this package */
target = cpumask_any_but(topology_core_cpumask(cpu), cpu);
diff --git a/arch/x86/kernel/cpu/intel_rdt.c b/arch/x86/kernel/cpu/intel_rdt.c
index 5a533fe..c8af5d9 100644
--- a/arch/x86/kernel/cpu/intel_rdt.c
+++ b/arch/x86/kernel/cpu/intel_rdt.c
@@ -350,7 +350,6 @@ static int intel_rdt_online_cpu(unsigned int cpu)
domain_add_cpu(cpu, r);
/* The cpu is set in default rdtgroup after online. */
cpumask_set_cpu(cpu, &rdtgroup_default.cpu_mask);
- clear_closid(cpu);
mutex_unlock(&rdtgroup_mutex);
return 0;
--
1.9.1