Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp3805708imm; Tue, 29 May 2018 14:08:48 -0700 (PDT) X-Google-Smtp-Source: ADUXVKIow5NgR3YdSOyB2UMbaHPztIDsFpXIofd00KxZBmnti92EYzO0fTPbXr6pCz2pHHSUCgXi X-Received: by 2002:a63:4383:: with SMTP id q125-v6mr34106pga.412.1527628128438; Tue, 29 May 2018 14:08:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527628128; cv=none; d=google.com; s=arc-20160816; b=YxnXVASO2eOgMjDf1onosRcA7S3+f6kZRzGXD/KfJYj3/4VAsgczCCYgiE2uMpLRIo s3mjFkYVfXSmAgCSPX+gEASOXLWomFue51qBS61OkUcm4qWkl4l1Ay8UcFaCH+wJFqyH lPf/p0SEiaDNRIaNa8J6FOpaVqRvOHlgxcih7whwvJqEeBK42EPvGMM7NIL+6BT3J/Mw mgyw/sxtzj1j8iCayyI2h+0yC8ewGcS4QDIUir6nAJPZYk/gMknM/cfsWJ1VISS46wVi 5OlnY86y3Gmcr8VwYhDGmnmCUiqWP/vPYoqgzwY5e0J+NQKW4HLJBgavwGpCmp5DU4N1 ptbg== 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=jaEhcfD2OTe5iF4AnrQ8T18K83WtoNEktcm+uOW3MvM=; b=B41DSx4fA6aKAzeNm8eanjdJqUWllnFskeZEplpR02tiNmTEU7DMzl78oDvIVumd47 rkq16/8+gBFU6Q1gTzhO6juj+t0GtTrWBgzXu7mNDoRDvI6ZvDh7tWkWd9v3g882ki70 LGGSQ+8NXS7m43KUsB2mXYwB2Uk/XQu0FyQboqT35IfkkhkAw9+aSOjshq3X2wChP+m8 JLeA3UTLZRpJJMV02KdpQD2c0waXEHL1WxTZ9CDjv82vVfhNxGxGjVLB1/KQ+2S7thlF xgq4D1A5u6dsGF5T4np6T9gnREKtVKqrMsqDNm19hqGAjC3YbgfBt6BJ42XBVWV/B7G0 1jRw== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l14-v6si9467773pgu.415.2018.05.29.14.08.33; Tue, 29 May 2018 14:08:48 -0700 (PDT) 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S967076AbeE2VGX (ORCPT + 99 others); Tue, 29 May 2018 17:06:23 -0400 Received: from mga14.intel.com ([192.55.52.115]:46453 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S937112AbeE2VBA (ORCPT ); Tue, 29 May 2018 17:01:00 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 29 May 2018 14:00:55 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,457,1520924400"; d="scan'208";a="60127744" Received: from rchatre-s.jf.intel.com ([10.54.70.76]) by orsmga001.jf.intel.com with ESMTP; 29 May 2018 14:00:55 -0700 From: Reinette Chatre To: tglx@linutronix.de, fenghua.yu@intel.com, tony.luck@intel.com, vikas.shivappa@linux.intel.com Cc: gavin.hindman@intel.com, jithu.joseph@intel.com, dave.hansen@intel.com, mingo@redhat.com, hpa@zytor.com, x86@kernel.org, linux-kernel@vger.kernel.org, Reinette Chatre Subject: [PATCH V5 25/38] x86/intel_rdt: Enable entering of pseudo-locksetup mode Date: Tue, 29 May 2018 05:57:50 -0700 Message-Id: <2d019e91959799576299ff6974e0716163aad052.1527593971.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 The user can request entering pseudo-locksetup mode by writing "pseudo-locksetup" to the mode file. Act on this request as well as support switching from a pseudo-locksetup mode (before pseudo-locked mode was entered). It is not supported to modify the mode once pseudo-locked mode has been entered. The schemata reflects the new mode by adding "uninitialized" to all resources. The size resctrl file reports zero for all cache domains in support of the uninitialized nature. Since there are no users of this class of service its allocations can be ignored when searching for appropriate default allocations for new resource groups. Signed-off-by: Reinette Chatre --- arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c | 16 +++++++++---- arch/x86/kernel/cpu/intel_rdt_rdtgroup.c | 36 ++++++++++++++++++++++++++--- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c b/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c index bc79396c5dad..1ed273220ffa 100644 --- a/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c +++ b/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c @@ -156,7 +156,8 @@ int parse_cbm(void *_data, struct rdt_resource *r, struct rdt_domain *d) } if (rdtgroup_cbm_overlaps(r, d, cbm_val, rdtgrp->closid, false)) { - if (rdtgrp->mode == RDT_MODE_EXCLUSIVE) { + if (rdtgrp->mode == RDT_MODE_EXCLUSIVE || + rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { rdt_last_cmd_printf("overlaps with other group\n"); return -EINVAL; } @@ -356,10 +357,15 @@ int rdtgroup_schemata_show(struct kernfs_open_file *of, rdtgrp = rdtgroup_kn_lock_live(of->kn); if (rdtgrp) { - closid = rdtgrp->closid; - for_each_alloc_enabled_rdt_resource(r) { - if (closid < r->num_closid) - show_doms(s, r, closid); + if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { + for_each_alloc_enabled_rdt_resource(r) + seq_printf(s, "%s:uninitialized\n", r->name); + } else { + closid = rdtgrp->closid; + for_each_alloc_enabled_rdt_resource(r) { + if (closid < r->num_closid) + show_doms(s, r, closid); + } } } else { ret = -ENOENT; diff --git a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c index 178990850b03..f0213fa5d630 100644 --- a/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c +++ b/arch/x86/kernel/cpu/intel_rdt_rdtgroup.c @@ -1046,10 +1046,24 @@ static ssize_t rdtgroup_mode_write(struct kernfs_open_file *of, mode = rdtgrp->mode; if ((!strcmp(buf, "shareable") && mode == RDT_MODE_SHAREABLE) || - (!strcmp(buf, "exclusive") && mode == RDT_MODE_EXCLUSIVE)) + (!strcmp(buf, "exclusive") && mode == RDT_MODE_EXCLUSIVE) || + (!strcmp(buf, "pseudo-locksetup") && + mode == RDT_MODE_PSEUDO_LOCKSETUP) || + (!strcmp(buf, "pseudo-locked") && mode == RDT_MODE_PSEUDO_LOCKED)) goto out; + if (mode == RDT_MODE_PSEUDO_LOCKED) { + rdt_last_cmd_printf("cannot change pseudo-locked group\n"); + ret = -EINVAL; + goto out; + } + if (!strcmp(buf, "shareable")) { + if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { + ret = rdtgroup_locksetup_exit(rdtgrp); + if (ret) + goto out; + } rdtgrp->mode = RDT_MODE_SHAREABLE; } else if (!strcmp(buf, "exclusive")) { if (!rdtgroup_mode_test_exclusive(rdtgrp)) { @@ -1057,7 +1071,17 @@ static ssize_t rdtgroup_mode_write(struct kernfs_open_file *of, ret = -EINVAL; goto out; } + if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { + ret = rdtgroup_locksetup_exit(rdtgrp); + if (ret) + goto out; + } rdtgrp->mode = RDT_MODE_EXCLUSIVE; + } else if (!strcmp(buf, "pseudo-locksetup")) { + ret = rdtgroup_locksetup_enter(rdtgrp); + if (ret) + goto out; + rdtgrp->mode = RDT_MODE_PSEUDO_LOCKSETUP; } else { rdt_last_cmd_printf("unknown/unsupported mode\n"); ret = -EINVAL; @@ -1127,8 +1151,12 @@ static int rdtgroup_size_show(struct kernfs_open_file *of, list_for_each_entry(d, &r->domains, list) { if (sep) seq_putc(s, ';'); - cbm = d->ctrl_val[rdtgrp->closid]; - size = rdtgroup_cbm_to_size(r, d, cbm); + if (rdtgrp->mode == RDT_MODE_PSEUDO_LOCKSETUP) { + size = 0; + } else { + cbm = d->ctrl_val[rdtgrp->closid]; + size = rdtgroup_cbm_to_size(r, d, cbm); + } seq_printf(s, "%d=%u", d->id, size); sep = true; } @@ -2230,6 +2258,8 @@ static int rdtgroup_init_alloc(struct rdtgroup *rdtgrp) for (i = 0; i < r->num_closid; i++, ctrl++) { if (closid_allocated(i) && i != closid) { mode = rdtgroup_mode_by_closid(i); + if (mode == RDT_MODE_PSEUDO_LOCKSETUP) + break; used_b |= *ctrl; if (mode == RDT_MODE_SHAREABLE) d->new_ctrl |= *ctrl; -- 2.13.6