Received: by 10.192.165.148 with SMTP id m20csp1027254imm; Wed, 25 Apr 2018 11:21:26 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+lHmDDTm8ZUADrtTHghZCS/rncAdSkWkTOa4Bmbez9CErzU8ly0EDPkARJ5fZ8s86mB3le X-Received: by 2002:a17:902:be08:: with SMTP id r8-v6mr29687589pls.289.1524680486674; Wed, 25 Apr 2018 11:21:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524680486; cv=none; d=google.com; s=arc-20160816; b=g4605foMYje1s3kZtuX7FPyLNEiTbJ6MLgjQijI0YjXLxt83MTy8sJvektcbpK7DfC UdywJHRjfVzfhc3YVdw42u82HaHQ/32XKR42RYwPCOIE9/XMZfONQx4VNbifmWVkhm4W Kw7wMuzQQQolh/wHegX3OMXPsyy3BBzgINUDkSkI2k+UFv+BnpeJ2BXbcsk9aWTp+WKg Zm7Zgat6aVTkJjrPUK5IihuXRJb7p7q4TfIlTdIFna5Y1PQmHeumG5ARAGRN1s5zqMFE h0nRyrjqJrHmh5us5qmdfp49CR+SvmRaYtzys1N2s/HqNMfBsGExgMk+j2ng/MMVj5ki 8Vng== 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=N/ZEqNEcEmpk6OsLiMmn/P6cE73dnyeQcApZGV1UVcE=; b=eAkLAgAspsZbYphZya95FsLvPahiy/tH4+PnLhV2x2UngHl9+kKKeb1OTskeCmgILd tHkQ7daRxzgasWGbHHszx81hCypIAQMOaM9XoFA9GSeCax+I4Lpoq+6NnFgmdDXETFA+ NxJvdOwsxFbq6BwiIZNVVhx5wFKMmvioFDLjmTXb7ORN+GGc+jc4dMNfTn147Q/sakuM R2Tk1yd5m6qc4EkEbJhc2yzzhJnUiGr5zUhR05td9oHglVzdhu2Sy2g1xVLrFXxkqD5+ gQgNjHw0I+0eCAuWRZ6u1ENlzHGrh7dClHbtOyCOZuGY3s3mUKeGjAFSbJgdj9ngix5m h0mQ== 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 l3si3384371pfa.368.2018.04.25.11.21.12; Wed, 25 Apr 2018 11:21:26 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756319AbeDYSTi (ORCPT + 99 others); Wed, 25 Apr 2018 14:19:38 -0400 Received: from mga02.intel.com ([134.134.136.20]:41722 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932228AbeDYSMs (ORCPT ); Wed, 25 Apr 2018 14:12:48 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 25 Apr 2018 11:12:48 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,327,1520924400"; d="scan'208";a="35243732" Received: from rchatre-s.jf.intel.com ([10.54.70.76]) by fmsmga008.fm.intel.com with ESMTP; 25 Apr 2018 11:12:47 -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 V3 25/39] x86/intel_rdt: Enable entering of pseudo-locksetup mode Date: Wed, 25 Apr 2018 03:10:01 -0700 Message-Id: <78909129eda403ff17bf422c7eda285d3fc6ef00.1524649902.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 f6740218a751..0cc9f8a1f44c 100644 --- a/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c +++ b/arch/x86/kernel/cpu/intel_rdt_ctrlmondata.c @@ -155,7 +155,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; } @@ -342,10 +343,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 01ffa4641bf8..bdcd178f5c41 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_puts(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; } @@ -2197,6 +2225,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