When a schemata file is changed, user enters control values for all domains and all resources in the below format (Consider L3 and L2 resources):
L3:<cache_id0>=<cbm>;<cache_id1>=<cbm>;... L2:<cache_id0>=<cbm>;<cache_id1>=<cbm>;... Return error as soon as we detect a resource not entering all domain values in schemata rather than waiting till we parse all resources because the entire change is atomic. Also this avoids looping all enabled resources again. Signed-off-by: Vikas Shivappa <vikas.shiva...@linux.intel.com> --- arch/x86/kernel/cpu/intel_rdt_schemata.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/arch/x86/kernel/cpu/intel_rdt_schemata.c b/arch/x86/kernel/cpu/intel_rdt_schemata.c index 64b43b1..527d042 100644 --- a/arch/x86/kernel/cpu/intel_rdt_schemata.c +++ b/arch/x86/kernel/cpu/intel_rdt_schemata.c @@ -94,6 +94,10 @@ static int parse_line(char *line, struct rdt_resource *r) return -EINVAL; } + /* Incorrect number of domains in the line */ + if (r->num_tmp_cbms != r->num_domains) + return -EINVAL; + /* Any garbage at the end of the line? */ if (line && line[0]) return -EINVAL; @@ -212,14 +216,6 @@ ssize_t rdtgroup_schemata_write(struct kernfs_open_file *of, } } - /* Did the parser find all the masks we need? */ - for_each_enabled_rdt_resource(r) { - if (r->num_tmp_cbms != r->num_domains) { - ret = -EINVAL; - goto out; - } - } - for_each_enabled_rdt_resource(r) { ret = update_domains(r, closid); if (ret) -- 1.9.1