Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934668AbdC3TF1 (ORCPT ); Thu, 30 Mar 2017 15:05:27 -0400 Received: from mga11.intel.com ([192.55.52.93]:40694 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934299AbdC3TFZ (ORCPT ); Thu, 30 Mar 2017 15:05:25 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,248,1486454400"; d="scan'208";a="72002159" Date: Thu, 30 Mar 2017 12:05:49 -0700 (PDT) From: Shivappa Vikas X-X-Sender: vikas@vshiva-Udesk To: Thomas Gleixner cc: Vikas Shivappa , vikas.shivappa@intel.com, linux-kernel@vger.kernel.org, x86@kernel.org, hpa@zytor.com, mingo@kernel.org, peterz@infradead.org, ravi.v.shankar@intel.com, tony.luck@intel.com, fenghua.yu@intel.com, andi.kleen@intel.com Subject: Re: [PATCH 7/8] x86/intel_rdt: schemata file support for MBA prepare\ In-Reply-To: Message-ID: References: <1487361535-9727-1-git-send-email-vikas.shivappa@linux.intel.com> <1487361535-9727-8-git-send-email-vikas.shivappa@linux.intel.com> User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3211 Lines: 100 On Wed, 1 Mar 2017, Thomas Gleixner wrote: > On Fri, 17 Feb 2017, Vikas Shivappa wrote: > > Subject: x86/intel_rdt: schemata file support for MBA prepare > > I have no idea what MBA prepare is. Is that yet another variant aside of > MBE? > >> Add support to introduce generic APIs for control validation and writing >> QOS_MSRs for RDT resources. The control validation api is meant to >> validate the control values like cache bit mask for CAT and memory b/w >> percentage for MBA. A resource generic display format is also added and >> used for the resources depending on whether its displayed in >> hex/decimal. > > The usual unpenetratable mess of random sentences lumped together. > >> diff --git a/arch/x86/include/asm/intel_rdt.h b/arch/x86/include/asm/intel_rdt.h >> index 24de64c..8748b0d 100644 >> --- a/arch/x86/include/asm/intel_rdt.h >> +++ b/arch/x86/include/asm/intel_rdt.h >> @@ -77,6 +77,9 @@ struct rftype { >> * @default_ctrl: Specifies default cache cbm or mem b/w percent. >> * @min_cbm_bits: Minimum number of consecutive bits to be set >> * in a cache bit mask >> + * @format_str: Per resource format string to show domain val > > Can you please spell out words in comments instead of using random > abbreviations just as you see fit? > >> + * @parse_ctrlval: Per resource API to parse the ctrl values > > That's not an API. That's a function pointer. > >> + * @msr_update: API to update QOS MSRs > > Ditto. > >> * @info_files: resctrl info files for the resource >> * @infofiles_len: Number of info files >> * @max_delay: Max throttle delay. Delay is the hardware >> @@ -105,6 +108,9 @@ struct rdt_resource { >> int cbm_len; >> int min_cbm_bits; >> u32 default_ctrl; >> + const char *format_str; >> + int (*parse_ctrlval) (char *buf, struct rdt_resource *r); >> + void (*msr_update) (void *a1, void *a2, struct rdt_resource *r); > > void *a1, *a2? Dammit, both implementations (CAT and MBA) use the same > types. This just avoids type safety which does not magically come back by > your completely nonsensical typecasts inside the callback implementations. > >> +void cqm_wrmsr(void *a1, void *a2, struct rdt_resource *r) > > And this is global because it's only used in this file, right? > >> +{ >> + struct rdt_domain *d = (struct rdt_domain *)a2; >> + struct msr_param *m = (struct msr_param *)a1; > > Oh well...... > >> + int i; >> + >> + for (i = m->low; i < m->high; i++) { >> + int idx = cbm_idx(r, i); >> + >> + wrmsrl(r->msr_base + idx, d->ctrl_val[i]); >> + } >> +} > >> -static bool cbm_validate(unsigned long var, struct rdt_resource *r) >> +static int cbm_validate(char *buf, unsigned long *data, struct rdt_resource *r) >> { >> - unsigned long first_bit, zero_bit; >> + unsigned long first_bit, zero_bit, var; >> + int ret; >> + >> + ret = kstrtoul(buf, 16, &var); >> + if (ret) >> + return ret; >> >> if (var == 0 || var > r->default_ctrl) >> - return false; >> + return -EINVAL; > > So you change this function and the whole call chain to return either > -EINVAL or 0 instead of false/true. > > And then you treat the integer return value as boolean on the call site > again: Will fix wrt all the comments. Thanks, Vikas