From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934780AbdBQToN (ORCPT ); Fri, 17 Feb 2017 14:44:13 -0500 Received: from mga06.intel.com ([134.134.136.31]:39825 "EHLO mga06.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932545AbdBQToL (ORCPT ); Fri, 17 Feb 2017 14:44:11 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.35,173,1484035200"; d="scan'208";a="48500953" 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 2/5] x86/intel_rdt: Improvements to parsing schemata Date: Fri, 17 Feb 2017 11:38:45 -0800 Message-Id: <1487360328-6768-3-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 The schemata file requires all RDT (Resource director technology) resources be entered in the same order they are shown in the root schemata file. Hence remove the looping through all resources while parsing each schemata and get the next enabled resource after processing a resource. Signed-off-by: Vikas Shivappa --- arch/x86/kernel/cpu/intel_rdt_schemata.c | 40 ++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/arch/x86/kernel/cpu/intel_rdt_schemata.c b/arch/x86/kernel/cpu/intel_rdt_schemata.c index 14ba504..64b43b1 100644 --- a/arch/x86/kernel/cpu/intel_rdt_schemata.c +++ b/arch/x86/kernel/cpu/intel_rdt_schemata.c @@ -138,6 +138,27 @@ static int update_domains(struct rdt_resource *r, int closid) return 0; } +/* + * Parameter r must be NULL or pointing to + * a valid rdt_resource_all entry. + * returns next enabled RDT resource. + */ +static inline struct rdt_resource* +get_next_enabled_rdt_resource(struct rdt_resource *r) +{ + struct rdt_resource *it = r; + + if (!it) + it = rdt_resources_all; + else + it++; + for (; it < rdt_resources_all + RDT_NUM_RESOURCES; it++) + if (it->enabled) + return it; + + return NULL; +} + ssize_t rdtgroup_schemata_write(struct kernfs_open_file *of, char *buf, size_t nbytes, loff_t off) { @@ -171,22 +192,21 @@ ssize_t rdtgroup_schemata_write(struct kernfs_open_file *of, r->num_tmp_cbms = 0; } + r = NULL; while ((tok = strsep(&buf, "\n")) != NULL) { resname = strsep(&tok, ":"); if (!tok) { ret = -EINVAL; goto out; } - for_each_enabled_rdt_resource(r) { - if (!strcmp(resname, r->name) && - closid < r->num_closid) { - ret = parse_line(tok, r); - if (ret) - goto out; - break; - } - } - if (!r->name) { + + r = get_next_enabled_rdt_resource(r); + + if (r && !strcmp(resname, r->name)) { + ret = parse_line(tok, r); + if (ret) + goto out; + } else { ret = -EINVAL; goto out; } -- 1.9.1