Received: by 2002:ab2:715a:0:b0:1fd:c064:50c with SMTP id l26csp35763lqm; Mon, 10 Jun 2024 11:51:40 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCXW0dpeMUmbs97icxMLjG8sJ/gzj1DfL2iL/b2mNo22Bdr0WndFyEcYQwd5R2cQgDajetked08Qu+Rcb7rro73JWYnY9w4udypTG5bWjw== X-Google-Smtp-Source: AGHT+IFpsR5oTTyAushAmZLDWEUIp3b2hknUXMOIWb+zL3Wco7kLZ4dD5CRRHkaRe0hXWqr1S9/c X-Received: by 2002:a05:6a21:3a86:b0:1b5:8ecf:4e7e with SMTP id adf61e73a8af0-1b58ecf5c64mr6498456637.58.1718045500051; Mon, 10 Jun 2024 11:51:40 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1718045500; cv=pass; d=google.com; s=arc-20160816; b=gkAN6cQO708m+j/eKyRMYTktMso849z9mbfxmHjy/TYAN6AT3Klxuj0a1QsrkkzrHN bZEpafI9zxKFApotBPxAZw8d1c6rcNV0DAjzyAeIgnusuvvb9txNxfyplwxe56kSL1/d DHy9dEENjZWplxGcuJa0NcKqyxQXtRfwUsRSRrp+yDXaoZGrKbODDqBeEmZb/LQzHdN3 qSN70tYuM/89rRCeACm0fGyToHpoqrB6QKnN3zHaaRWguvR3kIPXvo7fawXYehjaNa1l 8tmN0D4/l0RVwTQVzh4JC/B6YgOFm7lp5qmGCMVHc1KenUGs3jEQaM+gOdU+J+h+WMFG Y06Q== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=sWkdrEA7A8JP1FFWleVMT3pozGP5y8eg90euQ/5c/J0=; fh=qTx768JYq6oxdX3jfjUzjJGF83d0IKGtQzHdow3lchk=; b=WrbI0cg/jIvX3qWvTzJgaSskGYZ5j9LkigBoJgzQUkrTL5605scLnNJwi18js++hdx Pa+KlX1zZ0m/IOdEiWTexKts61AXQoXBuLw8nQOw/OQoIzci//Nybrl1C28dI1PS653Z fNpvLrqiiM9cO15BXD+YRhz76LNY8sih14uLWdHEXaP33mLAxQ8GIr71TjqDlY0o2KFJ UPYufkHLIoHsSaN5tex7LnaWOfmy8EwJGGJUUXI5xcGt9L6ve0SiDe5GaRQQBPvv8yke C0HIvsi4TB8cgIfN4PYwM/UpHeQzNNCm1vdXthcjBb2q5q3F312b1ZXXYQfpIh2nglyn AdUg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=BkhgeCsM; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-208754-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-208754-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id 41be03b00d2f7-6e73e69e8dcsi4644166a12.28.2024.06.10.11.51.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Jun 2024 11:51:40 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-208754-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=BkhgeCsM; arc=pass (i=1 spf=pass spfdomain=intel.com dkim=pass dkdomain=intel.com dmarc=pass fromdomain=intel.com); spf=pass (google.com: domain of linux-kernel+bounces-208754-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-208754-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id C6CB0B2458C for ; Mon, 10 Jun 2024 18:38:29 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9A59615445D; Mon, 10 Jun 2024 18:35:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="BkhgeCsM" Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.16]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 11C7115251B for ; Mon, 10 Jun 2024 18:35:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.16 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718044551; cv=none; b=N+BVZm+eTmuyfeXEm2DEn0yKMv8WQ68krdB9+w4YrqxJ9ltjXEwI09WrfPiIyVYGABV0xQpcGc546vyeOd49WWuL54hNyovxtw7wsduDPON7u03Tbv1JmYUKt4wGKGSTs+T0afEbCmKax6K9MobBrIuNzyOrynaFEJHXnchCnus= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718044551; c=relaxed/simple; bh=MOVo9LCjnBkFDTv0jmvksxP4b4C/NsmyRHbJP3G3/Hs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AQ+r1RuLw/vP8RMpNmEeE1pI3qkXcNIepsHrjVkuBUWeuI1ne+Oxh/Ikq3xTYjHXIMtQCpS0OLR4TvHjuapXHWTi2BydBZcO4EGu2KKpjihvWlhYZmQyek2OqBLVYxC91Mx8oOBjKixkKbdOl1KMbZznEs7tOikQ0zXp942sHn0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=BkhgeCsM; arc=none smtp.client-ip=192.198.163.16 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1718044549; x=1749580549; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=MOVo9LCjnBkFDTv0jmvksxP4b4C/NsmyRHbJP3G3/Hs=; b=BkhgeCsMtJPPQQ+YTc2s6N46KHTPxhhTySppWON41rQx7gf8b7YIu19t Jgah9Huv66HNDXJlxJaUvpctj+1DmsNBCJawqJK9lQkEsu0RSjd9S7HnV Ow22b8K5aVHNoQ4LUWpJPMQhFBH7y1Eh2LT3hCgOapNJapdtKCTGTjbTj Ki4U3Vi8qO6eNH+78pxGIaafxSZYbcLmGXHxY/rAIIyT7xxruCBXmwysi EmdLyj+haVa71xlXZyEYpEo/5j9WuMBnvUJDZ1Du2U0248VgV6sVi5Z0s rIFOwEFIoLSq5Swz1iI6dc3ktRATjuIEYzAODyzClCo9VhloEhBkuNVNL A==; X-CSE-ConnectionGUID: y6xtAwpMTU+ZJ1On05h2dQ== X-CSE-MsgGUID: EKdbshP8SDa8XGWCeRtRYA== X-IronPort-AV: E=McAfee;i="6600,9927,11099"; a="12004867" X-IronPort-AV: E=Sophos;i="6.08,227,1712646000"; d="scan'208";a="12004867" Received: from fmviesa005.fm.intel.com ([10.60.135.145]) by fmvoesa110.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jun 2024 11:35:38 -0700 X-CSE-ConnectionGUID: D6ytpHxqRU29qUObdZX60w== X-CSE-MsgGUID: UYX+K0vvRmeRJnMBYr3ALQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,227,1712646000"; d="scan'208";a="43576593" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa005-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Jun 2024 11:35:39 -0700 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: x86@kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [PATCH v20 14/18] x86/resctrl: Fill out rmid_read structure for smp_call*() to read a counter Date: Mon, 10 Jun 2024 11:35:24 -0700 Message-ID: <20240610183528.349198-15-tony.luck@intel.com> X-Mailer: git-send-email 2.45.0 In-Reply-To: <20240610183528.349198-1-tony.luck@intel.com> References: <20240610183528.349198-1-tony.luck@intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit mon_event_read() fills out most fields of the struct rmid_read that is passed via an smp_call*() function to a CPU that is part of the correct domain to read the monitor counters. With Sub-NUMA Cluster (SNC) mode there are now two cases to handle: 1) Reading a file that returns a value for a single domain. + Choose the CPU to execute from the domain cpu_mask 2) Reading a file that must sum across domains sharing an L3 cache instance. + Indicate to called code that a sum is needed by passing a NULL rdt_mon_domain pointer. + Choose the CPU from the L3 shared_cpu_map. Signed-off-by: Tony Luck --- arch/x86/kernel/cpu/resctrl/internal.h | 2 +- arch/x86/kernel/cpu/resctrl/ctrlmondata.c | 39 ++++++++++++++++++----- arch/x86/kernel/cpu/resctrl/rdtgroup.c | 2 +- 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h index 77da29ced7eb..75bb1afc4842 100644 --- a/arch/x86/kernel/cpu/resctrl/internal.h +++ b/arch/x86/kernel/cpu/resctrl/internal.h @@ -627,7 +627,7 @@ void mon_event_count(void *info); int rdtgroup_mondata_show(struct seq_file *m, void *arg); void mon_event_read(struct rmid_read *rr, struct rdt_resource *r, struct rdt_mon_domain *d, struct rdtgroup *rdtgrp, - int evtid, int first); + cpumask_t *cpumask, int evtid, int first); void mbm_setup_overflow_handler(struct rdt_mon_domain *dom, unsigned long delay_ms, int exclude_cpu); diff --git a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c index 3b9383612c35..5a43931fd423 100644 --- a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c +++ b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c @@ -515,7 +515,7 @@ static int smp_mon_event_count(void *arg) void mon_event_read(struct rmid_read *rr, struct rdt_resource *r, struct rdt_mon_domain *d, struct rdtgroup *rdtgrp, - int evtid, int first) + cpumask_t *cpumask, int evtid, int first) { int cpu; @@ -537,7 +537,7 @@ void mon_event_read(struct rmid_read *rr, struct rdt_resource *r, return; } - cpu = cpumask_any_housekeeping(&d->hdr.cpu_mask, RESCTRL_PICK_ANY_CPU); + cpu = cpumask_any_housekeeping(cpumask, RESCTRL_PICK_ANY_CPU); /* * cpumask_any_housekeeping() prefers housekeeping CPUs, but @@ -546,7 +546,7 @@ void mon_event_read(struct rmid_read *rr, struct rdt_resource *r, * counters on some platforms if its called in IRQ context. */ if (tick_nohz_full_cpu(cpu)) - smp_call_function_any(&d->hdr.cpu_mask, mon_event_count, rr, 1); + smp_call_function_any(cpumask, mon_event_count, rr, 1); else smp_call_on_cpu(cpu, smp_mon_event_count, rr, false); @@ -575,16 +575,39 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg) resid = md.u.rid; domid = md.u.domid; evtid = md.u.evtid; - r = &rdt_resources_all[resid].r_resctrl; - hdr = rdt_find_domain(&r->mon_domains, domid, NULL); - if (!hdr || WARN_ON_ONCE(hdr->type != RESCTRL_MON_DOMAIN)) { + + if (md.u.sum) { + /* + * This file requires summing across all SNC domains that share + * the L3 cache id that was provided in the "domid" field of the + * mon_data_bits union. Search all domains in the resource for + * one that matches this cache id. + */ + list_for_each_entry(d, &r->mon_domains, hdr.list) { + if (d->ci->id == domid) { + rr.ci = d->ci; + mon_event_read(&rr, r, NULL, rdtgrp, &d->ci->shared_cpu_map, evtid, false); + goto checkresult; + } + } ret = -ENOENT; goto out; + } else { + /* + * This file provides data from a single domain. Search + * the resource to find the domain with "domid". + */ + hdr = rdt_find_domain(&r->mon_domains, domid, NULL); + if (!hdr || WARN_ON_ONCE(hdr->type != RESCTRL_MON_DOMAIN)) { + ret = -ENOENT; + goto out; + } + d = container_of(hdr, struct rdt_mon_domain, hdr); + mon_event_read(&rr, r, d, rdtgrp, &d->hdr.cpu_mask, evtid, false); } - d = container_of(hdr, struct rdt_mon_domain, hdr); - mon_event_read(&rr, r, d, rdtgrp, evtid, false); +checkresult: if (rr.err == -EIO) seq_puts(m, "Error\n"); diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c index 5142ce43ac13..cd54ca6cc563 100644 --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c @@ -3070,7 +3070,7 @@ static int mon_add_all_files(struct kernfs_node *kn, struct rdt_mon_domain *d, return ret; if (!do_sum && is_mbm_event(mevt->evtid)) - mon_event_read(&rr, r, d, prgrp, mevt->evtid, true); + mon_event_read(&rr, r, d, prgrp, &d->hdr.cpu_mask, mevt->evtid, true); } return 0; -- 2.45.0