lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 17 Feb 2017 11:38:48 -0800 From: Vikas Shivappa <vikas.shivappa@...ux.intel.com> To: vikas.shivappa@...el.com Cc: linux-kernel@...r.kernel.org, x86@...nel.org, hpa@...or.com, tglx@...utronix.de, mingo@...nel.org, peterz@...radead.org, ravi.v.shankar@...el.com, tony.luck@...el.com, fenghua.yu@...el.com, andi.kleen@...el.com, vikas.shivappa@...ux.intel.com Subject: [PATCH 5/5] x86/intel_rdt: hotcpu updates for RDT 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@...ux.intel.com> --- 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
Powered by blists - more mailing lists