From nobody Sun Feb 8 02:55:38 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 B95702356DC for ; Mon, 3 Mar 2025 23:34:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044890; cv=none; b=shGHiu9NcuGt6/P673ZWe9oMbfR8oXADzFc3LjFapdDyXI4qOEHkYi+FZEOc3nMCXmdNDYo8ldYzgqxbFd3wJ6yraALEosuXFqsxfXhqlCcQ9mJ58MUphbGjX1tYellZm3VhwV82pWn8b5xVIxKJSiZQX51YuSy/PiRiNbbinHE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044890; c=relaxed/simple; bh=uvN0CFicBAuI2wa5AZA2m8GAenZkKcAknc7QVhdTpqM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=R4WiyT0+sDppA8E922HG4NDxKtKTDNW5pOHR9uwi49/hjqx3EyJsV0D59ygVkaWqRKsnI/epT8W/bQdWHFdAAuwh+GGZQVLCGvnqH28/Uc3J7izvLzruMGifwwDtTjpjCyBgrBoMK9HID9I4zMaR2jg1vS5LaAk1ozb8iHHRxI4= 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=c+vH40u2; arc=none smtp.client-ip=192.198.163.17 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="c+vH40u2" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741044889; x=1772580889; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=uvN0CFicBAuI2wa5AZA2m8GAenZkKcAknc7QVhdTpqM=; b=c+vH40u2JN7C4avGGbXLNkx6Ezb3Fk5oBUC4BxF6rsOxZcuuCITGXayH lvyQ+qtpEBaSbc9lcq6oIHMfIOfvR6GgTuguBVfWcFPPxyTmpLmZblpIa jA2CyUAh5m7oevJ6pFbxGOaI2vIlrgfsk8M1W+j0Lvs7UJ5cbGOS9tTpl c6Sp03u+0b+Iyl/HvFtEulLZt6jD6EplGjnMCKZ4LGK80tu2j544wIuZd s1L45hT2XTW8isUCq4r3h86pYHkJKWi2xnSaNMeutFaW+iK2am/6nVacH Zz1FLLKJwYmFuiq3tUQ9Mi3bTSCtI+9C2gbzgtF0LyR8khRuNjx5MShq0 g==; X-CSE-ConnectionGUID: o0lQHTZOQZaE3QLEJN5n2Q== X-CSE-MsgGUID: yoxbT22JScW31C01hulZzw== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41835907" X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="41835907" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:34:46 -0800 X-CSE-ConnectionGUID: WxlDdYqrTIucBT13ZhgrkQ== X-CSE-MsgGUID: 1S8qf5VrSWqc6TIvt7YUZw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="117982280" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:33:50 -0800 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [RFC PATCH 01/17] x86/rectrl: Fake OOBMSM interface Date: Mon, 3 Mar 2025 15:33:21 -0800 Message-ID: <20250303233340.333743-2-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250303233340.333743-1-tony.luck@intel.com> References: <20250303233340.333743-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: quoted-printable Content-Type: text/plain; charset="utf-8" Real version is coming soon ... this is here so the remaining parts will build (and run ... assuming a 2 socket system that supports RDT monitoring ... only missing part is that the event counters just report fixed values). Real version of this would just add the INTEL_PMT_RESCTRL Kconfig option with dependency checks on INTEL_VSEC=3Dy && INTEL_PMT_TELEMETRY=3Dy && INTEL_PMT_DISCOVERY=3Dy Just for RFC discussion. Signed-off-by: Tony Luck --- .../cpu/resctrl/fake_intel_pmt_features.h | 72 +++++++++++++++++++ .../cpu/resctrl/fake_intel_pmt_features.c | 64 +++++++++++++++++ arch/x86/Kconfig | 1 + arch/x86/kernel/cpu/resctrl/Makefile | 1 + drivers/platform/x86/intel/pmt/Kconfig | 3 + 5 files changed, 141 insertions(+) create mode 100644 arch/x86/kernel/cpu/resctrl/fake_intel_pmt_features.h create mode 100644 arch/x86/kernel/cpu/resctrl/fake_intel_pmt_features.c diff --git a/arch/x86/kernel/cpu/resctrl/fake_intel_pmt_features.h b/arch/x= 86/kernel/cpu/resctrl/fake_intel_pmt_features.h new file mode 100644 index 000000000000..52fdd04e5094 --- /dev/null +++ b/arch/x86/kernel/cpu/resctrl/fake_intel_pmt_features.h @@ -0,0 +1,72 @@ + +/* Bits stolen from OOBMSM VSEC discovery code */ + +enum pmt_feature_id { + FEATURE_INVALID =3D 0x0, + FEATURE_PER_CORE_PERF_TELEM =3D 0x1, + FEATURE_PER_CORE_ENV_TELEM =3D 0x2, + FEATURE_PER_RMID_PERF_TELEM =3D 0x3, + FEATURE_ACCEL_TELEM =3D 0x4, + FEATURE_UNCORE_TELEM =3D 0x5, + FEATURE_CRASH_LOG =3D 0x6, + FEATURE_PETE_LOG =3D 0x7, + FEATURE_TPMI_CTRL =3D 0x8, + FEATURE_RESERVED =3D 0x9, + FEATURE_TRACING =3D 0xA, + FEATURE_PER_RMID_ENERGY_TELEM =3D 0xB, + FEATURE_MAX =3D 0xB, +}; + +/** + * struct oobmsm_plat_info - Platform information for a device instance + * @cdie_mask: Mask of all compute dies in the partition + * @package_id: CPU Package id + * @partition: Package partition id when multiple VSEC PCI devices p= er package + * @segment: PCI segment ID + * @bus_number: PCI bus number + * @device_number: PCI device number + * @function_number: PCI function number + * + * Structure to store platform data for a OOBMSM device instance. + */ +struct oobmsm_plat_info { + u16 cdie_mask; + u8 package_id; + u8 partition; + u8 segment; + u8 bus_number; + u8 device_number; + u8 function_number; +}; + +enum oobmsm_supplier_type { + OOBMSM_SUP_PLAT_INFO, + OOBMSM_SUP_DISC_INFO, + OOBMSM_SUP_S3M_SIMICS, + OOBMSM_SUP_TYPE_MAX +}; + +struct oobmsm_mapping_supplier { + struct device *supplier_dev[OOBMSM_SUP_TYPE_MAX]; + struct oobmsm_plat_info plat_info; + unsigned long features; +}; + +struct telemetry_region { + struct oobmsm_plat_info plat_info; + void __iomem *addr; + size_t size; + u32 guid; + u32 num_rmids; +}; + +struct pmt_feature_group { + enum pmt_feature_id id; + int count; + struct kref kref; + struct telemetry_region regions[]; +}; + +struct pmt_feature_group *intel_pmt_get_regions_by_feature(enum pmt_featur= e_id id); + +void intel_pmt_put_feature_group(struct pmt_feature_group *feature_group); diff --git a/arch/x86/kernel/cpu/resctrl/fake_intel_pmt_features.c b/arch/x= 86/kernel/cpu/resctrl/fake_intel_pmt_features.c new file mode 100644 index 000000000000..6d27cf1a151b --- /dev/null +++ b/arch/x86/kernel/cpu/resctrl/fake_intel_pmt_features.c @@ -0,0 +1,64 @@ +#include +#include +#include +#include "fake_intel_pmt_features.h" +#include +#include + +#include "internal.h" + +#define ENERGY_QWORDS ((576 * 2) + 3) +#define PERF_QWORDS ((576 * 7) + 3) + +static long pg[4 * ENERGY_QWORDS + 2 * PERF_QWORDS]; + +static int __init fill(void) +{ + u64 val =3D 0; + + for (int i =3D 0; i < sizeof(pg); i +=3D sizeof(val)) { + pg[i / sizeof(val)] =3D BIT_ULL(63) + val; + val++; + } + return 0; +} +device_initcall(fill); + +#define PKG_REGION(_entry, _guid, _addr, _pkg) \ + [_entry] =3D { .guid =3D _guid, .addr =3D _addr, .plat_info =3D { .packag= e_id =3D _pkg }} + +static struct pmt_feature_group fake_energy =3D { + .count =3D 4, + .regions =3D { + PKG_REGION(0, 0x26696143, &pg[0 * ENERGY_QWORDS], 0), + PKG_REGION(1, 0x26696143, &pg[1 * ENERGY_QWORDS], 0), + PKG_REGION(2, 0x26696143, &pg[2 * ENERGY_QWORDS], 1), + PKG_REGION(3, 0x26696143, &pg[3 * ENERGY_QWORDS], 1) + } +}; + +static struct pmt_feature_group fake_perf =3D { + .count =3D 2, + .regions =3D { + PKG_REGION(0, 0x26557651, &pg[4 * ENERGY_QWORDS + 0 * PERF_QWORDS], 0), + PKG_REGION(1, 0x26557651, &pg[4 * ENERGY_QWORDS + 1 * PERF_QWORDS], 1) + } +}; + +struct pmt_feature_group * +intel_pmt_get_regions_by_feature(enum pmt_feature_id id) +{ + switch (id) { + case FEATURE_PER_RMID_ENERGY_TELEM: + return &fake_energy; + case FEATURE_PER_RMID_PERF_TELEM: + return &fake_perf; + default: + return ERR_PTR(-ENOENT); + } + return ERR_PTR(-ENOENT); +} + +void intel_pmt_put_feature_group(struct pmt_feature_group *feature_group) +{ +} diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index be2c311f5118..ec6a7b996e09 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -505,6 +505,7 @@ config X86_CPU_RESCTRL depends on X86 && (CPU_SUP_INTEL || CPU_SUP_AMD) select KERNFS select PROC_CPU_RESCTRL if PROC_FS + select INTEL_PMT_RESCTRL help Enable x86 CPU resource control support. =20 diff --git a/arch/x86/kernel/cpu/resctrl/Makefile b/arch/x86/kernel/cpu/res= ctrl/Makefile index 4a06c37b9cf1..72621ea6cd6a 100644 --- a/arch/x86/kernel/cpu/resctrl/Makefile +++ b/arch/x86/kernel/cpu/resctrl/Makefile @@ -1,4 +1,5 @@ # SPDX-License-Identifier: GPL-2.0 obj-$(CONFIG_X86_CPU_RESCTRL) +=3D core.o rdtgroup.o monitor.o obj-$(CONFIG_X86_CPU_RESCTRL) +=3D ctrlmondata.o pseudo_lock.o +obj-$(CONFIG_INTEL_PMT_RESCTRL) +=3D fake_intel_pmt_features.o CFLAGS_pseudo_lock.o =3D -I$(src) diff --git a/drivers/platform/x86/intel/pmt/Kconfig b/drivers/platform/x86/= intel/pmt/Kconfig index e916fc966221..4cbfd8a42252 100644 --- a/drivers/platform/x86/intel/pmt/Kconfig +++ b/drivers/platform/x86/intel/pmt/Kconfig @@ -38,3 +38,6 @@ config INTEL_PMT_CRASHLOG =20 To compile this driver as a module, choose M here: the module will be called intel_pmt_crashlog. + +config INTEL_PMT_RESCTRL + bool --=20 2.48.1 From nobody Sun Feb 8 02:55:38 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 A5C2F1F461C for ; Mon, 3 Mar 2025 23:34:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044889; cv=none; b=j09fHPOb8kRNBjEcRL7rzKlPirMrWzuzq/c5B/U3xR0f7noTm4S4RHUcHT5tcS+o27BSXPNXzuvwtdMAzmILaOUXXF+prX1/tWXGze2Nh0zwwyb/wEVs7y2dAA0UmNbLFBe+/ziSNEcSqWedietAgyncYp6a6d4YYTaogGN3meA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044889; c=relaxed/simple; bh=sor4EW25FS9wp5jwJSTmp9DXQtXHknVfBI/RoNrUi6k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TSKwMoA9yRrwg/eE2R/BRSUfS1/EDdJlgRFJqwXO4jIEKzoQ++yiwXSdZQ8Fwg29sVOOefab2Jkj8IlPxbzs1bFHtMsKeo6tC+FD2aLExGYpMGmBlbWOXrMA6K/6nmZqeEQObWJ+ne8ZHscTxGT7Q0m/WhnBn6q92BOzFJ5SDDM= 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=hkjEdsKT; arc=none smtp.client-ip=192.198.163.17 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="hkjEdsKT" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741044888; x=1772580888; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=sor4EW25FS9wp5jwJSTmp9DXQtXHknVfBI/RoNrUi6k=; b=hkjEdsKTNUqVnrT4j95Xkv0cFmA/9m9bfIJaVKUDOfpekqeRZKs0bCvd 3Bg2CKlx/lOk0L1eJssEXvr0yf0/KWIF0xjPlju0Bkz41Zirs3fDKtA/h TTvIcnTKaQKBpsKCo7UYDXApg5gdqSPrlcMbA/C8Yoth+3hYlqoPF74uT rad/0TITyEWBkB0A4ETjvsPW1Z4HlYwbjP6bbnuDkouDKAk2We4C7Z4sS xuE/ve6KUHtFCKy6GWBP7Me0yA2c2VlDQOClqVGQLrzx0SKkg5iz3ONft nC0G9SrOKtOrIRnrJwpFahaPhQ/waYTpAJKblnHDjAoW5vBFn1VL3V+Hw g==; X-CSE-ConnectionGUID: +LHeDd4nSQeehXgBHMg18g== X-CSE-MsgGUID: iVt2/UX1R9mJnKZilLmQJw== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41835900" X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="41835900" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:34:46 -0800 X-CSE-ConnectionGUID: gfCHovs2R6Km4yr+cxM2PQ== X-CSE-MsgGUID: YbMaoyVeQsybGUVJxjFzuA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="117982279" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:33:50 -0800 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [RFC PATCH 02/17] x86/resctrl: Move L3 initialization out of domain_add_cpu_mon() Date: Mon, 3 Mar 2025 15:33:22 -0800 Message-ID: <20250303233340.333743-3-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250303233340.333743-1-tony.luck@intel.com> References: <20250303233340.333743-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: quoted-printable Content-Type: text/plain; charset="utf-8" To prepare for additional types of monitoring domains, move all the L3 specific initialization into a helper function. Signed-off-by: Tony Luck --- arch/x86/kernel/cpu/resctrl/core.c | 52 +++++++++++++++++------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resct= rl/core.c index 3d1735ed8d1f..dd694958df5a 100644 --- a/arch/x86/kernel/cpu/resctrl/core.c +++ b/arch/x86/kernel/cpu/resctrl/core.c @@ -583,33 +583,12 @@ static void domain_add_cpu_ctrl(int cpu, struct rdt_r= esource *r) } } =20 -static void domain_add_cpu_mon(int cpu, struct rdt_resource *r) +static void setup_l3_mon_domain(int cpu, int id, struct rdt_resource *r, s= truct list_head *add_pos) { - int id =3D get_domain_id_from_scope(cpu, r->mon_scope); - struct list_head *add_pos =3D NULL; struct rdt_hw_mon_domain *hw_dom; - struct rdt_domain_hdr *hdr; struct rdt_mon_domain *d; int err; =20 - lockdep_assert_held(&domain_list_lock); - - if (id < 0) { - pr_warn_once("Can't find monitor domain id for CPU:%d scope:%d for resou= rce %s\n", - cpu, r->mon_scope, r->name); - return; - } - - hdr =3D rdt_find_domain(&r->mon_domains, id, &add_pos); - if (hdr) { - if (WARN_ON_ONCE(hdr->type !=3D RESCTRL_MON_DOMAIN)) - return; - d =3D container_of(hdr, struct rdt_mon_domain, hdr); - - cpumask_set_cpu(cpu, &d->hdr.cpu_mask); - return; - } - hw_dom =3D kzalloc_node(sizeof(*hw_dom), GFP_KERNEL, cpu_to_node(cpu)); if (!hw_dom) return; @@ -642,6 +621,35 @@ static void domain_add_cpu_mon(int cpu, struct rdt_res= ource *r) } } =20 +static void domain_add_cpu_mon(int cpu, struct rdt_resource *r) +{ + int id =3D get_domain_id_from_scope(cpu, r->mon_scope); + struct list_head *add_pos =3D NULL; + struct rdt_domain_hdr *hdr; + + lockdep_assert_held(&domain_list_lock); + + if (id < 0) { + pr_warn_once("Can't find monitor domain id for CPU:%d scope:%d for resou= rce %s\n", + cpu, r->mon_scope, r->name); + return; + } + + hdr =3D rdt_find_domain(&r->mon_domains, id, &add_pos); + if (hdr) { + cpumask_set_cpu(cpu, &hdr->cpu_mask); + return; + } + + switch (r->rid) { + case RDT_RESOURCE_L3: + setup_l3_mon_domain(cpu, id, r, add_pos); + break; + default: + WARN_ON_ONCE(1); + } +} + static void domain_add_cpu(int cpu, struct rdt_resource *r) { if (r->alloc_capable) --=20 2.48.1 From nobody Sun Feb 8 02:55:38 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 87D8022ACD2 for ; Mon, 3 Mar 2025 23:34:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044890; cv=none; b=iO85QwgdsXSnM0laaK5OzyvSajLgyOgld3QftiEoQpTIG8zvqxReV5SNUYqYf2lnZ95ix+f9nugHMGOMNXfbvUooRiUYBQWfSu++2e1WGk7f2hNpphXgVtw/+SiPc2jkW3J3M6gdvJQwYheQO7nwi1eyMuITFKE628P5WMs7Ips= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044890; c=relaxed/simple; bh=JfoVoPIdOcRTWbvU2KmotoxxGNbMBxHZgXS9IFYAuVA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uRPu+GGeLrf9FqWOYOE3qCqkV9KYeBBI3QXb9Yn9ZxoJw2sRObszAotMOxkZZZgVSSBIT29ETIZCSfTf/S/fzi3TysAPQyfTFDO/L69GWKse/Ol4B/s0rSozJzaCcHGDszptKXvZ6o4PHpUJBKx0JdM9bzxt6xHNAnCcEkvDdg8= 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=BKX8TKt7; arc=none smtp.client-ip=192.198.163.17 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="BKX8TKt7" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741044889; x=1772580889; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=JfoVoPIdOcRTWbvU2KmotoxxGNbMBxHZgXS9IFYAuVA=; b=BKX8TKt71jF77Yu48+dhmn6rNNzbN/G2ET05m5I5DgtqjyFXx4q6WDGd GKmOuNc2+QXnmJHPn/45GtY0/QdH5MCJjM5uHGLXq8vqSgQ0GIuwNjlIA VrMWrwZ8iq5moTQQ/GBQZ0KsJzJP+4G0wGdiM1Enhsup/x/YuQPUXBNC5 yTYyMn4idj7/68T0dK6iqnjsqDyIUbBIDU8fszO1L6bOX+cAvcHAqq5tf HBh52PyMqjHgUpIM2GqkK3sdIIM2NyjbyfS0Mynwxk7wsH7f/+vmETy8X hScIuiEsAICqlFbQG2JF5NXf6KzYh8x/dqzhiDTMN3L0eGlzXMQm6R2r2 Q==; X-CSE-ConnectionGUID: mZqn3FXxRyurUAYikbaA3A== X-CSE-MsgGUID: DnTwwIbxQXSuhkG9kovvTg== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41835915" X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="41835915" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:34:46 -0800 X-CSE-ConnectionGUID: 61PsCt7vT4Wx5OAgLtS5Xg== X-CSE-MsgGUID: hHRiyU94ROawEDseHp97yA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="117982282" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:33:50 -0800 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [RFC PATCH 03/17] x86/resctrl: Refactor domain_remove_cpu_mon() ready for new domain types Date: Mon, 3 Mar 2025 15:33:23 -0800 Message-ID: <20250303233340.333743-4-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250303233340.333743-1-tony.luck@intel.com> References: <20250303233340.333743-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: quoted-printable Content-Type: text/plain; charset="utf-8" Different types of domains require different actions when the last CPU in the domain is removed. Refactor to make it easy to add new actions for new types of domains. Signed-off-by: Tony Luck --- arch/x86/kernel/cpu/resctrl/core.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resct= rl/core.c index dd694958df5a..4974cbb842c1 100644 --- a/arch/x86/kernel/cpu/resctrl/core.c +++ b/arch/x86/kernel/cpu/resctrl/core.c @@ -726,20 +726,20 @@ static void domain_remove_cpu_mon(int cpu, struct rdt= _resource *r) return; } =20 - if (WARN_ON_ONCE(hdr->type !=3D RESCTRL_MON_DOMAIN)) + cpumask_clear_cpu(cpu, &hdr->cpu_mask); + if (!cpumask_empty(&hdr->cpu_mask)) return; =20 - d =3D container_of(hdr, struct rdt_mon_domain, hdr); - hw_dom =3D resctrl_to_arch_mon_dom(d); + switch (r->rid) { + case RDT_RESOURCE_L3: + d =3D container_of(hdr, struct rdt_mon_domain, hdr); + hw_dom =3D resctrl_to_arch_mon_dom(d); =20 - cpumask_clear_cpu(cpu, &d->hdr.cpu_mask); - if (cpumask_empty(&d->hdr.cpu_mask)) { resctrl_offline_mon_domain(r, d); - list_del_rcu(&d->hdr.list); + list_del_rcu(&hdr->list); synchronize_rcu(); mon_domain_free(hw_dom); - - return; + break; } } =20 --=20 2.48.1 From nobody Sun Feb 8 02:55:38 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 5B46323719E for ; Mon, 3 Mar 2025 23:34:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044891; cv=none; b=qsBaZ/JeNLa65fy48dVaT/SAqQOelcrCBQ/6z/671swWW3MILcdBMSzU76PrhKGyZhsrHY1TUOGmnUrRvGQZPKe8v0LcqMrxE6OTl2dvWTR91Yqv9cGvfneQBMfLGCkCvUMhdElonEUL5uqOlBbneRt986hwwqF7HTWFEkFK7a4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044891; c=relaxed/simple; bh=yy0dlVhKmEuufnCmp400TE9M9AV853wWbPKFkEusswM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Kx4PgHgr6QRl/OXKjOMWr5d9FGZGQRkofhKMJXfafJ4v42WxGP5oVm8obWjlACxrMi8OWb4a1dRxvicjot+bIqYAWrpnwgOtmLap5ZqiHIVzf18Y/yg+oquQ+7/JDD6Up9ua/8IFqZYIaCiRNOkqe/jLC7NRz/0le/DSJGfaIgM= 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=IkK/Bk1c; arc=none smtp.client-ip=192.198.163.17 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="IkK/Bk1c" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741044889; x=1772580889; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=yy0dlVhKmEuufnCmp400TE9M9AV853wWbPKFkEusswM=; b=IkK/Bk1cGfXdzvpcec1dJid8a9AEpiaQlpQ/weXE94ZHPT8iESUJ7K1N aBe2vPZCqchyPUFpGspR2COqjIS2D0GuWI+APhuI8E2upuyC2DmiIMsCi MH6HR7+PQPIjXIkzp4LHMw6o7KYgYQknvn1hOsNJzKCuh2psVwVwBMaGJ Tp7J9cbDcdpIzC3jSDX+A+gn34BpV64BjGMbXsWiMBpfR2Q8NjkpBSglR 8USszJup4skOhWXjJ5+Hx73R4WGwRxUdgdX9jM90jN8B5iQ21HCqWO2VF QkqhU0hvsL1UuuUcTpcG/H6cT9bBfGd002FXJNozrA7IJ/ygjoXGbMTQN Q==; X-CSE-ConnectionGUID: 7/SXYnMoSCaAkU91a1plpQ== X-CSE-MsgGUID: 3Nn4IBLmSYuhaVSUYPHtyQ== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41835922" X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="41835922" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:34:46 -0800 X-CSE-ConnectionGUID: ZsKdpOW4SA6xeb013sQObw== X-CSE-MsgGUID: vynoUKVTS3iMt5Uohz5NGw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="117982286" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:33:50 -0800 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [RFC PATCH 04/17] x86/resctrl: Split L3 specific code out of rdtgroup_mondata_show() Date: Mon, 3 Mar 2025 15:33:24 -0800 Message-ID: <20250303233340.333743-5-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250303233340.333743-1-tony.luck@intel.com> References: <20250303233340.333743-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: quoted-printable Content-Type: text/plain; charset="utf-8" New monitor resources require different operations to read counters. Move the L3 specific code to a helper function. Signed-off-by: Tony Luck --- arch/x86/kernel/cpu/resctrl/ctrlmondata.c | 79 +++++++++++++---------- 1 file changed, 46 insertions(+), 33 deletions(-) diff --git a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c b/arch/x86/kernel/cp= u/resctrl/ctrlmondata.c index 536351159cc2..515a9bec05cd 100644 --- a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c +++ b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c @@ -627,31 +627,14 @@ void mon_event_read(struct rmid_read *rr, struct rdt_= resource *r, resctrl_arch_mon_ctx_free(r, evtid, rr->arch_mon_ctx); } =20 -int rdtgroup_mondata_show(struct seq_file *m, void *arg) +static int rdtgroup_l3_data_show(struct seq_file *m, struct rdt_resource *= r, + int domid, struct rdtgroup *rdtgrp, u32 evtid, + bool sum, struct rmid_read *rr) { - struct kernfs_open_file *of =3D m->private; struct rdt_domain_hdr *hdr; - struct rmid_read rr =3D {0}; struct rdt_mon_domain *d; - u32 resid, evtid, domid; - struct rdtgroup *rdtgrp; - struct rdt_resource *r; - union mon_data_bits md; - int ret =3D 0; - - rdtgrp =3D rdtgroup_kn_lock_live(of->kn); - if (!rdtgrp) { - ret =3D -ENOENT; - goto out; - } =20 - md.priv =3D of->kn->priv; - resid =3D md.u.rid; - domid =3D md.u.domid; - evtid =3D md.u.evtid; - r =3D &rdt_resources_all[resid].r_resctrl; - - if (md.u.sum) { + if (sum) { /* * This file requires summing across all domains that share * the L3 cache id that was provided in the "domid" field of the @@ -660,37 +643,67 @@ int rdtgroup_mondata_show(struct seq_file *m, void *a= rg) */ list_for_each_entry(d, &r->mon_domains, hdr.list) { if (d->ci->id =3D=3D domid) { - rr.ci =3D d->ci; - mon_event_read(&rr, r, NULL, rdtgrp, + rr->ci =3D d->ci; + mon_event_read(rr, r, NULL, rdtgrp, &d->ci->shared_cpu_map, evtid, false); goto checkresult; } } - ret =3D -ENOENT; - goto out; + return -ENOENT; } else { /* * This file provides data from a single domain. Search * the resource to find the domain with "domid". */ hdr =3D rdt_find_domain(&r->mon_domains, domid, NULL); - if (!hdr || WARN_ON_ONCE(hdr->type !=3D RESCTRL_MON_DOMAIN)) { - ret =3D -ENOENT; - goto out; - } + if (!hdr || WARN_ON_ONCE(hdr->type !=3D RESCTRL_MON_DOMAIN)) + return -ENOENT; d =3D container_of(hdr, struct rdt_mon_domain, hdr); - mon_event_read(&rr, r, d, rdtgrp, &d->hdr.cpu_mask, evtid, false); + mon_event_read(rr, r, d, rdtgrp, &d->hdr.cpu_mask, evtid, false); } =20 checkresult: =20 - if (rr.err =3D=3D -EIO) + if (rr->err =3D=3D -EIO) seq_puts(m, "Error\n"); - else if (rr.err =3D=3D -EINVAL) + else if (rr->err =3D=3D -EINVAL) seq_puts(m, "Unavailable\n"); else - seq_printf(m, "%llu\n", rr.val); + seq_printf(m, "%llu\n", rr->val); =20 + return 0; +} + +int rdtgroup_mondata_show(struct seq_file *m, void *arg) +{ + struct kernfs_open_file *of =3D m->private; + struct rmid_read rr =3D {0}; + u32 resid, evtid, domid; + struct rdtgroup *rdtgrp; + struct rdt_resource *r; + union mon_data_bits md; + int ret =3D 0; + + rdtgrp =3D rdtgroup_kn_lock_live(of->kn); + if (!rdtgrp) { + ret =3D -ENOENT; + goto out; + } + + md.priv =3D of->kn->priv; + resid =3D md.u.rid; + domid =3D md.u.domid; + evtid =3D md.u.evtid; + r =3D &rdt_resources_all[resid].r_resctrl; + + switch (r->rid) { + case RDT_RESOURCE_L3: + ret =3D rdtgroup_l3_data_show(m, r, domid, rdtgrp, evtid, md.u.sum, &rr); + break; + default: + ret =3D -EINVAL; + break; + } out: rdtgroup_kn_unlock(of->kn); return ret; --=20 2.48.1 From nobody Sun Feb 8 02:55:38 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 4E09523A9AE for ; Mon, 3 Mar 2025 23:34:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044892; cv=none; b=FzMcRtfx7CtKMUEgoJsp9KawBaVs+xmdmsLq6AJ8LRPtlTYTUE0mVavg3QCcO5GkwRbXzdGwRpcCyk/H77FlZ/a+Nk1P/fzLKsTkB8HFt2WnKngEDQyDeVRQES9BR+qKqp7GO3wAG8seELP3Ub1F9hSAkuyIxN2HKd8G6G6iZfY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044892; c=relaxed/simple; bh=Xd4Ki/l/cqge/KMu95v5zAbtFqWbm44juh3x7Vp4MXQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XRJCcr/7Jfq/XiPHFgiiWFjz67t/b8JvIvGQQ5Eob3KBTX1RUaOotsOK16oyLHS5XJJogiQaLlZvQVAdA/j9W66k+HFypyUX4P+0kSlyxZY3ggvmDY6Fodf+4TtSoc8RsPSgRcjF3Q0kpa8hTpsh1p00UZ1RxvHaIAVsmuPiJ8Q= 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=cQzgMMu3; arc=none smtp.client-ip=192.198.163.17 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="cQzgMMu3" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741044890; x=1772580890; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Xd4Ki/l/cqge/KMu95v5zAbtFqWbm44juh3x7Vp4MXQ=; b=cQzgMMu3O95oTKQWGQq0mcxiMjfZd/weteuqp//OBQKE8mqLHBGQzIzE QyUYGv4VIGRiQEfIh07KmLlLHcr92/AFuwaqo+Ge5JWUJdeDGdyPSet0h PgBAj773Yj1WuIyi8Jk0JS4/ft+EQrDsHDbrlKCI6xEHKnBG4z9tBZ5XK nVcSt4HIHDsRjIz85hWyvAZVZUTx+k3+Y0Kw7dr+wG25CJwK1ue/0p84M 0PKFjSNcNqB2BlfKQrTgZdZBtGyxfthpq/eSzJR1+6cURfJJrx9wy2Ou8 wrxOZu/UTS2IzAO+HLNTbJvxZ9/AvB2Jj3Tq4wb9RMQ/HS04iUYpHLz2h A==; X-CSE-ConnectionGUID: SrR1UuqMSSu+ZXm+FisJPA== X-CSE-MsgGUID: Gh9rzAcOTTaO6EPWHMm9BA== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41835928" X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="41835928" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:34:46 -0800 X-CSE-ConnectionGUID: AsXfyWSMTdSHhLffKlXvQQ== X-CSE-MsgGUID: A8HZV8X0Qfihps4oRii//w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="117982288" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:33:51 -0800 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [RFC PATCH 05/17] x86/resctrl: Change generic monitor functions to use struct rdt_domain_hdr Date: Mon, 3 Mar 2025 15:33:25 -0800 Message-ID: <20250303233340.333743-6-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250303233340.333743-1-tony.luck@intel.com> References: <20250303233340.333743-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: quoted-printable Content-Type: text/plain; charset="utf-8" Functions that don't need the internal details of the rdt_mon_domain can operate on just the rdt_domain_hdr. Signed-off-by: Tony Luck --- include/linux/resctrl.h | 2 +- arch/x86/kernel/cpu/resctrl/core.c | 2 +- arch/x86/kernel/cpu/resctrl/rdtgroup.c | 60 +++++++++++++++++--------- 3 files changed, 42 insertions(+), 22 deletions(-) diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h index d94abba1c716..a89f0a7e2724 100644 --- a/include/linux/resctrl.h +++ b/include/linux/resctrl.h @@ -261,7 +261,7 @@ int resctrl_arch_update_one(struct rdt_resource *r, str= uct rdt_ctrl_domain *d, u32 resctrl_arch_get_config(struct rdt_resource *r, struct rdt_ctrl_domain= *d, u32 closid, enum resctrl_conf_type type); int resctrl_online_ctrl_domain(struct rdt_resource *r, struct rdt_ctrl_dom= ain *d); -int resctrl_online_mon_domain(struct rdt_resource *r, struct rdt_mon_domai= n *d); +int resctrl_online_mon_domain(struct rdt_resource *r, struct rdt_domain_hd= r *hdr); void resctrl_offline_ctrl_domain(struct rdt_resource *r, struct rdt_ctrl_d= omain *d); void resctrl_offline_mon_domain(struct rdt_resource *r, struct rdt_mon_dom= ain *d); void resctrl_online_cpu(unsigned int cpu); diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resct= rl/core.c index 4974cbb842c1..7eddc07d35ee 100644 --- a/arch/x86/kernel/cpu/resctrl/core.c +++ b/arch/x86/kernel/cpu/resctrl/core.c @@ -613,7 +613,7 @@ static void setup_l3_mon_domain(int cpu, int id, struct= rdt_resource *r, struct =20 list_add_tail_rcu(&d->hdr.list, add_pos); =20 - err =3D resctrl_online_mon_domain(r, d); + err =3D resctrl_online_mon_domain(r, &d->hdr); if (err) { list_del_rcu(&d->hdr.list); synchronize_rcu(); diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/r= esctrl/rdtgroup.c index 6419e04d8a7b..d2f3718f16af 100644 --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c @@ -3039,7 +3039,7 @@ static void mon_rmdir_one_subdir(struct kernfs_node *= pkn, char *name, char *subn * when last domain being summed is removed. */ static void rmdir_mondata_subdir_allrdtgrp(struct rdt_resource *r, - struct rdt_mon_domain *d) + struct rdt_domain_hdr *hdr) { struct rdtgroup *prgrp, *crgrp; char subname[32]; @@ -3047,9 +3047,15 @@ static void rmdir_mondata_subdir_allrdtgrp(struct rd= t_resource *r, char name[32]; =20 snc_mode =3D r->mon_scope =3D=3D RESCTRL_L3_NODE; - sprintf(name, "mon_%s_%02d", r->name, snc_mode ? d->ci->id : d->hdr.id); - if (snc_mode) - sprintf(subname, "mon_sub_%s_%02d", r->name, d->hdr.id); + if (snc_mode) { + struct rdt_mon_domain *d; + + d =3D container_of(hdr, struct rdt_mon_domain, hdr); + sprintf(name, "mon_%s_%02d", r->name, d->ci->id); + sprintf(subname, "mon_sub_%s_%02d", r->name, hdr->id); + } else { + sprintf(name, "mon_%s_%02d", r->name, hdr->id); + } =20 list_for_each_entry(prgrp, &rdt_all_groups, rdtgroup_list) { mon_rmdir_one_subdir(prgrp->mon.mon_data_kn, name, subname); @@ -3059,10 +3065,11 @@ static void rmdir_mondata_subdir_allrdtgrp(struct r= dt_resource *r, } } =20 -static int mon_add_all_files(struct kernfs_node *kn, struct rdt_mon_domain= *d, +static int mon_add_all_files(struct kernfs_node *kn, struct rdt_domain_hdr= *hdr, struct rdt_resource *r, struct rdtgroup *prgrp, bool do_sum) { + struct rdt_mon_domain *d; struct rmid_read rr =3D {0}; union mon_data_bits priv; struct mon_evt *mevt; @@ -3071,8 +3078,13 @@ static int mon_add_all_files(struct kernfs_node *kn,= struct rdt_mon_domain *d, if (WARN_ON(list_empty(&r->evt_list))) return -EPERM; =20 + if (r->rid =3D=3D RDT_RESOURCE_L3) { + d =3D container_of(hdr, struct rdt_mon_domain, hdr); + priv.u.domid =3D do_sum ? d->ci->id : hdr->id; + } else { + priv.u.domid =3D hdr->id; + } priv.u.rid =3D r->rid; - priv.u.domid =3D do_sum ? d->ci->id : d->hdr.id; priv.u.sum =3D do_sum; list_for_each_entry(mevt, &r->evt_list, list) { priv.u.evtid =3D mevt->evtid; @@ -3080,7 +3092,7 @@ static int mon_add_all_files(struct kernfs_node *kn, = struct rdt_mon_domain *d, if (ret) return ret; =20 - if (!do_sum && is_mbm_event(mevt->evtid)) + if (r->rid =3D=3D RDT_RESOURCE_L3 && !do_sum && is_mbm_event(mevt->evtid= )) mon_event_read(&rr, r, d, prgrp, &d->hdr.cpu_mask, mevt->evtid, true); } =20 @@ -3088,10 +3100,11 @@ static int mon_add_all_files(struct kernfs_node *kn= , struct rdt_mon_domain *d, } =20 static int mkdir_mondata_subdir(struct kernfs_node *parent_kn, - struct rdt_mon_domain *d, + struct rdt_domain_hdr *hdr, struct rdt_resource *r, struct rdtgroup *prgrp) { struct kernfs_node *kn, *ckn; + struct rdt_mon_domain *d; char name[32]; bool snc_mode; int ret =3D 0; @@ -3099,7 +3112,12 @@ static int mkdir_mondata_subdir(struct kernfs_node *= parent_kn, lockdep_assert_held(&rdtgroup_mutex); =20 snc_mode =3D r->mon_scope =3D=3D RESCTRL_L3_NODE; - sprintf(name, "mon_%s_%02d", r->name, snc_mode ? d->ci->id : d->hdr.id); + if (snc_mode) { + d =3D container_of(hdr, struct rdt_mon_domain, hdr); + sprintf(name, "mon_%s_%02d", r->name, d->ci->id); + } else { + sprintf(name, "mon_%s_%02d", r->name, hdr->id); + } kn =3D kernfs_find_and_get(parent_kn, name); if (kn) { /* @@ -3115,7 +3133,7 @@ static int mkdir_mondata_subdir(struct kernfs_node *p= arent_kn, ret =3D rdtgroup_kn_set_ugid(kn); if (ret) goto out_destroy; - ret =3D mon_add_all_files(kn, d, r, prgrp, snc_mode); + ret =3D mon_add_all_files(kn, hdr, r, prgrp, snc_mode); if (ret) goto out_destroy; } @@ -3132,7 +3150,7 @@ static int mkdir_mondata_subdir(struct kernfs_node *p= arent_kn, if (ret) goto out_destroy; =20 - ret =3D mon_add_all_files(ckn, d, r, prgrp, false); + ret =3D mon_add_all_files(ckn, hdr, r, prgrp, false); if (ret) goto out_destroy; } @@ -3150,7 +3168,7 @@ static int mkdir_mondata_subdir(struct kernfs_node *p= arent_kn, * and "monitor" groups with given domain id. */ static void mkdir_mondata_subdir_allrdtgrp(struct rdt_resource *r, - struct rdt_mon_domain *d) + struct rdt_domain_hdr *hdr) { struct kernfs_node *parent_kn; struct rdtgroup *prgrp, *crgrp; @@ -3158,12 +3176,12 @@ static void mkdir_mondata_subdir_allrdtgrp(struct r= dt_resource *r, =20 list_for_each_entry(prgrp, &rdt_all_groups, rdtgroup_list) { parent_kn =3D prgrp->mon.mon_data_kn; - mkdir_mondata_subdir(parent_kn, d, r, prgrp); + mkdir_mondata_subdir(parent_kn, hdr, r, prgrp); =20 head =3D &prgrp->mon.crdtgrp_list; list_for_each_entry(crgrp, head, mon.crdtgrp_list) { parent_kn =3D crgrp->mon.mon_data_kn; - mkdir_mondata_subdir(parent_kn, d, r, crgrp); + mkdir_mondata_subdir(parent_kn, hdr, r, crgrp); } } } @@ -3172,14 +3190,14 @@ static int mkdir_mondata_subdir_alldom(struct kernf= s_node *parent_kn, struct rdt_resource *r, struct rdtgroup *prgrp) { - struct rdt_mon_domain *dom; + struct rdt_domain_hdr *hdr; int ret; =20 /* Walking r->domains, ensure it can't race with cpuhp */ lockdep_assert_cpus_held(); =20 - list_for_each_entry(dom, &r->mon_domains, hdr.list) { - ret =3D mkdir_mondata_subdir(parent_kn, dom, r, prgrp); + list_for_each_entry(hdr, &r->mon_domains, list) { + ret =3D mkdir_mondata_subdir(parent_kn, hdr, r, prgrp); if (ret) return ret; } @@ -4027,7 +4045,7 @@ void resctrl_offline_mon_domain(struct rdt_resource *= r, struct rdt_mon_domain *d * per domain monitor data directories. */ if (resctrl_mounted && resctrl_arch_mon_capable()) - rmdir_mondata_subdir_allrdtgrp(r, d); + rmdir_mondata_subdir_allrdtgrp(r, &d->hdr); =20 if (is_mbm_enabled()) cancel_delayed_work(&d->mbm_over); @@ -4096,10 +4114,12 @@ int resctrl_online_ctrl_domain(struct rdt_resource = *r, struct rdt_ctrl_domain *d return err; } =20 -int resctrl_online_mon_domain(struct rdt_resource *r, struct rdt_mon_domai= n *d) +int resctrl_online_mon_domain(struct rdt_resource *r, struct rdt_domain_hd= r *hdr) { + struct rdt_mon_domain *d; int err; =20 + d =3D container_of(hdr, struct rdt_mon_domain, hdr); mutex_lock(&rdtgroup_mutex); =20 err =3D domain_setup_mon_state(r, d); @@ -4122,7 +4142,7 @@ int resctrl_online_mon_domain(struct rdt_resource *r,= struct rdt_mon_domain *d) * If resctrl is mounted, add per domain monitor data directories. */ if (resctrl_mounted && resctrl_arch_mon_capable()) - mkdir_mondata_subdir_allrdtgrp(r, d); + mkdir_mondata_subdir_allrdtgrp(r, hdr); =20 out_unlock: mutex_unlock(&rdtgroup_mutex); --=20 2.48.1 From nobody Sun Feb 8 02:55:38 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 3C9BB23C8AE for ; Mon, 3 Mar 2025 23:34:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044892; cv=none; b=YXJ9zWHU5sLXYgbxKWzHUrhbTv3+ZX+3ADvBTEAYnKTIP05YRhCwnXFyTrOIU1i1WqaJ+ZsFheSWUJ0XpSL6j5W7hgSW7EFGQ6LSmXzYeHNmeNPIPbIqPZhFkKTSa7+fZEn5Jw+4Wn7oxsjTgG024K63/lXYaKzzP+55tBx2Sv8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044892; c=relaxed/simple; bh=xwrB3g3N8P2uj1c72EBSigEmYxthDVqNCS7AcRoNuIw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RptxdzNreue4eYIvGuT3siOQ1nI/xk2NenORZbHZmut+01tTpHXMcfjP9ESF9JWiV70SuHv/yiCI1pNwmvwwy5qfwtoVeZFuxRutOw2QC8bB5oEz44rfGZb1HL3sHrfe2iXcYt1m3BJrk8JA+fFXFL8/vJ1UbOoheiYNCKudjsg= 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=YVMxkzTM; arc=none smtp.client-ip=192.198.163.17 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="YVMxkzTM" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741044891; x=1772580891; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=xwrB3g3N8P2uj1c72EBSigEmYxthDVqNCS7AcRoNuIw=; b=YVMxkzTM6lQIMxZRpdswATkZJrCmbO+Y+JDlEgOP/eJXCeK+AZPSp2ar aSddCOR+bhlLUAVOA4pIiYgGWfIr05wCeKV09JtGhIxISz3VJOxqGfTsf ojmblMw2flugRKGZpnXGocjU/tZvc1EcJhMmAAP6PpkkyjG64txwyJkv3 V1MRoh0e8pUWTv2LnPkWEMONSO9+oogX2GANBKSLP9H1PPEVgey0i7cr8 r0NyngCw5JukvidO4C9GWaRlI2AK4tZolRfsGOLkEnXOyBNo63JjzaIeJ olhuQ13xWZSTkgBj7FqgOI99hX7ExHbQsc4lslReF0SkKS8hI7NbZPQZ3 w==; X-CSE-ConnectionGUID: mBgA4og/Q2OBq3s4skup3Q== X-CSE-MsgGUID: qpjrNUIZR3+NDe8NZYCTBA== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41835935" X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="41835935" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:34:47 -0800 X-CSE-ConnectionGUID: vgRL93H5R+qFsGM4MfPSHg== X-CSE-MsgGUID: quSvOidiQ4GAyysb0wXXTg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="117982290" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:33:51 -0800 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [RFC PATCH 06/17] x86/resctrl: Add and initialize rdt_resource for package scope core monitor Date: Mon, 3 Mar 2025 15:33:26 -0800 Message-ID: <20250303233340.333743-7-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250303233340.333743-1-tony.luck@intel.com> References: <20250303233340.333743-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: quoted-printable Content-Type: text/plain; charset="utf-8" New resource for monitoring core events reported at package level. Signed-off-by: Tony Luck --- include/linux/resctrl.h | 1 + arch/x86/kernel/cpu/resctrl/internal.h | 2 ++ arch/x86/kernel/cpu/resctrl/core.c | 12 ++++++++++++ 3 files changed, 15 insertions(+) diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h index a89f0a7e2724..9b64993a6cc8 100644 --- a/include/linux/resctrl.h +++ b/include/linux/resctrl.h @@ -180,6 +180,7 @@ enum resctrl_scope { RESCTRL_L2_CACHE =3D 2, RESCTRL_L3_CACHE =3D 3, RESCTRL_L3_NODE, + RESCTRL_PACKAGE, }; =20 /** diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/r= esctrl/internal.h index 20c898f09b7e..b8f37170f6e5 100644 --- a/arch/x86/kernel/cpu/resctrl/internal.h +++ b/arch/x86/kernel/cpu/resctrl/internal.h @@ -317,6 +317,7 @@ struct rdtgroup { #define RFTYPE_RES_CACHE BIT(8) #define RFTYPE_RES_MB BIT(9) #define RFTYPE_DEBUG BIT(10) +#define RFTYPE_RES_PKG BIT(11) #define RFTYPE_CTRL_INFO (RFTYPE_INFO | RFTYPE_CTRL) #define RFTYPE_MON_INFO (RFTYPE_INFO | RFTYPE_MON) #define RFTYPE_TOP_INFO (RFTYPE_INFO | RFTYPE_TOP) @@ -517,6 +518,7 @@ enum resctrl_res_level { RDT_RESOURCE_L2, RDT_RESOURCE_MBA, RDT_RESOURCE_SMBA, + RDT_RESOURCE_INTEL_PMT, =20 /* Must be the last */ RDT_NUM_RESOURCES, diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resct= rl/core.c index 7eddc07d35ee..75a815383427 100644 --- a/arch/x86/kernel/cpu/resctrl/core.c +++ b/arch/x86/kernel/cpu/resctrl/core.c @@ -117,6 +117,16 @@ struct rdt_hw_resource rdt_resources_all[] =3D { .fflags =3D RFTYPE_RES_MB, }, }, + [RDT_RESOURCE_INTEL_PMT] =3D + { + .r_resctrl =3D { + .rid =3D RDT_RESOURCE_INTEL_PMT, + .name =3D "PKG", + .mon_scope =3D RESCTRL_PACKAGE, + .mon_domains =3D mon_domain_init(RDT_RESOURCE_INTEL_PMT), + .fflags =3D RFTYPE_RES_PKG, + }, + }, }; =20 u32 resctrl_arch_system_num_rmid_idx(void) @@ -521,6 +531,8 @@ static int get_domain_id_from_scope(int cpu, enum resct= rl_scope scope) return get_cpu_cacheinfo_id(cpu, scope); case RESCTRL_L3_NODE: return cpu_to_node(cpu); + case RESCTRL_PACKAGE: + return topology_physical_package_id(cpu); default: break; } --=20 2.48.1 From nobody Sun Feb 8 02:55:38 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 9BA322356C8 for ; Mon, 3 Mar 2025 23:34:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044893; cv=none; b=qdHKxNhAS6Utu1GF76J4lsfVZJtR1Hbumx8tww7Q6x0gFI7hu19OXzgN1vGnxaxGoJuz/mNuK2TPgUfynAux7ebzZwks5tlOrYIFTPQaPkvBtZCgJAo3FNzFpJdGBBO3O4hKUon2Idp9NU4F1fAU0B9QUpclECkyEj1PT2kFemM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044893; c=relaxed/simple; bh=2JE7D+GpR0JZonbnGe6IENILzvHBEw665f3y+t4MPlI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iwg6VjMQL9W6VeQ5gxCWeoTeDMc3WjXCDrvk+jeA7KmrX+mdVKdowtX5A2b/lFGfLiUOv71JarY1Lrjb/ICPBwmktv/MAUSj7k6b2NjdivCtUV35Cp2espwVHfyhhnJMVqcnLl8nLhTHccdKENsjzUd6JG+qyv0lr1fK1Z1MPYw= 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=b3vqxNE1; arc=none smtp.client-ip=192.198.163.17 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="b3vqxNE1" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741044891; x=1772580891; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=2JE7D+GpR0JZonbnGe6IENILzvHBEw665f3y+t4MPlI=; b=b3vqxNE1GPMwLvnpQTgwvH7VPHE7AygwfwktdjL4BcazugsIv/trh7Gp 3myy9+VwginBoUcPJU4P/XhaXKaLvuXauwcn3Ajw89wqrXNHo5jLpNvQe +ZTR6bywk1uNwP8L/B2VENewhIjQ2RqIosq4h+EbGto9HczUCetsyKpyG TzELopaU5sGmZSWRp1hGMKQUmIz3tZrvGYcXT/MPyP15Ts3ry7Vrxwo1k C6Nz7ViD3YY/yNWP+CLuyJe9EUh+yJLOvlNtgWUccw81WpyH4lnnQETJ/ bo+Oly2ioCRiDHHuFL2U6C/Xv5ghXv+HPuHFTKeNfp4V2qTjzH3AnH1BH w==; X-CSE-ConnectionGUID: 5w1sJBtORACzLBdCMebrpA== X-CSE-MsgGUID: hrPcmz1YRqa7aR74gLaXjw== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41835941" X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="41835941" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:34:47 -0800 X-CSE-ConnectionGUID: x52Hw6wjSNmnLV+iTLo/Lw== X-CSE-MsgGUID: ZJMt9MS5QbC/1YGyZ/v9Xg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="117982292" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:33:51 -0800 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [RFC PATCH 07/17] x86/resctrl: Prepare for resource specific event ids Date: Mon, 3 Mar 2025 15:33:27 -0800 Message-ID: <20250303233340.333743-8-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250303233340.333743-1-tony.luck@intel.com> References: <20250303233340.333743-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: quoted-printable Content-Type: text/plain; charset="utf-8" Event ids ought to be specific to each resource. Keep enum resctrl_event_id for event ids in the RDT_RESOURCE_L3. But change the type in generic areas to unsigned int so that new resources can have their own event ids. Signed-off-by: Tony Luck --- arch/x86/kernel/cpu/resctrl/internal.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/r= esctrl/internal.h index b8f37170f6e5..c8da6fac4720 100644 --- a/arch/x86/kernel/cpu/resctrl/internal.h +++ b/arch/x86/kernel/cpu/resctrl/internal.h @@ -114,13 +114,13 @@ static inline struct rdt_fs_context *rdt_fc2context(s= truct fs_context *fc) =20 /** * struct mon_evt - Entry in the event list of a resource - * @evtid: event id + * @evtid: per resource event id * @name: name of the event * @configurable: true if the event is configurable * @list: entry in &rdt_resource->evt_list */ struct mon_evt { - enum resctrl_event_id evtid; + unsigned int evtid; char *name; bool configurable; struct list_head list; @@ -131,7 +131,7 @@ struct mon_evt { * @priv: Used to store monitoring event data in @u * as kernfs private data. * @u.rid: Resource id associated with the event file. - * @u.evtid: Event id associated with the event file. + * @u.evtid: Per resource event id associated with the event fil= e. * @u.sum: Set when event must be summed across multiple * domains. * @u.domid: When @u.sum is zero this is the domain to which @@ -143,10 +143,10 @@ struct mon_evt { union mon_data_bits { void *priv; struct { - unsigned int rid : 10; - enum resctrl_event_id evtid : 7; - unsigned int sum : 1; - unsigned int domid : 14; + unsigned int rid : 10; + unsigned int evtid : 7; + unsigned int sum : 1; + unsigned int domid : 14; } u; }; =20 --=20 2.48.1 From nobody Sun Feb 8 02:55:38 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 5535223E226 for ; Mon, 3 Mar 2025 23:34:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044894; cv=none; b=Luk34Ch/S4mOZf8O1u1e50aPzjKIt77jJOt3/E1IlO3ngISdktUJLOwcWhXSFxmUKTx9904BwvuotiOR72+2TaP/xmZLAhwEovJEdSDO3vdVzL6/XNz1jeJdaQlCqUuvNCwARHLO4nbMfoAf/7UeD+YC95hQBzJkBKP/U7CfvQ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044894; c=relaxed/simple; bh=bl4AE5B4dRHgkyzVt059Ks754gGBJoIMCieRISa5Q+Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uez71tHPdPOmFBRnM95tYRwAtef228PP+ES0JfkuC1ltC16wJNN5kp6XQ6/Z+udS0nQGm8WhDyyEo4oaflxy2Ab+hCWI6J4r75wmoDNY7feXd+30HiJQ1nX9l8IeNK7+R8zZBuglmrYQhTqX3ysBr2Xk6Cp0H9saAxALWG1/kmE= 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=OwX2e6vf; arc=none smtp.client-ip=192.198.163.17 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="OwX2e6vf" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741044892; x=1772580892; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=bl4AE5B4dRHgkyzVt059Ks754gGBJoIMCieRISa5Q+Q=; b=OwX2e6vf50ow3JBeY654ntUlmfMng2kNuZxxuNbs9SN+uqutJ94RAgjl L8O5mPQdf0I28eUHeRCuJazlSMr71hsnf8kCGMll10yQwTKv3a3Z8xUEC jTs10RnfOA5hzAPcj4DLDsiHlvlMTqjKu8HDiG+rgFeBf7g0mChTJFhqG k1UdkjCKjNj/llLs8yKDEZgzmrHX8E5Wj+JT2kT4PHYBBzSPY+kQy/pVi V0YixyPj5FpOPUoFwE7wC9B1awT3HLwnT1wks6djES0zrR4Uy2LqmPc7B MmUMJcVTv28jTVBf7fjw+16wuWJw+kI3TP2wbmE2eL8Z/k6VtAvibmTtz w==; X-CSE-ConnectionGUID: R/s3OyOnQiidoZ1ZneFCiQ== X-CSE-MsgGUID: 4MtnbGL3Q3qKOaVzlDSc8Q== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41835949" X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="41835949" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:34:47 -0800 X-CSE-ConnectionGUID: vck0jeC+QSSNw+vCsiPgqQ== X-CSE-MsgGUID: V7CDaGh5SsOpEu+d/8Hhcw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="117982294" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:33:52 -0800 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [RFC PATCH 08/17] x86/resctrl: Add initialization hook for Intel PMT events Date: Mon, 3 Mar 2025 15:33:28 -0800 Message-ID: <20250303233340.333743-9-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250303233340.333743-1-tony.luck@intel.com> References: <20250303233340.333743-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: quoted-printable Content-Type: text/plain; charset="utf-8" Call the OOBMSM discovery code to find out if there are any event groups that match unique identifiers understood by resctrl. Note that initiialzation must happen in two phases because the OOBMSM VSEC discovery process is not complete at resctrl "lateinit()" initialization time. So there is an initial hook that assumes that Intel PMT will exist, called early so that package scoped domain groups are initialized. At first mount the remainder of initialization is done. If there are no Intel PMT events, the package domain lists are removed. Events for specific systems to be added by a separate patch. Signed-off-by: Tony Luck --- include/linux/resctrl.h | 8 ++ arch/x86/kernel/cpu/resctrl/internal.h | 7 + arch/x86/kernel/cpu/resctrl/core.c | 9 +- arch/x86/kernel/cpu/resctrl/intel_pmt.c | 169 ++++++++++++++++++++++++ arch/x86/kernel/cpu/resctrl/rdtgroup.c | 3 + arch/x86/kernel/cpu/resctrl/Makefile | 1 + 6 files changed, 194 insertions(+), 3 deletions(-) create mode 100644 arch/x86/kernel/cpu/resctrl/intel_pmt.c diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h index 9b64993a6cc8..6e463c65451b 100644 --- a/include/linux/resctrl.h +++ b/include/linux/resctrl.h @@ -118,6 +118,14 @@ struct rdt_mon_domain { int cqm_work_cpu; }; =20 +/** + * struct rdt_core_mon_domain - CPUs sharing an Intel-PMT-scoped resctrl m= onitor resource + * @hdr: common header for different domain types + */ +struct rdt_core_mon_domain { + struct rdt_domain_hdr hdr; +}; + /** * struct resctrl_cache - Cache allocation related data * @cbm_len: Length of the cache bit mask diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/r= esctrl/internal.h index c8da6fac4720..f530382d8871 100644 --- a/arch/x86/kernel/cpu/resctrl/internal.h +++ b/arch/x86/kernel/cpu/resctrl/internal.h @@ -637,6 +637,13 @@ void closid_free(int closid); int alloc_rmid(u32 closid); void free_rmid(u32 closid, u32 rmid); int rdt_get_mon_l3_config(struct rdt_resource *r); +#ifdef CONFIG_INTEL_PMT_RESCTRL +int rdt_get_intel_pmt_mon_config(void); +void rdt_get_intel_pmt_mount(void); +#else +static inline int rdt_get_intel_pmt_mon_config(void) { return 0; } +static inline void rdt_get_intel_pmt_mount(void) { } +#endif void __exit rdt_put_mon_l3_config(void); bool __init rdt_cpu_has(int flag); void mon_event_count(void *info); diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resct= rl/core.c index 75a815383427..c18d79e470d2 100644 --- a/arch/x86/kernel/cpu/resctrl/core.c +++ b/arch/x86/kernel/cpu/resctrl/core.c @@ -972,6 +972,7 @@ static __init bool get_rdt_alloc_resources(void) static __init bool get_rdt_mon_resources(void) { struct rdt_resource *r =3D &rdt_resources_all[RDT_RESOURCE_L3].r_resctrl; + int ret1 =3D -EINVAL, ret2; =20 if (rdt_cpu_has(X86_FEATURE_CQM_OCCUP_LLC)) rdt_mon_features |=3D (1 << QOS_L3_OCCUP_EVENT_ID); @@ -980,15 +981,17 @@ static __init bool get_rdt_mon_resources(void) if (rdt_cpu_has(X86_FEATURE_CQM_MBM_LOCAL)) rdt_mon_features |=3D (1 << QOS_L3_MBM_LOCAL_EVENT_ID); =20 - if (!rdt_mon_features) - return false; + if (rdt_mon_features) + ret1 =3D rdt_get_mon_l3_config(r); + + ret2 =3D rdt_get_intel_pmt_mon_config(); =20 if (is_mbm_local_enabled()) mba_mbps_default_event =3D QOS_L3_MBM_LOCAL_EVENT_ID; else if (is_mbm_total_enabled()) mba_mbps_default_event =3D QOS_L3_MBM_TOTAL_EVENT_ID; =20 - return !rdt_get_mon_l3_config(r); + return ret1 =3D=3D 0 || ret2; } =20 static __init void __check_quirks_intel(void) diff --git a/arch/x86/kernel/cpu/resctrl/intel_pmt.c b/arch/x86/kernel/cpu/= resctrl/intel_pmt.c new file mode 100644 index 000000000000..44373052ca49 --- /dev/null +++ b/arch/x86/kernel/cpu/resctrl/intel_pmt.c @@ -0,0 +1,169 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Resource Director Technology(RDT) + * - Intel Telemetry Event Monitoring code + * + * Copyright (C) 2025 Intel Corporation + * + * Author: + * Tony Luck + */ + +#define pr_fmt(fmt) "resctrl: " fmt + +#include +#include +#include +#include "fake_intel_pmt_features.h" +#include +#include + +#include "internal.h" + +static struct pmt_feature_group *feat_energy; +static struct pmt_feature_group *feat_perf; + +enum pmt_event_id { + PMT_EVENT_ENERGY, + PMT_EVENT_ACTIVITY, + PMT_EVENT_STALLS_LLC_HIT, + PMT_EVENT_C1_RES, + PMT_EVENT_UNHALTED_CORE_CYCLES, + PMT_EVENT_STALLS_LLC_MISS, + PMT_EVENT_AUTO_C6_RES, + PMT_EVENT_UNHALTED_REF_CYCLES, + PMT_EVENT_UOPS_RETIRED, + + PMT_NUM_EVENTS +}; + +enum evt_type { + EVT_U64, + EVT_U46_18, +}; + +#define EVT(id, evtname, offset, t) \ + { \ + .evt =3D { \ + .evtid =3D id, \ + .name =3D evtname \ + }, \ + .evt_offset =3D offset, \ + .evt_type =3D t \ + } + +struct pmt_event { + struct mon_evt evt; + int evt_offset; + enum evt_type evt_type; +}; + +struct telem_entry { + char *name; + int guid; + int num_rmids; + int stride; + int overflow_counter_off; + int last_overflow_tstamp_off; + int last_update_tstamp_off; + bool active; + struct pmt_event evts[]; +}; + +static struct telem_entry *telem_entry[] =3D { + NULL +}; + +static struct pkg_info { + int count; + struct telemetry_region *regions; +} *pkg_info; + +static bool count_events(struct pkg_info *pkg, int max_pkgs, struct pmt_fe= ature_group *p) +{ + struct telem_entry **tentry; + bool found =3D false; + + for (int i =3D 0; i < p->count; i++) { + struct telemetry_region *tr =3D &p->regions[i]; + + for (tentry =3D telem_entry; *tentry; tentry++) { + if (tr->guid =3D=3D (*tentry)->guid) { + if (tr->plat_info.package_id > max_pkgs) { + pr_warn_once("Bad package %d\n", tr->plat_info.package_id); + continue; + } + found =3D true; + (*tentry)->active =3D true; + pkg[tr->plat_info.package_id].count++; + break; + } + } + } + + return found; +} + +DEFINE_FREE(intel_pmt_put_feature_group, struct pmt_feature_group *, \ + if (!IS_ERR_OR_NULL(_T)) \ + intel_pmt_put_feature_group(_T)) + +static bool get_events(void) +{ + struct pmt_feature_group *p1 __free(intel_pmt_put_feature_group) =3D NULL; + struct pmt_feature_group *p2 __free(intel_pmt_put_feature_group) =3D NULL; + int num_pkgs =3D topology_max_packages(); + struct pkg_info *pkg __free(kfree) =3D NULL; + + pkg =3D kmalloc_array(num_pkgs, sizeof(*pkg_info), GFP_KERNEL | __GFP_ZER= O); + if (!pkg) + return false; + + p1 =3D intel_pmt_get_regions_by_feature(FEATURE_PER_RMID_ENERGY_TELEM); + p2 =3D intel_pmt_get_regions_by_feature(FEATURE_PER_RMID_PERF_TELEM); + + if (IS_ERR_VALUE(p1) && IS_ERR_VALUE(p1)) + return false; + + if (!IS_ERR_VALUE(p1)) + if (!count_events(pkg, num_pkgs, p1)) + intel_pmt_put_feature_group(no_free_ptr(p1)); + if (!IS_ERR_VALUE(p2)) + if (!count_events(pkg, num_pkgs, p2)) + intel_pmt_put_feature_group(no_free_ptr(p2)); + + if (!IS_ERR_OR_NULL(p1)) + feat_energy =3D no_free_ptr(p1); + if (!IS_ERR_OR_NULL(p2)) + feat_perf =3D no_free_ptr(p2); + pkg_info =3D no_free_ptr(pkg); + + return true; +} + +int rdt_get_intel_pmt_mon_config(void) +{ + struct rdt_resource *r =3D &rdt_resources_all[RDT_RESOURCE_INTEL_PMT].r_r= esctrl; + + INIT_LIST_HEAD(&r->evt_list); + + return 1; +} + +void rdt_get_intel_pmt_mount(void) +{ + struct rdt_resource *r =3D &rdt_resources_all[RDT_RESOURCE_INTEL_PMT].r_r= esctrl; + struct rdt_core_mon_domain *d, *tmp; + static int do_one_time; + + if (do_one_time) + return; + + do_one_time =3D 1; + + if (!get_events()) { + list_for_each_entry_safe(d, tmp, &r->mon_domains, hdr.list) + kfree(d); + r->mon_capable =3D false; + } +} diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/r= esctrl/rdtgroup.c index d2f3718f16af..4259bded5b7b 100644 --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c @@ -2645,6 +2645,9 @@ static int rdt_get_tree(struct fs_context *fc) =20 cpus_read_lock(); mutex_lock(&rdtgroup_mutex); + + rdt_get_intel_pmt_mount(); + /* * resctrl file system can only be mounted once. */ diff --git a/arch/x86/kernel/cpu/resctrl/Makefile b/arch/x86/kernel/cpu/res= ctrl/Makefile index 72621ea6cd6a..fc79e767b263 100644 --- a/arch/x86/kernel/cpu/resctrl/Makefile +++ b/arch/x86/kernel/cpu/resctrl/Makefile @@ -1,5 +1,6 @@ # SPDX-License-Identifier: GPL-2.0 obj-$(CONFIG_X86_CPU_RESCTRL) +=3D core.o rdtgroup.o monitor.o obj-$(CONFIG_X86_CPU_RESCTRL) +=3D ctrlmondata.o pseudo_lock.o +obj-$(CONFIG_INTEL_PMT_RESCTRL) +=3D intel_pmt.o obj-$(CONFIG_INTEL_PMT_RESCTRL) +=3D fake_intel_pmt_features.o CFLAGS_pseudo_lock.o =3D -I$(src) --=20 2.48.1 From nobody Sun Feb 8 02:55:38 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 0F67423E333 for ; Mon, 3 Mar 2025 23:34:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044895; cv=none; b=czk0wGD34XHWeE+pk4P94PcHnLWkeLHdqAQX4O7SVNUeK7ZLs00pZN1MXtb6cYEc7wQ3wbMHmmBV/1exuwIZSvpN4wJmOGsKVIqe8MTyfLV8TwKrvRIIhlxjvlCeI3iOwWcW9kHhewSejNvJCzGQodXuwPZQon2fHt1R5+e7PQs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044895; c=relaxed/simple; bh=d7RQfizMQbYx4OTl2luYPTFNKrA57PgoWS6A/03o7W8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Coh96MhSz7/SiwJuW+gWojYJV1twg5zRnLH2H5/fgbmKt7RMVfOZmXI/+eoQK5HYxCjtLJ1ZdBlAMZu4q4r7DPoPethFGjO+daf//mrTgenImzotg/TMBNvCJq2pV7X5VvMlusjSMctH8lGC0147wuzNQCkWKF5erMpWez05Ucc= 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=EleZ5YpN; arc=none smtp.client-ip=192.198.163.17 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="EleZ5YpN" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741044893; x=1772580893; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=d7RQfizMQbYx4OTl2luYPTFNKrA57PgoWS6A/03o7W8=; b=EleZ5YpNzBOXOE+knpQVEooQwPCsbLtfAeAg1cwlhfG8h/gpZACZ44HA 3puS0rthhx8dA2nqbUtuaBdK2xHK+ElXwdiVAAjKTWKfkKzUJOAnyTuqt XfHuDwbjkAnb0t44kanbjt8u3+t3K7ZZkOUHeKHUQ3Q25T2E6sl2LooXg Pk1iDUbvJJGB2mIW9lwl/NJ0fWW2s2LyG/Vh6Gx/062PE+FMSNBQZ+/yO 4L5q17Q6A0c/Sg/KmtVhg/YKVpuj2adV+pLOz1WGyKvR3JXDO6M54Zisz AzimxkVoLy9/GxK6FvjMwKIrZYXhrBUZqMNzu2U+LZIi43jquTRZNosiW Q==; X-CSE-ConnectionGUID: OmRO7X07T/KyO0Rsw7TikA== X-CSE-MsgGUID: nTYVQdFwQT2Xd2urnpdwMQ== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41835957" X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="41835957" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:34:47 -0800 X-CSE-ConnectionGUID: cgak7XuLRfK2/yvUzIkgew== X-CSE-MsgGUID: wQBnkkGqT3e0lCNvfpvjyg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="117982296" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:33:52 -0800 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [RFC PATCH 09/17] x86/resctrl: Add Intel PMT domain specific code Date: Mon, 3 Mar 2025 15:33:29 -0800 Message-ID: <20250303233340.333743-10-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250303233340.333743-1-tony.luck@intel.com> References: <20250303233340.333743-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: quoted-printable Content-Type: text/plain; charset="utf-8" Domain specific initialization and tear down. Very simple as there are no domain specific elements that need to be allocated or initiailazed. Just the domain itself. This does need the mkdir_mondata_subdir_allrdtgrp() and rmdir_mondata_subdir_allrdtgrp() functions. So change them from static to global so they can be called from other source files. Signed-off-by: Tony Luck --- arch/x86/kernel/cpu/resctrl/internal.h | 7 +++++++ arch/x86/kernel/cpu/resctrl/core.c | 12 ++++++++++++ arch/x86/kernel/cpu/resctrl/intel_pmt.c | 16 ++++++++++++++++ arch/x86/kernel/cpu/resctrl/rdtgroup.c | 6 ++---- 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/r= esctrl/internal.h index f530382d8871..65bbe223f8a1 100644 --- a/arch/x86/kernel/cpu/resctrl/internal.h +++ b/arch/x86/kernel/cpu/resctrl/internal.h @@ -640,9 +640,12 @@ int rdt_get_mon_l3_config(struct rdt_resource *r); #ifdef CONFIG_INTEL_PMT_RESCTRL int rdt_get_intel_pmt_mon_config(void); void rdt_get_intel_pmt_mount(void); +void setup_intel_pmt_mon_domain(int cpu, int id, struct rdt_resource *r, s= truct list_head *add_pos); #else static inline int rdt_get_intel_pmt_mon_config(void) { return 0; } static inline void rdt_get_intel_pmt_mount(void) { } +static inline void setup_intel_pmt_mon_domain(int cpu, int id, struct rdt_= resource *r, + struct list_head *add_pos) { } #endif void __exit rdt_put_mon_l3_config(void); bool __init rdt_cpu_has(int flag); @@ -667,4 +670,8 @@ void resctrl_file_fflags_init(const char *config, unsig= ned long fflags); void rdt_staged_configs_clear(void); bool closid_allocated(unsigned int closid); int resctrl_find_cleanest_closid(void); +void mkdir_mondata_subdir_allrdtgrp(struct rdt_resource *r, + struct rdt_domain_hdr *hdr); +void rmdir_mondata_subdir_allrdtgrp(struct rdt_resource *r, + struct rdt_domain_hdr *hdr); #endif /* _ASM_X86_RESCTRL_INTERNAL_H */ diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resct= rl/core.c index c18d79e470d2..b6e6a25520f7 100644 --- a/arch/x86/kernel/cpu/resctrl/core.c +++ b/arch/x86/kernel/cpu/resctrl/core.c @@ -657,6 +657,9 @@ static void domain_add_cpu_mon(int cpu, struct rdt_reso= urce *r) case RDT_RESOURCE_L3: setup_l3_mon_domain(cpu, id, r, add_pos); break; + case RDT_RESOURCE_INTEL_PMT: + setup_intel_pmt_mon_domain(cpu, id, r, add_pos); + break; default: WARN_ON_ONCE(1); } @@ -752,6 +755,15 @@ static void domain_remove_cpu_mon(int cpu, struct rdt_= resource *r) synchronize_rcu(); mon_domain_free(hw_dom); break; + case RDT_RESOURCE_INTEL_PMT: + mutex_lock(&rdtgroup_mutex); + if (resctrl_mounted && resctrl_arch_mon_capable()) + rmdir_mondata_subdir_allrdtgrp(r, hdr); + mutex_unlock(&rdtgroup_mutex); + list_del_rcu(&hdr->list); + synchronize_rcu(); + kfree(container_of(hdr, struct rdt_core_mon_domain, hdr)); + break; } } =20 diff --git a/arch/x86/kernel/cpu/resctrl/intel_pmt.c b/arch/x86/kernel/cpu/= resctrl/intel_pmt.c index 44373052ca49..76ec42a67c48 100644 --- a/arch/x86/kernel/cpu/resctrl/intel_pmt.c +++ b/arch/x86/kernel/cpu/resctrl/intel_pmt.c @@ -167,3 +167,19 @@ void rdt_get_intel_pmt_mount(void) r->mon_capable =3D false; } } + +void setup_intel_pmt_mon_domain(int cpu, int id, struct rdt_resource *r, s= truct list_head *add_pos) +{ + struct rdt_core_mon_domain *hw_dom; + + hw_dom =3D kzalloc_node(sizeof(*hw_dom), GFP_KERNEL, cpu_to_node(cpu)); + if (!hw_dom) + return; + + hw_dom->hdr.id =3D id; + hw_dom->hdr.type =3D RESCTRL_MON_DOMAIN; + cpumask_set_cpu(cpu, &hw_dom->hdr.cpu_mask); + list_add_tail_rcu(&hw_dom->hdr.list, add_pos); + if (resctrl_mounted && resctrl_arch_mon_capable()) + mkdir_mondata_subdir_allrdtgrp(r, &hw_dom->hdr); +} diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/r= esctrl/rdtgroup.c index 4259bded5b7b..93da2e4f7fec 100644 --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c @@ -3041,8 +3041,7 @@ static void mon_rmdir_one_subdir(struct kernfs_node *= pkn, char *name, char *subn * Remove files and directories containing "sum" of domain data * when last domain being summed is removed. */ -static void rmdir_mondata_subdir_allrdtgrp(struct rdt_resource *r, - struct rdt_domain_hdr *hdr) +void rmdir_mondata_subdir_allrdtgrp(struct rdt_resource *r, struct rdt_dom= ain_hdr *hdr) { struct rdtgroup *prgrp, *crgrp; char subname[32]; @@ -3170,8 +3169,7 @@ static int mkdir_mondata_subdir(struct kernfs_node *p= arent_kn, * Add all subdirectories of mon_data for "ctrl_mon" groups * and "monitor" groups with given domain id. */ -static void mkdir_mondata_subdir_allrdtgrp(struct rdt_resource *r, - struct rdt_domain_hdr *hdr) +void mkdir_mondata_subdir_allrdtgrp(struct rdt_resource *r, struct rdt_dom= ain_hdr *hdr) { struct kernfs_node *parent_kn; struct rdtgroup *prgrp, *crgrp; --=20 2.48.1 From nobody Sun Feb 8 02:55:38 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 C5D9F23717F for ; Mon, 3 Mar 2025 23:34:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044895; cv=none; b=oipbpG9s9bwyCJECsxSYKnaO1qS8oNLxJQfAUVaWsPkE+0DkP4FscGLxhv2+ABnVdqsclNfAkOQ7S6RqXP8kkhoIbrh6SELDnQlfvS/aeGvjFR9NAkwKAOVdSis52tpW7xL5HjnJKiDu0sCvtgL9tmk3HxSZW4nEygtr+0xwt5o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044895; c=relaxed/simple; bh=dUOelVMIQQD73F+GAf+V+9g1dvlZdazGdQL8u6euTHI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YOo/ENZRHTnkgailM1r6vkdHH+9AmZZMtALqUAlWuzXvdtn5R2AO9Xj1ubPHpwG6XxtvdeSKPtdiribAnbBRP7jU9KmSE6YQx87JnMN/n8Cs22rznVsEsOPglfG60/ahjRFi8QKa5MlGKXv5pYgPz+c70OglEDibR4k5AFeMcBM= 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=bEdljwJ0; arc=none smtp.client-ip=192.198.163.17 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="bEdljwJ0" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741044894; x=1772580894; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dUOelVMIQQD73F+GAf+V+9g1dvlZdazGdQL8u6euTHI=; b=bEdljwJ0qDL8x4aT2tgJo320I4Hq6eUQfNbzRvJxcSpRn1W+6bmw/J2K hHFf4hZ1WinUj3SoieYbr7ZrL+547yj04jOS4mwqVQFSET8p0CfofetPX NEenD7na9jd/parBdeA7gSY2Szjqi9rcp3ES6M1olgCtN5XVepdu1etfH IxizwksYWyZgNVhnuVYGrXZjhkGhUPFebjfPF0B3OvBwTNuQb1iqRMjnP Bai6tLZWap7U9yPUO/+IUYPm672SB8jZrk3p/wZra3uPoC+4Xl6FDj9nq sdPv8li4qiOoM96IjFByFZijGMU8YF7GQXVmOO8cPYknJFyc/kPE+4Zz6 g==; X-CSE-ConnectionGUID: q7RZJiqDTVeSF/l1VfL+1w== X-CSE-MsgGUID: 6kMDZgrARYuSsWqclfbfvA== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41835962" X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="41835962" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:34:47 -0800 X-CSE-ConnectionGUID: 0g3CZYF7QdqyW55C6dFfFQ== X-CSE-MsgGUID: Vjr083SeSjC+Ly+ovxcDjw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="117982298" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:33:52 -0800 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [RFC PATCH 10/17] x86/resctrl: Add detailed descriptions for Clearwater Forest events Date: Mon, 3 Mar 2025 15:33:30 -0800 Message-ID: <20250303233340.333743-11-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250303233340.333743-1-tony.luck@intel.com> References: <20250303233340.333743-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: quoted-printable Content-Type: text/plain; charset="utf-8" There are two event groups one for energy reporting and another for "perf" events. See the XML description files in https://github.com/intel/Intel-PMT in the xml/CWF/OOBMSM/{RMID-ENERGY,RMID-PERF}/ for the detailed descriptions that were used to derive these descriptions. Signed-off-by: Tony Luck --- arch/x86/kernel/cpu/resctrl/intel_pmt.c | 43 +++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/arch/x86/kernel/cpu/resctrl/intel_pmt.c b/arch/x86/kernel/cpu/= resctrl/intel_pmt.c index 76ec42a67c48..78ab6d899ee2 100644 --- a/arch/x86/kernel/cpu/resctrl/intel_pmt.c +++ b/arch/x86/kernel/cpu/resctrl/intel_pmt.c @@ -70,7 +70,50 @@ struct telem_entry { struct pmt_event evts[]; }; =20 +#define CWF_NUM_RMIDS 576 +#define CWF_ENERGY_GUID 0x26696143 +#define CWF_PERF_GUID 0x26557651 +#define CWF_ENERGY_STRIDE 0x10 +#define CWF_PERF_STRIDE 0x38 + +static struct telem_entry cwf_energy =3D { + .name =3D "energy", + .guid =3D CWF_ENERGY_GUID, + .num_rmids =3D CWF_NUM_RMIDS, + .stride =3D CWF_ENERGY_STRIDE, + .overflow_counter_off =3D CWF_NUM_RMIDS * CWF_ENERGY_STRIDE, + .last_overflow_tstamp_off =3D CWF_NUM_RMIDS * CWF_ENERGY_STRIDE + 8, + .last_update_tstamp_off =3D CWF_NUM_RMIDS * CWF_ENERGY_STRIDE + 16, + .evts =3D { + EVT(PMT_EVENT_ENERGY, "core_energy", 0x0, EVT_U46_18), + EVT(PMT_EVENT_ACTIVITY, "activity", 0x8, EVT_U46_18), + { } + } +}; + +static struct telem_entry cwf_perf =3D { + .name =3D "perf", + .guid =3D CWF_PERF_GUID, + .num_rmids =3D CWF_NUM_RMIDS, + .stride =3D CWF_PERF_STRIDE, + .overflow_counter_off =3D CWF_NUM_RMIDS * CWF_PERF_STRIDE, + .last_overflow_tstamp_off =3D CWF_NUM_RMIDS * CWF_PERF_STRIDE + 8, + .last_update_tstamp_off =3D CWF_NUM_RMIDS * CWF_PERF_STRIDE + 16, + .evts =3D { + EVT(PMT_EVENT_STALLS_LLC_HIT, "stalls_llc_hit", 0x0, EVT_U64), + EVT(PMT_EVENT_C1_RES, "c1_res", 0x8, EVT_U64), + EVT(PMT_EVENT_UNHALTED_CORE_CYCLES, "unhalted_core_cycles", 0x10, EVT_U6= 4), + EVT(PMT_EVENT_STALLS_LLC_MISS, "stalls_llc_miss", 0x18, EVT_U64), + EVT(PMT_EVENT_AUTO_C6_RES, "c6_res", 0x20, EVT_U64), + EVT(PMT_EVENT_UNHALTED_REF_CYCLES, "unhalted_ref_cycles", 0x28, EVT_U64), + EVT(PMT_EVENT_UOPS_RETIRED, "uops_retired", 0x30, EVT_U64), + { } + } +}; + static struct telem_entry *telem_entry[] =3D { + &cwf_energy, + &cwf_perf, NULL }; =20 --=20 2.48.1 From nobody Sun Feb 8 02:55:38 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 83EB923FC55 for ; Mon, 3 Mar 2025 23:34:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044897; cv=none; b=SBPa2sSdauP2DgQxRUR1J370VRzyHUQC4F8RW1kRe25fHuWsvQkAs+jK+uK55p/o51tH5QFuqirKaBVMh2Ds02S5Xk+6Du9WEb0z1cSJUvZluhRZfdAoXP5AI51tHkLlHjp8yN3jIAUfo1aroPLj0h5YtlsEMCssY8OKxrcJoLk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044897; c=relaxed/simple; bh=1hF9NovdTOsuXEs606/4Dcli0cFwIcM5+7g4ZF3CmC0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=T/RO13KmneKhESMxM0IPTBGnMgjWXyMeRITCPbO1plNKD3tDl2ASy/5Tc+1R0+uN+2Auo57tGR9pHDYJBjHeTQ/TeYRm41XmvEkrfBWW6N2MWCae1aanYGlNRvdWdRY/EcRycZ0V3O71MQb2OFLvCWasVjz/EJEtyPsY94ajuA8= 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=m9biErsM; arc=none smtp.client-ip=192.198.163.17 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="m9biErsM" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741044896; x=1772580896; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=1hF9NovdTOsuXEs606/4Dcli0cFwIcM5+7g4ZF3CmC0=; b=m9biErsMa0P3dMm4xrjqP5vPL7D6HCfhWjzW8lYD3TOeV68lgAgN465F 7RiMiT/3ou9CW0td2xOF5DJtn1QNysgUcZnuhIsWsiZJPyzE3EJOWnSkr gMojTUDTtu2pyuvk61gMJPa2dofXmZhE85ZEnFJ83ug8229Ff/cSR1Pmz pVpVbc0Q7ygWEsAnVvayJpSv89VVKtTVeAMRkAzcBgr/8X1G85ZAXpKip NCju/7yN76yfa4ZbjEWW+t0m+fZ/DfwpPbwrzMcRMgDjM/zz/AswsOWEQ D0uc7cL5Jel4bKjAwUK2Pk4Yjc4donNCJFfnqs0obiNZcFK/AoVCm3fcf g==; X-CSE-ConnectionGUID: UZHmQyKLQpKJFtJLq3IVcA== X-CSE-MsgGUID: mfT3jh/aQlWoZGPCyg0V3g== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41835973" X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="41835973" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:34:47 -0800 X-CSE-ConnectionGUID: pjvIxtq4R1C1QEITnByiJw== X-CSE-MsgGUID: Au7//yb8TdOwVjLacEdkzg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="117982300" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:33:52 -0800 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [RFC PATCH 11/17] x86/resctrl: Allocate per-package structures for known events Date: Mon, 3 Mar 2025 15:33:31 -0800 Message-ID: <20250303233340.333743-12-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250303233340.333743-1-tony.luck@intel.com> References: <20250303233340.333743-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: quoted-printable Content-Type: text/plain; charset="utf-8" Use the per-package counts of known events to allocate arrays to make a copy of just the known events. Add hook into resctrl_exit() to cleanup. Signed-off-by: Tony Luck --- arch/x86/kernel/cpu/resctrl/internal.h | 2 + arch/x86/kernel/cpu/resctrl/core.c | 2 + arch/x86/kernel/cpu/resctrl/intel_pmt.c | 59 ++++++++++++++++++++++++- 3 files changed, 62 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/r= esctrl/internal.h index 65bbe223f8a1..24c4ab331c3c 100644 --- a/arch/x86/kernel/cpu/resctrl/internal.h +++ b/arch/x86/kernel/cpu/resctrl/internal.h @@ -641,11 +641,13 @@ int rdt_get_mon_l3_config(struct rdt_resource *r); int rdt_get_intel_pmt_mon_config(void); void rdt_get_intel_pmt_mount(void); void setup_intel_pmt_mon_domain(int cpu, int id, struct rdt_resource *r, s= truct list_head *add_pos); +void rdt_intel_pmt_exit(void); #else static inline int rdt_get_intel_pmt_mon_config(void) { return 0; } static inline void rdt_get_intel_pmt_mount(void) { } static inline void setup_intel_pmt_mon_domain(int cpu, int id, struct rdt_= resource *r, struct list_head *add_pos) { } +static inline void rdt_intel_pmt_exit(void) { }; #endif void __exit rdt_put_mon_l3_config(void); bool __init rdt_cpu_has(int flag); diff --git a/arch/x86/kernel/cpu/resctrl/core.c b/arch/x86/kernel/cpu/resct= rl/core.c index b6e6a25520f7..da44d00acd98 100644 --- a/arch/x86/kernel/cpu/resctrl/core.c +++ b/arch/x86/kernel/cpu/resctrl/core.c @@ -1170,6 +1170,8 @@ static void __exit resctrl_exit(void) =20 cpuhp_remove_state(rdt_online); =20 + rdt_intel_pmt_exit(); + rdtgroup_exit(); =20 if (r->mon_capable) diff --git a/arch/x86/kernel/cpu/resctrl/intel_pmt.c b/arch/x86/kernel/cpu/= resctrl/intel_pmt.c index 78ab6d899ee2..754748d858c6 100644 --- a/arch/x86/kernel/cpu/resctrl/intel_pmt.c +++ b/arch/x86/kernel/cpu/resctrl/intel_pmt.c @@ -147,6 +147,26 @@ static bool count_events(struct pkg_info *pkg, int max= _pkgs, struct pmt_feature_ return found; } =20 +static int setup(struct pkg_info *pkg, int pkgnum, struct pmt_feature_grou= p *p, int slot) +{ + struct telem_entry **tentry; + + for (int i =3D 0; i < p->count; i++) { + for (tentry =3D telem_entry; *tentry; tentry++) { + if (!(*tentry)->active) + continue; + if (pkgnum !=3D p->regions[i].plat_info.package_id) + continue; + if (p->regions[i].guid !=3D (*tentry)->guid) + continue; + + pkg[pkgnum].regions[slot++] =3D p->regions[i]; + } + } + + return slot; +} + DEFINE_FREE(intel_pmt_put_feature_group, struct pmt_feature_group *, \ if (!IS_ERR_OR_NULL(_T)) \ intel_pmt_put_feature_group(_T)) @@ -157,6 +177,8 @@ static bool get_events(void) struct pmt_feature_group *p2 __free(intel_pmt_put_feature_group) =3D NULL; int num_pkgs =3D topology_max_packages(); struct pkg_info *pkg __free(kfree) =3D NULL; + bool found_known_features =3D false; + int i, slot; =20 pkg =3D kmalloc_array(num_pkgs, sizeof(*pkg_info), GFP_KERNEL | __GFP_ZER= O); if (!pkg) @@ -175,13 +197,32 @@ static bool get_events(void) if (!count_events(pkg, num_pkgs, p2)) intel_pmt_put_feature_group(no_free_ptr(p2)); =20 + for (i =3D 0; i < num_pkgs; i++) { + if (!pkg[i].count) + continue; + found_known_features =3D true; + pkg[i].regions =3D kmalloc_array(pkg[i].count, sizeof(*pkg[i].regions), = GFP_KERNEL); + if (!pkg[i].regions) + goto fail; + + slot =3D 0; + if (!IS_ERR_VALUE(p1)) + slot =3D setup(pkg, i, p1, slot); + if (!IS_ERR_VALUE(p2)) + slot =3D setup(pkg, i, p2, slot); + } + if (!IS_ERR_OR_NULL(p1)) feat_energy =3D no_free_ptr(p1); if (!IS_ERR_OR_NULL(p2)) feat_perf =3D no_free_ptr(p2); pkg_info =3D no_free_ptr(pkg); =20 - return true; + return found_known_features; +fail: + while (--i > 0) + kfree(pkg[i].regions); + return false; } =20 int rdt_get_intel_pmt_mon_config(void) @@ -193,6 +234,22 @@ int rdt_get_intel_pmt_mon_config(void) return 1; } =20 +void rdt_intel_pmt_exit(void) +{ + int num_pkgs =3D topology_max_packages(); + + if (pkg_info) { + for (int i =3D 0; i < num_pkgs; i++) + kfree(pkg_info[i].regions); + kfree(pkg_info); + } + + if (feat_energy) + intel_pmt_put_feature_group(feat_energy); + if (feat_perf) + intel_pmt_put_feature_group(feat_perf); +} + void rdt_get_intel_pmt_mount(void) { struct rdt_resource *r =3D &rdt_resources_all[RDT_RESOURCE_INTEL_PMT].r_r= esctrl; --=20 2.48.1 From nobody Sun Feb 8 02:55:38 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 7AEDE23F28D for ; Mon, 3 Mar 2025 23:34:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044896; cv=none; b=Z7U/5Rdxhxg0oDMy+/qa2j60OadufF94fNKaFDBQQQI461z5SCiC88da0fo3AfYuEcvQOh7ut2YFN45rnfbcdYpEp+1moubTpIEeJY33x2gZo/V13ooz+tWmaqNRNx7sJSknxaj8jyzOiaruIS4/yqZD6V1mnwCXF0mqeJaOz0w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044896; c=relaxed/simple; bh=4MoQg5m1EvWqC4eUPuuvU9SN1nimbFf5mvHqPzoqqSs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bTXsucN9qobpIf/nOhLp5KCgNaxBWSPF67rVO+W7YbZ9Gc7BYl/u53Ku4RswjjjGfrqtOsJEotNsQ8T4TefITul92GT0z1TOMDYHZRE/fVvyZPQnAZNy2ON//kp+JNsyZzQ6fxmtdOLkCnJdoQUy94AeXa/Nr9Ze5KLxoqTTaxs= 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=L8fRAQZz; arc=none smtp.client-ip=192.198.163.17 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="L8fRAQZz" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741044895; x=1772580895; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4MoQg5m1EvWqC4eUPuuvU9SN1nimbFf5mvHqPzoqqSs=; b=L8fRAQZzmdWeShR2ruzqxp/W/zkR24bMDE0ZjvP+yCC0+t2ZsGtHYQij DxFJ/5v1JiLNJNPZUQdHDAn2D23+thMQZgsmajEJlkrNBYfYqJsGmtSxy ae/vx9zVZ8C/kGAola5EeEhjhkTjSs8i2guMFI3CSQdRfId+rxHzXM/X3 kSXhDRA3s2ro3pacmYMqcAQLbj1lv1Ee+63x9boDCogZzHQdDgeXdIURD 1hZUy5yxF0T7JI2ep7tkvZj5MyBva6NNNaP7H/Qoqcf7j6xbCRXYv5pJx cc+Sx8ou6VymIy3QMVfnnwWfoponAZ6DbPKH76hS6HCA9CKm4E49ES4Yp w==; X-CSE-ConnectionGUID: 6QBGma1GT62mb0O7jRmy3Q== X-CSE-MsgGUID: AeYlrbuLQqW6fSNLvbkqyQ== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41835976" X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="41835976" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:34:47 -0800 X-CSE-ConnectionGUID: QNCp+lAXSwKixeh97KdsSw== X-CSE-MsgGUID: I+AbBn3jRhKXI4y+W11s4Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="117982302" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:33:53 -0800 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [RFC PATCH 12/17] x86/resctrl: Add list of known events to RDT_RESOURCE_INTEL_PMT Date: Mon, 3 Mar 2025 15:33:32 -0800 Message-ID: <20250303233340.333743-13-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250303233340.333743-1-tony.luck@intel.com> References: <20250303233340.333743-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: quoted-printable Content-Type: text/plain; charset="utf-8" Core code uses this list to populate "mon_data" directories. Signed-off-by: Tony Luck --- arch/x86/kernel/cpu/resctrl/intel_pmt.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/arch/x86/kernel/cpu/resctrl/intel_pmt.c b/arch/x86/kernel/cpu/= resctrl/intel_pmt.c index 754748d858c6..05640e85d303 100644 --- a/arch/x86/kernel/cpu/resctrl/intel_pmt.c +++ b/arch/x86/kernel/cpu/resctrl/intel_pmt.c @@ -13,6 +13,7 @@ =20 #include #include +#include #include #include "fake_intel_pmt_features.h" #include @@ -254,14 +255,35 @@ void rdt_get_intel_pmt_mount(void) { struct rdt_resource *r =3D &rdt_resources_all[RDT_RESOURCE_INTEL_PMT].r_r= esctrl; struct rdt_core_mon_domain *d, *tmp; + struct telem_entry **tentry; static int do_one_time; + struct mon_evt *evt; + bool ret =3D false; =20 if (do_one_time) return; =20 do_one_time =3D 1; =20 - if (!get_events()) { + if (!get_events()) + goto done; + + for (tentry =3D telem_entry; *tentry; tentry++) { + if (!(*tentry)->active) + continue; + for (int i =3D 0; (*tentry)->evts[i].evt.name; i++) { + evt =3D &(*tentry)->evts[i].evt; + list_add_tail(&evt->list, &r->evt_list); + ret =3D true; + } + if (!r->num_rmid) + r->num_rmid =3D (*tentry)->num_rmids; + else + r->num_rmid =3D min(r->num_rmid, (*tentry)->num_rmids); + } +done: + if (!ret) { + r->mon_capable =3D false; list_for_each_entry_safe(d, tmp, &r->mon_domains, hdr.list) kfree(d); r->mon_capable =3D false; --=20 2.48.1 From nobody Sun Feb 8 02:55:38 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 CBF242405E4 for ; Mon, 3 Mar 2025 23:34:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044897; cv=none; b=N6verzguj379aLsitEH/2n8dmZnFsHQbdpJciOEPJlz4B9+DZj/NqdHLWD0GSJ97+EfLbS8Ymp3kJSDdPRS8tnPsqIQfEcoQDJ3HXu6x65mhT3zRKHoX8+bqNOJMPmPqE9Z/L18feyYaHRsMI0kq+Phs4cvKzHoffifD1ufjWY8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044897; c=relaxed/simple; bh=QcahdaJ0srwRFNH4DR64JCumoDDRz85MfhiRqpgaJVk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AkxKadChcLMaPAIGfsbE1iPZl4fK63INTjNop7upYHHMQufg0OVYQmupy53WSgMjvStkQ82plUrjVuzWRhUk1dBfwJtWrCGlrPfvXS9zmZiO8vXb0pM6LFizMr8iROL/qCfTC1EDK7+wg5Zk29emlY1+gc41vLbZT1TvMydpmB8= 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=jADWn+m3; arc=none smtp.client-ip=192.198.163.17 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="jADWn+m3" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741044896; x=1772580896; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=QcahdaJ0srwRFNH4DR64JCumoDDRz85MfhiRqpgaJVk=; b=jADWn+m3isGb9l67z6mQTjKOCrfPj2qw/SIIjrbGVQizLsGygpiNiOds YCu79SPlyGFgDetXfm20m65kQdXXbQNY6cVeE+wAswFW82+MRgUiHo5sx FYQpACIYqYFxw9wkh95eJRPdnXrlRV9NwU1Y0zNXmf6uvdiqr2GqnSEP/ wESY3964zAxEUerAUlroogr4H08+2qyWBQE0wtdoEB080md8CE8Vj3L2q 3NJWlzpRXUU4o2MWB4/yEpzrRwTqbiviV1LXx2fAb33Conb5AYh+lCjWn aLTivY5ou741GF9fFYEYK2QEslDXXfCAurh4eZKVnmmQ+XK/uK+pjpdKr g==; X-CSE-ConnectionGUID: +O77Pjb1Q3+c3knDqnXesQ== X-CSE-MsgGUID: qFWnY2PcQqCFyqTz5BMFxA== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41835985" X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="41835985" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:34:47 -0800 X-CSE-ConnectionGUID: jKERIBNCTp2tXNsPsNHOnw== X-CSE-MsgGUID: UHK9V27VQHeTxQNeXIXsFw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="117982304" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:33:53 -0800 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [RFC PATCH 13/17] x86/resctrl: Build lookup table for package events Date: Mon, 3 Mar 2025 15:33:33 -0800 Message-ID: <20250303233340.333743-14-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250303233340.333743-1-tony.luck@intel.com> References: <20250303233340.333743-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: quoted-printable Content-Type: text/plain; charset="utf-8" The resctrl filesystem saves the evt_type in the private data pointer of the kernfs_node of each file in the mon_data directories. To print the values for each file the show() function will need to map from this evtid to: num_rmids - to make sure data for this file exists guid - to pick the pmt_event(s) for each package stride/offset - to compute MMIO offset for this RMID/event Build a lookup table for each event to save searching through lists and add macros for ease of use. Signed-off-by: Tony Luck --- arch/x86/kernel/cpu/resctrl/intel_pmt.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/arch/x86/kernel/cpu/resctrl/intel_pmt.c b/arch/x86/kernel/cpu/= resctrl/intel_pmt.c index 05640e85d303..c5557d7f5fbe 100644 --- a/arch/x86/kernel/cpu/resctrl/intel_pmt.c +++ b/arch/x86/kernel/cpu/resctrl/intel_pmt.c @@ -38,6 +38,18 @@ enum pmt_event_id { PMT_NUM_EVENTS }; =20 +static struct evtinfo { + struct telem_entry *telem_entry; + struct pmt_event *pmt_event; +} evtinfo[PMT_NUM_EVENTS]; + +#define EVT_NUM_RMIDS(evtid) (evtinfo[evtid].telem_entry->num_rmids) +#define EVT_STRIDE(evtid) (evtinfo[evtid].telem_entry->stride) +#define EVT_GUID(evtid) (evtinfo[evtid].telem_entry->guid) + +#define EVT_OFFSET(evtid) (evtinfo[evtid].pmt_event->evt_offset) +#define EVT_TYPE(evtid) (evtinfo[evtid].pmt_event->evt_type) + enum evt_type { EVT_U64, EVT_U46_18, @@ -274,6 +286,9 @@ void rdt_get_intel_pmt_mount(void) for (int i =3D 0; (*tentry)->evts[i].evt.name; i++) { evt =3D &(*tentry)->evts[i].evt; list_add_tail(&evt->list, &r->evt_list); + + evtinfo[evt->evtid].telem_entry =3D *tentry; + evtinfo[evt->evtid].pmt_event =3D &(*tentry)->evts[i]; ret =3D true; } if (!r->num_rmid) --=20 2.48.1 From nobody Sun Feb 8 02:55:38 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 46D6F241105 for ; Mon, 3 Mar 2025 23:34:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044899; cv=none; b=Bjhxosskqxo7RH460j+d1oYUFAduL9Ih2KT0wDrMLXazWsdYyXo82D92af9d+jH2IwVKzyZj63WvW/h3hit9V5cVCZFBCf45J/zlQ+MtnIlxrCFS9bCnnEpnwlvRFLM/o+99HFOFgysdsq5HBp5X87mj33+wJUbbBrL4KPhYGok= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044899; c=relaxed/simple; bh=lauvPnS4M2a1QAFyfmef5IVlXcxZNSP43rKCJluwbeU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JWWxS6VCjSmZkC6DXpTG+lUirXxlrxRMZSASrcjGdttoTwlA76gShcoJw60yFisAZ6k+U3GUNurN1pXPjW0lRuKQF+vOCoJn123tpDfTHy+ZpAfZtc0jlASbW9ntbOot/tsQh3mFDKphAFFGCSX4SGINyGxAmTNhkeD2Xm+OQsc= 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=WVr4MniR; arc=none smtp.client-ip=192.198.163.17 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="WVr4MniR" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741044896; x=1772580896; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=lauvPnS4M2a1QAFyfmef5IVlXcxZNSP43rKCJluwbeU=; b=WVr4MniRQ4kli21m11TGhQQHJAZLiDSLCEWhMCv1OrGWVjdgoo/zipPR 32Q+ybWY80w12g983sOeKEhojmdUh5kHIrK/xX/Us5pbCsGbW//SVig5H Pg+vUkTZ5GJxRRen02NezH2e5xwdUm3CflgsZxFVsISiobaxOKp0DWGDj QWpAYKdvlRJegwsOuk8LsrGJs3cLLJExU5WayeJavt2bK8MDhozhlXtvZ eLhQP2N8rFgukXt+F84kcg9XFl1zzkwM4qnHbP/qYs5UO7UyUdgRaMsVq TemXEuy5bZVJHh+KA5jq2fibfmFEpPQ/wXhOWmS16NZNFym6y3K/IM7Fn Q==; X-CSE-ConnectionGUID: UCaU097fTx+WIXbw8fdRrQ== X-CSE-MsgGUID: 809m2PcnT+i+FZS90GJkkw== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41835989" X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="41835989" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:34:47 -0800 X-CSE-ConnectionGUID: Kt6os4qxSvy59sUTBLCEnQ== X-CSE-MsgGUID: VZ7BVHMISGej9arQPvSFkw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="117982306" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:33:53 -0800 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [RFC PATCH 14/17] x86/resctrl: Add code in rdtgroup_mondata_show() for core monitor events Date: Mon, 3 Mar 2025 15:33:34 -0800 Message-ID: <20250303233340.333743-15-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250303233340.333743-1-tony.luck@intel.com> References: <20250303233340.333743-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: quoted-printable Content-Type: text/plain; charset="utf-8" There may be multiple devices tracking each package, so scan all of them and add up counters. Output format depends on the data type. Either a 63 bit integer, or a fixed point decimal. Signed-off-by: Tony Luck --- arch/x86/kernel/cpu/resctrl/internal.h | 6 ++ arch/x86/kernel/cpu/resctrl/ctrlmondata.c | 3 + arch/x86/kernel/cpu/resctrl/intel_pmt.c | 88 +++++++++++++++++++++++ 3 files changed, 97 insertions(+) diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/r= esctrl/internal.h index 24c4ab331c3c..068a47b015e7 100644 --- a/arch/x86/kernel/cpu/resctrl/internal.h +++ b/arch/x86/kernel/cpu/resctrl/internal.h @@ -639,11 +639,17 @@ void free_rmid(u32 closid, u32 rmid); int rdt_get_mon_l3_config(struct rdt_resource *r); #ifdef CONFIG_INTEL_PMT_RESCTRL int rdt_get_intel_pmt_mon_config(void); +int rdtgroup_intel_pmt_data_show(struct seq_file *m, struct rdt_resource *= r, + int domid, struct rdtgroup *rdtgrp, u32 evtid, + struct rmid_read *rr); void rdt_get_intel_pmt_mount(void); void setup_intel_pmt_mon_domain(int cpu, int id, struct rdt_resource *r, s= truct list_head *add_pos); void rdt_intel_pmt_exit(void); #else static inline int rdt_get_intel_pmt_mon_config(void) { return 0; } +static inline int rdtgroup_intel_pmt_data_show(struct seq_file *m, struct = rdt_resource *r, + int domid, struct rdtgroup *rdtgrp, u32 evtid, + struct rmid_read *rr) { return 0; } static inline void rdt_get_intel_pmt_mount(void) { } static inline void setup_intel_pmt_mon_domain(int cpu, int id, struct rdt_= resource *r, struct list_head *add_pos) { } diff --git a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c b/arch/x86/kernel/cp= u/resctrl/ctrlmondata.c index 515a9bec05cd..0c3d407aca08 100644 --- a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c +++ b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c @@ -700,6 +700,9 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg) case RDT_RESOURCE_L3: ret =3D rdtgroup_l3_data_show(m, r, domid, rdtgrp, evtid, md.u.sum, &rr); break; + case RDT_RESOURCE_INTEL_PMT: + ret =3D rdtgroup_intel_pmt_data_show(m, r, domid, rdtgrp, evtid, &rr); + break; default: ret =3D -EINVAL; break; diff --git a/arch/x86/kernel/cpu/resctrl/intel_pmt.c b/arch/x86/kernel/cpu/= resctrl/intel_pmt.c index c5557d7f5fbe..4067aacd9d80 100644 --- a/arch/x86/kernel/cpu/resctrl/intel_pmt.c +++ b/arch/x86/kernel/cpu/resctrl/intel_pmt.c @@ -320,3 +320,91 @@ void setup_intel_pmt_mon_domain(int cpu, int id, struc= t rdt_resource *r, struct if (resctrl_mounted && resctrl_arch_mon_capable()) mkdir_mondata_subdir_allrdtgrp(r, &hw_dom->hdr); } + +#define VALID_BIT BIT_ULL(63) +#define DATA_BITS GENMASK_ULL(62, 0) + +static u64 scan_pmt_devs(int package, int guid, int offset) +{ + u64 rval, val; + int ndev =3D 0; + + rval =3D 0; + + for (int i =3D 0; i < pkg_info[package].count; i++) { + if (pkg_info[package].regions[i].guid !=3D guid) + continue; + ndev++; + val =3D readq(pkg_info[package].regions[i].addr + offset); + + if (!(val & VALID_BIT)) + return ~0ull; + rval +=3D val & DATA_BITS; + } + + return ndev ? rval : ~0ull; +} + +#define NUM_FRAC_BITS 18 +#define FRAC_MASK GENMASK(NUM_FRAC_BITS - 1, 0) + +static void print_u46_18(struct seq_file *m, u64 val) +{ + u64 frac; + + frac =3D val & FRAC_MASK; + frac =3D frac * 1000000; + frac +=3D 1ul << (NUM_FRAC_BITS - 1); + frac >>=3D NUM_FRAC_BITS; + + seq_printf(m, "%llu.%06llu\n", val >> NUM_FRAC_BITS, frac); +} + +int rdtgroup_intel_pmt_data_show(struct seq_file *m, struct rdt_resource *= r, + int domid, struct rdtgroup *rdtgrp, u32 evtid, + struct rmid_read *rr) +{ + struct rdtgroup *entry; + struct list_head *head; + u64 val, cval; + int offset; + + if (rdtgrp->mon.rmid >=3D EVT_NUM_RMIDS(evtid)) { + seq_puts(m, "unimplemented\n"); + return 0; + } + + offset =3D rdtgrp->mon.rmid * EVT_STRIDE(evtid); + offset +=3D EVT_OFFSET(evtid); + + val =3D scan_pmt_devs(domid, EVT_GUID(evtid), offset); + if (val =3D=3D ~0ull) { + seq_puts(m, "unavailable\n"); + return 0; + } + + if (rdtgrp->type =3D=3D RDTCTRL_GROUP) { + head =3D &rdtgrp->mon.crdtgrp_list; + list_for_each_entry(entry, head, mon.crdtgrp_list) { + offset =3D entry->mon.rmid * EVT_STRIDE(evtid); + offset +=3D EVT_OFFSET(evtid); + cval =3D scan_pmt_devs(domid, EVT_GUID(evtid), offset); + if (cval =3D=3D ~0ull) { + seq_puts(m, "unavailable\n"); + return 0; + } + val +=3D cval; + } + } + + switch (EVT_TYPE(evtid)) { + case EVT_U64: + seq_printf(m, "%llu\n", val); + break; + case EVT_U46_18: + print_u46_18(m, val); + break; + } + + return 0; +} --=20 2.48.1 From nobody Sun Feb 8 02:55:38 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 C46C823FC54 for ; Mon, 3 Mar 2025 23:34:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044899; cv=none; b=doc1jcmoyRDzKSAjN8uG+wevmKGr6RIzEzqTOPDS5odXnBbYra48s+khCof680C3PnJ6Y98gW7KeDR2aRPThgBxbXpWJh3T287I2osMDEKhr3V6ufl+vq2pxU2pmB2C1xtpLbmZDMfKozpzeRCrzwyJQc7qu+CYtIGirCro+6Ws= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044899; c=relaxed/simple; bh=nEsNTILO+oJDYQMdfU/3EJz/B3Q6iXwLDlSx6wG2pIA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=agmhQO74JYgyypXSlm76QQrZCsgc8JNgsI/5qZ+EPvOVVdBwnw4XnwnE4J+oXk2JL8Ibr00EavAYERPmb9cyXd4ct6rInQkjsHoSrkTEyXtElx9uRzSVszAT5FlKqt2ryNoqBfNmaP38ddhNgv/EOArRZQ8ciVyenLrrmVvGVs0= 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=RKePqprz; arc=none smtp.client-ip=192.198.163.17 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="RKePqprz" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741044898; x=1772580898; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=nEsNTILO+oJDYQMdfU/3EJz/B3Q6iXwLDlSx6wG2pIA=; b=RKePqprz/Z9I+L0aYPE1iQ/HXuDKIVOCQ8/c7h4WOi9n0/fL0NtOAJLr qzito1y2oz4WkXwMPvFE1HdTj7NjyeCTFkG5qlq3aB5GS6U1ow6EWFfFD j+LDX9IE/G8B/aLGmdso5ZhtUJMVBA0W2JlqqisMcLcsWt+GoJyNELYhu X/fwwRZfJG3n2rdYsztjgnOSMM3da86KPFyKOvat8lTgH5SDvmXDvDIME +/uank75aeK/XDXGfo9gJUUubf3DzKivKdoy/HDGQJWdYPTYfLwBDKXDP e2zgLoCpZL2XZtPE2ZYBu5PnZfJKuy5SWJMv8Ly4+3vRQptUkWPP/CUIU w==; X-CSE-ConnectionGUID: busgVuTQRMWglpBIHdI37w== X-CSE-MsgGUID: 0B6Bu56pTWSzDAixgVXgYQ== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41836001" X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="41836001" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:34:48 -0800 X-CSE-ConnectionGUID: sD+Nu1xHR0aY9Xs5JtfndA== X-CSE-MsgGUID: aGS+uZrnS8u66wL7QIVUqg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="117982308" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:33:53 -0800 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [RFC PATCH 15/17] x86/resctrl: Add status files to info/PKG_MON Date: Mon, 3 Mar 2025 15:33:35 -0800 Message-ID: <20250303233340.333743-16-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250303233340.333743-1-tony.luck@intel.com> References: <20250303233340.333743-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: quoted-printable Content-Type: text/plain; charset="utf-8" Each of the package event groups includes status about the number of missed events and timestamps (from a 25 MHz clock) on last time an update was missed and last time an update was processed. Add a three info files to report per-aggregator values of these status values. Signed-off-by: Tony Luck --- arch/x86/kernel/cpu/resctrl/internal.h | 13 ++++ arch/x86/kernel/cpu/resctrl/intel_pmt.c | 92 ++++++++++++++++++++++--- arch/x86/kernel/cpu/resctrl/rdtgroup.c | 22 +++++- 3 files changed, 117 insertions(+), 10 deletions(-) diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/r= esctrl/internal.h index 068a47b015e7..5f3656e938ed 100644 --- a/arch/x86/kernel/cpu/resctrl/internal.h +++ b/arch/x86/kernel/cpu/resctrl/internal.h @@ -321,6 +321,7 @@ struct rdtgroup { #define RFTYPE_CTRL_INFO (RFTYPE_INFO | RFTYPE_CTRL) #define RFTYPE_MON_INFO (RFTYPE_INFO | RFTYPE_MON) #define RFTYPE_TOP_INFO (RFTYPE_INFO | RFTYPE_TOP) +#define RFTYPE_PKG_INFO (RFTYPE_INFO | RFTYPE_RES_PKG) #define RFTYPE_CTRL_BASE (RFTYPE_BASE | RFTYPE_CTRL) #define RFTYPE_MON_BASE (RFTYPE_BASE | RFTYPE_MON) =20 @@ -642,6 +643,12 @@ int rdt_get_intel_pmt_mon_config(void); int rdtgroup_intel_pmt_data_show(struct seq_file *m, struct rdt_resource *= r, int domid, struct rdtgroup *rdtgrp, u32 evtid, struct rmid_read *rr); +int rdtgroup_last_update_show(struct kernfs_open_file *of, + struct seq_file *seq, void *v); +int rdtgroup_overflows_show(struct kernfs_open_file *of, + struct seq_file *seq, void *v); +int rdtgroup_overflow_timestamp_show(struct kernfs_open_file *of, + struct seq_file *seq, void *v); void rdt_get_intel_pmt_mount(void); void setup_intel_pmt_mon_domain(int cpu, int id, struct rdt_resource *r, s= truct list_head *add_pos); void rdt_intel_pmt_exit(void); @@ -650,6 +657,12 @@ static inline int rdt_get_intel_pmt_mon_config(void) {= return 0; } static inline int rdtgroup_intel_pmt_data_show(struct seq_file *m, struct = rdt_resource *r, int domid, struct rdtgroup *rdtgrp, u32 evtid, struct rmid_read *rr) { return 0; } +static inline int rdtgroup_last_update_show(struct kernfs_open_file *of, + struct seq_file *seq, void *v) { return 0; }; +static inline int rdtgroup_overflows_show(struct kernfs_open_file *of, + struct seq_file *seq, void *v) { return 0; }; +static inline int rdtgroup_overflow_timestamp_show(struct kernfs_open_file= *of, + struct seq_file *seq, void *v) { return 0; }; static inline void rdt_get_intel_pmt_mount(void) { } static inline void setup_intel_pmt_mon_domain(int cpu, int id, struct rdt_= resource *r, struct list_head *add_pos) { } diff --git a/arch/x86/kernel/cpu/resctrl/intel_pmt.c b/arch/x86/kernel/cpu/= resctrl/intel_pmt.c index 4067aacd9d80..e89130387387 100644 --- a/arch/x86/kernel/cpu/resctrl/intel_pmt.c +++ b/arch/x86/kernel/cpu/resctrl/intel_pmt.c @@ -321,25 +321,37 @@ void setup_intel_pmt_mon_domain(int cpu, int id, stru= ct rdt_resource *r, struct mkdir_mondata_subdir_allrdtgrp(r, &hw_dom->hdr); } =20 +enum ops { + DO_SUM_EVENT, + DO_PRINTVALS +}; + #define VALID_BIT BIT_ULL(63) #define DATA_BITS GENMASK_ULL(62, 0) =20 -static u64 scan_pmt_devs(int package, int guid, int offset) +static u64 scan_pmt_devs(struct seq_file *m, int package, int guid, int of= fset, enum ops op) { - u64 rval, val; + u64 rval =3D 0, val; + char *sep =3D ""; int ndev =3D 0; =20 - rval =3D 0; - for (int i =3D 0; i < pkg_info[package].count; i++) { if (pkg_info[package].regions[i].guid !=3D guid) continue; ndev++; val =3D readq(pkg_info[package].regions[i].addr + offset); =20 - if (!(val & VALID_BIT)) - return ~0ull; - rval +=3D val & DATA_BITS; + switch (op) { + case DO_SUM_EVENT: + if (!(val & VALID_BIT)) + return ~0ull; + rval +=3D val & DATA_BITS; + break; + case DO_PRINTVALS: + seq_printf(m, "%s0x%llx", sep, val); + sep =3D ","; + break; + } } =20 return ndev ? rval : ~0ull; @@ -377,7 +389,7 @@ int rdtgroup_intel_pmt_data_show(struct seq_file *m, st= ruct rdt_resource *r, offset =3D rdtgrp->mon.rmid * EVT_STRIDE(evtid); offset +=3D EVT_OFFSET(evtid); =20 - val =3D scan_pmt_devs(domid, EVT_GUID(evtid), offset); + val =3D scan_pmt_devs(m, domid, EVT_GUID(evtid), offset, DO_SUM_EVENT); if (val =3D=3D ~0ull) { seq_puts(m, "unavailable\n"); return 0; @@ -388,7 +400,7 @@ int rdtgroup_intel_pmt_data_show(struct seq_file *m, st= ruct rdt_resource *r, list_for_each_entry(entry, head, mon.crdtgrp_list) { offset =3D entry->mon.rmid * EVT_STRIDE(evtid); offset +=3D EVT_OFFSET(evtid); - cval =3D scan_pmt_devs(domid, EVT_GUID(evtid), offset); + cval =3D scan_pmt_devs(m, domid, EVT_GUID(evtid), offset, DO_SUM_EVENT); if (cval =3D=3D ~0ull) { seq_puts(m, "unavailable\n"); return 0; @@ -408,3 +420,65 @@ int rdtgroup_intel_pmt_data_show(struct seq_file *m, s= truct rdt_resource *r, =20 return 0; } + +static void status_show(struct seq_file *seq, char *name, int guid, int of= fset) +{ + struct rdt_resource *r =3D &rdt_resources_all[RDT_RESOURCE_INTEL_PMT].r_r= esctrl; + struct rdt_mon_domain *d; + char *sep =3D ""; + + seq_printf(seq, "%s: ", name); + + cpus_read_lock(); + list_for_each_entry(d, &r->mon_domains, hdr.list) { + seq_printf(seq, "%s%d=3D[", sep, d->hdr.id); + scan_pmt_devs(seq, d->hdr.id, guid, offset, DO_PRINTVALS); + seq_puts(seq, "]"); + sep =3D ";"; + } + cpus_read_unlock(); + + seq_puts(seq, "\n"); +} + +int rdtgroup_last_update_show(struct kernfs_open_file *of, + struct seq_file *seq, void *v) +{ + struct telem_entry **t; + + for (t =3D telem_entry; *t; t++) { + if (!(*t)->active) + continue; + status_show(seq, (*t)->name, (*t)->guid, (*t)->last_update_tstamp_off); + } + + return 0; +} + +int rdtgroup_overflows_show(struct kernfs_open_file *of, + struct seq_file *seq, void *v) +{ + struct telem_entry **t; + + for (t =3D telem_entry; *t; t++) { + if (!(*t)->active) + continue; + status_show(seq, (*t)->name, (*t)->guid, (*t)->overflow_counter_off); + } + + return 0; +} + +int rdtgroup_overflow_timestamp_show(struct kernfs_open_file *of, + struct seq_file *seq, void *v) +{ + struct telem_entry **t; + + for (t =3D telem_entry; *t; t++) { + if (!(*t)->active) + continue; + status_show(seq, (*t)->name, (*t)->guid, (*t)->last_overflow_tstamp_off); + } + + return 0; +} diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/r= esctrl/rdtgroup.c index 93da2e4f7fec..635c17042f7a 100644 --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c @@ -1986,7 +1986,27 @@ static struct rftype res_common_files[] =3D { .seq_show =3D rdtgroup_closid_show, .fflags =3D RFTYPE_CTRL_BASE | RFTYPE_DEBUG, }, - + { + .name =3D "last_update", + .mode =3D 0444, + .kf_ops =3D &rdtgroup_kf_single_ops, + .seq_show =3D rdtgroup_last_update_show, + .fflags =3D RFTYPE_PKG_INFO, + }, + { + .name =3D "overflows", + .mode =3D 0444, + .kf_ops =3D &rdtgroup_kf_single_ops, + .seq_show =3D rdtgroup_overflows_show, + .fflags =3D RFTYPE_PKG_INFO, + }, + { + .name =3D "overflow_timestamp", + .mode =3D 0444, + .kf_ops =3D &rdtgroup_kf_single_ops, + .seq_show =3D rdtgroup_overflow_timestamp_show, + .fflags =3D RFTYPE_PKG_INFO, + }, }; =20 static int rdtgroup_add_files(struct kernfs_node *kn, unsigned long fflags) --=20 2.48.1 From nobody Sun Feb 8 02:55:38 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 806D92417C9 for ; Mon, 3 Mar 2025 23:34:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044899; cv=none; b=rUGW56/TQ906BgYvH3QAhEI5qh3q3ggBSD+qFBsLqCixdX1HvdWd071mV6xBP80OLcVsobYW42DRlxtejhoHGHXfxFVC9dMcLGr5xZgNvffReKstxyi57yCGrXxB2jVg9qkt2xkuIxrCzmxhCX1n3aI7Tsnt010M3Xebp/2yJa4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044899; c=relaxed/simple; bh=Zsqynul38j95zpfxq5ZpDkQrG4cFn76n8qt4QnxnJ/Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YUalrqvtWRYp+JVFssREs7m+VdFI4EWiU06LQkoUP22hIoVSwdjhJloOOPMFDqnKOl7vgsOilfrdtTYAPhFa0gPDTSimMII4nrqaJ9P7ZQbQbBNM4lqS0c6yilkT1E1WvsyI/zFaRVLYvyefkZK9ol0hBwyNogzNJZpRC7MmTXo= 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=kVwVKtQu; arc=none smtp.client-ip=192.198.163.17 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="kVwVKtQu" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741044898; x=1772580898; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Zsqynul38j95zpfxq5ZpDkQrG4cFn76n8qt4QnxnJ/Y=; b=kVwVKtQuvjyevcWi9f8XqLRmA2BuFr7K68NRliG3aVlAtDdYG+CYzPT0 V8ypaERYEiNCEuA3BJyjOGuYrCzqwUERJUyoZOc+UKSHdrH35UCXwEDsd EcvgValkss1yYeBbR7YJcAYFYSnhAFrzTpcoZX9kw1iRXXKZbHFkKBByf 3VoBWvXjKdNf9h9ZDOav+c46v2KiOPlnKDWxkMnTRA0pOdwPJU0XG1QH7 BRQs+8LAUzAramoPYntgDZ30IQP6ioW6xfIisH0p2FGM7NE4Nk1lOPhBK QLFOkPVaU7knOXixyYhEBkG4KLzZCPhj0TbD4w+Vk0EfBOY4c3NGlzTAT A==; X-CSE-ConnectionGUID: O1DvL91/QeqCQUzGerckNw== X-CSE-MsgGUID: PVxpeen6RPqTcpYopZD/nQ== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41836006" X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="41836006" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:34:48 -0800 X-CSE-ConnectionGUID: 7MfLMAbPQoiSF1iE4oV/iQ== X-CSE-MsgGUID: iCMw5Tc3TNKea+8EvPa4+w== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="117982310" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:33:53 -0800 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [RFC PATCH 16/17] x86/resctrl: Enable package event monitoring Date: Mon, 3 Mar 2025 15:33:36 -0800 Message-ID: <20250303233340.333743-17-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250303233340.333743-1-tony.luck@intel.com> References: <20250303233340.333743-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: quoted-printable Content-Type: text/plain; charset="utf-8" All the code to support this is in place. Unconditionally enable the package resource during early initialization so that domain lists are built. Enumeration of the package events happens at first mount, if there are no package scoped events, then this resource is disabled. TODO: Cleanup the domains. Signed-off-by: Tony Luck --- arch/x86/kernel/cpu/resctrl/intel_pmt.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/x86/kernel/cpu/resctrl/intel_pmt.c b/arch/x86/kernel/cpu/= resctrl/intel_pmt.c index e89130387387..52ff5eb79b4e 100644 --- a/arch/x86/kernel/cpu/resctrl/intel_pmt.c +++ b/arch/x86/kernel/cpu/resctrl/intel_pmt.c @@ -244,6 +244,8 @@ int rdt_get_intel_pmt_mon_config(void) =20 INIT_LIST_HEAD(&r->evt_list); =20 + r->mon_capable =3D true; + return 1; } =20 --=20 2.48.1 From nobody Sun Feb 8 02:55:38 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.17]) (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 5A6D0243955 for ; Mon, 3 Mar 2025 23:34:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.17 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044901; cv=none; b=DSm09pz+fshC9FKKigKVJVHvb2uYAvQP2Ne5nD7uGZKqmj1zHowy8WckvCLH7zqHAmKdm7ZAD/7a3UP9BiTeuGZMAjieDiQAs6/gp2n403SSkHqbhdq6UuKRCHWi3WhWKs2GqMIbqQIktCpyIZA0Cc/TmYzCNTT3LFvzkjn+EKo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741044901; c=relaxed/simple; bh=aUA08AFTrU4Oj+k0TfMPmLNrgGY6OrG+i+m/giJeBT0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BjhaOodqDZuu86bVEfwFqlsT1edj1MVgoMLZccnEEXPgbB2lAmmhr6THBnSDRPHG1supsDjhiiTt2KhLwQAigOVVXvkUP7k1ELxUlIY4LTqBtkkyPNCettUUbD+AihmhfAVxV/pbDcYsgpZDsxrrvtMPE9AASIqfd3j4/K22Ayg= 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=C37+j5m2; arc=none smtp.client-ip=192.198.163.17 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="C37+j5m2" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1741044899; x=1772580899; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=aUA08AFTrU4Oj+k0TfMPmLNrgGY6OrG+i+m/giJeBT0=; b=C37+j5m27gIcwCrQUsM0C9PQFuKIgytUd8+fKbbyCgVQJrrKh5ODngtL 2vDmT5XcILwHqjvy4KE0v+wXNMkpZ8q+R8ISDaU1OnziN2yd/QHhFX1vH 5CvPHxn1AR22NopgfK6IKBHKu8sk/lRrJsQdbniF/jFea6Xs0Vi99D1hv l4hG+vQcYLqkcT/0Qt0b2RE5z7CUSKZLSHLd/9zxfo3LdX6wINIWC8j+n XFgKVuKwzEzmu0t7oYYpkZySTsfHz2koxA8NYrss6kVi3+1UnmaayhDjb JndspnQCidOHjN3vKYc1MRV9wif9bAn/AhuXyDMVs/6oACov/HuXNt4qh w==; X-CSE-ConnectionGUID: uJEWOQmvTv26MmtY/fYbBA== X-CSE-MsgGUID: m8lYlGQZSEC6u5iEOmYUDQ== X-IronPort-AV: E=McAfee;i="6700,10204,11362"; a="41836014" X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="41836014" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa111.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:34:48 -0800 X-CSE-ConnectionGUID: DuAGdh4QQpyklPPlgWYW1g== X-CSE-MsgGUID: nbPf924GTMKWtzKv6p7lKw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.13,330,1732608000"; d="scan'208";a="117982312" Received: from agluck-desk3.sc.intel.com ([172.25.222.70]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Mar 2025 15:33:54 -0800 From: Tony Luck To: Fenghua Yu , Reinette Chatre , Maciej Wieczor-Retman , Peter Newman , James Morse , Babu Moger , Drew Fustini , Dave Martin Cc: linux-kernel@vger.kernel.org, patches@lists.linux.dev, Tony Luck Subject: [RFC PATCH 17/17] x86/resctrl: Update Documentation for package events Date: Mon, 3 Mar 2025 15:33:37 -0800 Message-ID: <20250303233340.333743-18-tony.luck@intel.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250303233340.333743-1-tony.luck@intel.com> References: <20250303233340.333743-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: quoted-printable Content-Type: text/plain; charset="utf-8" Each "mon_data" directory is now divided between L3 events and package events. Signed-off-by: Tony Luck --- Documentation/arch/x86/resctrl.rst | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/Documentation/arch/x86/resctrl.rst b/Documentation/arch/x86/re= sctrl.rst index 6768fc1fad16..0e915b7c55aa 100644 --- a/Documentation/arch/x86/resctrl.rst +++ b/Documentation/arch/x86/resctrl.rst @@ -366,15 +366,22 @@ When control is enabled all CTRL_MON groups will also= contain: When monitoring is enabled all MON groups will also contain: =20 "mon_data": - This contains a set of files organized by L3 domain and by - RDT event. E.g. on a system with two L3 domains there will - be subdirectories "mon_L3_00" and "mon_L3_01". Each of these - directories have one file per event (e.g. "llc_occupancy", - "mbm_total_bytes", and "mbm_local_bytes"). In a MON group these - files provide a read out of the current value of the event for - all tasks in the group. In CTRL_MON groups these files provide - the sum for all tasks in the CTRL_MON group and all tasks in - MON groups. Please see example section for more details on usage. + This contains a set of directories, one for each instance + of an L3 cache, or of a processor package. The L3 cache + directories are named "mon_L3_00", "mon_L3_01" etc. The + package directories "mon_PKG_00", "mon_PKG_01" etc. + + Within each directory there is one file per event. In + the L3 directories: "llc_occupancy", "mbm_total_bytes", + and "mbm_local_bytes". In the PKG directories: "core_energy", + "activity", etc. + + In a MON group these files provide a read out of the current + value of the event for all tasks in the group. In CTRL_MON groups + these files provide the sum for all tasks in the CTRL_MON group + and all tasks in MON groups. Please see example section for more + details on usage. + On systems with Sub-NUMA Cluster (SNC) enabled there are extra directories for each node (located within the "mon_L3_XX" directory for the L3 cache they occupy). These are named "mon_sub_L3_YY" --=20 2.48.1