Received: by 10.223.185.116 with SMTP id b49csp24717wrg; Tue, 13 Feb 2018 15:50:39 -0800 (PST) X-Google-Smtp-Source: AH8x226a46JKZLKnztPPPn3WqguEYbrm881s7cXVIa0tngSW5jUIjd5Di06LpqiilvOl5E8jDVc7 X-Received: by 10.98.134.206 with SMTP id x197mr2851026pfd.172.1518565839291; Tue, 13 Feb 2018 15:50:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518565839; cv=none; d=google.com; s=arc-20160816; b=aSkcgc+OdpRQVZzSu2Gw9FpDqUaeo9qLmtdrOgtVRWRHRYhmUE7x5ubp1NzIOr614I oCtsS8OB3sbBweiFv/ueiJL9wUL0ZJ/9CIC0h3a62QGYNOsilURLgx6P9F/7/HzY/huS sNC8P8RYF953yFogx4esjqqwqhsdt7xk/gj9sRZqG9TsCD5WCympPo7pJyeQw4YAFt7d i1oCKVZvzCq3RcXbZyBMuoqCO5LAFevh6BlQk71gTtOAcCTdZDoB/xDdKSd7tTCBfXxY cP2Y5SFkPPlnyCWgQgfVUgDVgjazUUiEVzswrMmzFyjxS9CZmTqhQKRxfizoX3bcD8HW byfQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=G8WWOyG0s08QR3Vn87QQftliLZfzMoNM1d+MLTTVp4Q=; b=Mef+M/ohvm/qACWox1ruYcu3NzJFgWZuvSdOLYLr0BYpUH+bYtJA1qv44h35HNXSBD ffuIHKKINXhDr6ZP2PUVmfGKSXYfk1OVVM98+ntsfBe7Hc5hldztXCF2tY/+VlN944TN f17vJBaUgihwosRVX8DQQzDkhnH6jFEHZPmqO8lBqCGLJuENtXlnGA1agFr7Hc8DGXpa wKVJhDhPmkJeQ/7DJb++YOIwy2mrA/yXS+QHacO/2j3ZvBwwWTkHZ6Eeu6S7vt3OpDcy MALtckaIrGqwX3qVIVsDmSnO/M+7eaaFYSJJI/OHHFzf5xf339l75AeYL+9Vh2RcK9gI WhwA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v1si3294917pfg.288.2018.02.13.15.50.24; Tue, 13 Feb 2018 15:50:39 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966226AbeBMXtj (ORCPT + 99 others); Tue, 13 Feb 2018 18:49:39 -0500 Received: from mga17.intel.com ([192.55.52.151]:53398 "EHLO mga17.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S966213AbeBMXtg (ORCPT ); Tue, 13 Feb 2018 18:49:36 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Feb 2018 15:49:36 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,509,1511856000"; d="scan'208";a="29822334" Received: from rchatre-s.jf.intel.com ([10.54.70.76]) by fmsmga004.fm.intel.com with ESMTP; 13 Feb 2018 15:49:36 -0800 From: Reinette Chatre To: tglx@linutronix.de, fenghua.yu@intel.com, tony.luck@intel.com Cc: gavin.hindman@intel.com, vikas.shivappa@linux.intel.com, dave.hansen@intel.com, mingo@redhat.com, hpa@zytor.com, x86@kernel.org, linux-kernel@vger.kernel.org, Reinette Chatre Subject: [RFC PATCH V2 12/22] x86/intel_rdt: Support CBM checking from value and character buffer Date: Tue, 13 Feb 2018 07:46:56 -0800 Message-Id: <3148e84c57dcc05c9e79c801fd19824ba69da6c8.1518443616.git.reinette.chatre@intel.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Validity check of capacity bitmask (CBM) is currently only done on character buffer when user writes new schemata to resctrl file. In preparation for support of CBM checking within other areas of the RDT code the CBM validity check is split up to support checking with CBM provided as character buffer as well as the value itself. Signed-off-by: Reinette Chatre --- arch/x86/kernel/cpu/intel_rdt.h | 1 + arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c | 34 ++++++++++++++++++++--------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/arch/x86/kernel/cpu/intel_rdt.h b/arch/x86/kernel/cpu/intel_rdt.h index f0e020686e99..2c4e13252057 100644 --- a/arch/x86/kernel/cpu/intel_rdt.h +++ b/arch/x86/kernel/cpu/intel_rdt.h @@ -442,6 +442,7 @@ struct rdt_domain *get_domain_from_cpu(int cpu, struct rdt_resource *r); int closid_alloc(void); void closid_free(int closid); bool closid_allocated(unsigned int closid); +bool cbm_validate_val(unsigned long val, struct rdt_resource *r); int update_domains(struct rdt_resource *r, int closid); int alloc_rmid(void); void free_rmid(u32 rmid); diff --git a/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c b/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c index 9e1a455e4d9b..4a11aea3ad2c 100644 --- a/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c +++ b/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c @@ -86,17 +86,10 @@ int parse_bw(char *buf, struct rdt_resource *r, struct rdt_domain *d) * are allowed (e.g. FFFFH, 0FF0H, 003CH, etc.). * Additionally Haswell requires at least two bits set. */ -static bool cbm_validate(char *buf, unsigned long *data, struct rdt_resource *r) +bool cbm_validate_val(unsigned long val, struct rdt_resource *r) { - unsigned long first_bit, zero_bit, val; + unsigned long first_bit, zero_bit; unsigned int cbm_len = r->cache.cbm_len; - int ret; - - ret = kstrtoul(buf, 16, &val); - if (ret) { - rdt_last_cmd_printf("non-hex character in mask %s\n", buf); - return false; - } if (val == 0 || val > r->default_ctrl) { rdt_last_cmd_puts("mask out of range\n"); @@ -117,11 +110,32 @@ static bool cbm_validate(char *buf, unsigned long *data, struct rdt_resource *r) return false; } - *data = val; return true; } /* + * Validate CBM as provided in character buffer. If CBM is valid + * true will be returned as well as number representation pointed to by + * @data. If CBM is invalid, return false. + */ +static bool cbm_validate(char *buf, unsigned long *data, struct rdt_resource *r) +{ + unsigned long val; + bool ret; + + if (kstrtoul(buf, 16, &val)) { + rdt_last_cmd_printf("non-hex character in mask %s\n", buf); + return false; + } + + ret = cbm_validate_val(val, r); + if (ret) + *data = val; + + return ret; +} + +/* * Read one cache bit mask (hex). Check that it is valid for the current * resource type. */ -- 2.13.6