From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933512AbdBQTk4 (ORCPT ); Fri, 17 Feb 2017 14:40:56 -0500 Received: from mga06.intel.com ([134.134.136.31]:54222 "EHLO mga06.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755655AbdBQTky (ORCPT ); Fri, 17 Feb 2017 14:40:54 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.35,173,1484035200"; d="scan'208";a="48500979" From: Vikas Shivappa To: vikas.shivappa@intel.com Cc: linux-kernel@vger.kernel.org, x86@kernel.org, hpa@zytor.com, tglx@linutronix.de, mingo@kernel.org, peterz@infradead.org, ravi.v.shankar@intel.com, tony.luck@intel.com, fenghua.yu@intel.com, andi.kleen@intel.com, vikas.shivappa@linux.intel.com Subject: [PATCH 4/5] x86/intel_rdt: Reset the cbm MSR during rmdir Date: Fri, 17 Feb 2017 11:38:47 -0800 Message-Id: <1487360328-6768-5-git-send-email-vikas.shivappa@linux.intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1487360328-6768-1-git-send-email-vikas.shivappa@linux.intel.com> References: <1487360328-6768-1-git-send-email-vikas.shivappa@linux.intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org During rmdir reset the ctrl values to all 1s in the QOS_MSR for the directory's closid. This is done so that that next time when the closid is reused they dont reflect old values. Signed-off-by: Vikas Shivappa --- arch/x86/kernel/cpu/intel_rdt_rdtgroup.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c index 8af04af..9b9565f 100644 --- a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c +++ b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c @@ -780,7 +780,7 @@ static struct dentry *rdt_mount(struct file_system_type *fs_type, return dentry; } -static int reset_all_cbms(struct rdt_resource *r) +static int reset_all_ctrls(struct rdt_resource *r, u32 sclosid, u32 eclosid) { struct msr_param msr_param; cpumask_var_t cpu_mask; @@ -791,8 +791,8 @@ static int reset_all_cbms(struct rdt_resource *r) return -ENOMEM; msr_param.res = r; - msr_param.low = 0; - msr_param.high = r->num_closid; + msr_param.low = sclosid; + msr_param.high = eclosid; /* * Disable resource control for this resource by setting all @@ -802,7 +802,7 @@ static int reset_all_cbms(struct rdt_resource *r) list_for_each_entry(d, &r->domains, list) { cpumask_set_cpu(cpumask_any(&d->cpu_mask), cpu_mask); - for (i = 0; i < r->num_closid; i++) + for (i = sclosid; i < eclosid; i++) d->cbm[i] = r->max_cbm; } cpu = get_cpu(); @@ -896,7 +896,7 @@ static void rdt_kill_sb(struct super_block *sb) /*Put everything back to default values. */ for_each_enabled_rdt_resource(r) - reset_all_cbms(r); + reset_all_ctrls(r, 0, r->num_closid); cdp_disable(); rmdir_all_sub(); static_branch_disable(&rdt_enable_key); @@ -991,6 +991,7 @@ static int rdtgroup_rmdir(struct kernfs_node *kn) { int ret, cpu, closid = rdtgroup_default.closid; struct rdtgroup *rdtgrp; + struct rdt_resource *r; cpumask_var_t tmpmask; if (!zalloc_cpumask_var(&tmpmask, GFP_KERNEL)) @@ -1019,6 +1020,13 @@ static int rdtgroup_rmdir(struct kernfs_node *kn) cpumask_or(tmpmask, tmpmask, &rdtgrp->cpu_mask); rdt_update_closid(tmpmask, NULL); + /* + * Put domain control values back to default for the + * rdtgrp thats being removed. + */ + for_each_enabled_rdt_resource(r) + reset_all_ctrls(r, rdtgrp->closid, rdtgrp->closid + 1); + rdtgrp->flags = RDT_DELETED; closid_free(rdtgrp->closid); list_del(&rdtgrp->rdtgroup_list); -- 1.9.1