mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Babu Moger <babu.moger@amd.com>
To: <corbet@lwn.net>, <tony.luck@intel.com>,
	<reinette.chatre@intel.com>, <Dave.Martin@arm.com>,
	<james.morse@arm.com>, <tglx@linutronix.de>, <mingo@redhat.com>,
	<bp@alien8.de>, <dave.hansen@linux.intel.com>
Cc: <babu.moger@amd.com>, <x86@kernel.org>, <hpa@zytor.com>,
	<kas@kernel.org>, <rick.p.edgecombe@intel.com>,
	<akpm@linux-foundation.org>, <paulmck@kernel.org>,
	<frederic@kernel.org>, <pmladek@suse.com>, <rostedt@goodmis.org>,
	<kees@kernel.org>, <arnd@arndb.de>, <fvdl@google.com>,
	<seanjc@google.com>, <thomas.lendacky@amd.com>,
	<pawan.kumar.gupta@linux.intel.com>, <perry.yuan@amd.com>,
	<manali.shukla@amd.com>, <sohil.mehta@intel.com>, <xin@zytor.com>,
	<Neeraj.Upadhyay@amd.com>, <peterz@infradead.org>,
	<tiala@microsoft.com>, <mario.limonciello@amd.com>,
	<dapeng1.mi@linux.intel.com>, <michael.roth@amd.com>,
	<chang.seok.bae@intel.com>, <linux-doc@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, <linux-coco@lists.linux.dev>,
	<kvm@vger.kernel.org>, <peternewman@google.com>,
	<eranian@google.com>, <gautham.shenoy@amd.com>
Subject: [PATCH v18 09/33] x86/resctrl: Add support to enable/disable AMD ABMC feature
Date: Fri, 5 Sep 2025 16:34:08 -0500	[thread overview]
Message-ID: <e937c847dcf764f094e7ce72bb7bca2ae08210f9.1757108044.git.babu.moger@amd.com> (raw)
In-Reply-To: <cover.1757108044.git.babu.moger@amd.com>

Add the functionality to enable/disable AMD ABMC feature.

AMD ABMC feature is enabled by setting enabled bit(0) in MSR
L3_QOS_EXT_CFG. When the state of ABMC is changed, the MSR needs
to be updated on all the logical processors in the QOS Domain.

Hardware counters will reset when ABMC state is changed.

The ABMC feature details are documented in APM [1] available from [2].
[1] AMD64 Architecture Programmer's Manual Volume 2: System Programming
Publication # 24593 Revision 3.41 section 19.3.3.3 Assignable Bandwidth
Monitoring (ABMC).

Link: https://bugzilla.kernel.org/show_bug.cgi?id=206537 # [2]
Signed-off-by: Babu Moger <babu.moger@amd.com>
Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
---
v18: No changes.

v17: No changes.

v16: Added Reviewed-by tag.

v15: Minor comment change in resctrl.h.

v14: Added lockdep_assert_cpus_held() in _resctrl_abmc_enable().
     Removed inline for resctrl_arch_mbm_cntr_assign_enabled().
     Added prototype descriptions for resctrl_arch_mbm_cntr_assign_enabled()
     and resctrl_arch_mbm_cntr_assign_set() in include/linux/resctrl.h.

v13: Resolved minor conflicts with recent FS/ARCH restructure.

v12: Clarified the comment on _resctrl_abmc_enable().
     Added the code to reset arch state in _resctrl_abmc_enable().
     Resolved the conflicts with latest merge.

v11: Moved the monitoring related calls to monitor.c file.
     Moved the changes from include/linux/resctrl.h to
     arch/x86/kernel/cpu/resctrl/internal.h.
     Removed the Reviewed-by tag as patch changed.
     Actual code did not change.

v10: No changes.

v9: Re-ordered the MSR and added Reviewed-by tag.

v8: Commit message update and moved around the comments about L3_QOS_EXT_CFG
    to _resctrl_abmc_enable.

v7: Renamed the function
    resctrl_arch_get_abmc_enabled() to resctrl_arch_mbm_cntr_assign_enabled().

    Merged resctrl_arch_mbm_cntr_assign_disable, resctrl_arch_mbm_cntr_assign_disable
    and renamed to resctrl_arch_mbm_cntr_assign_set().

    Moved the function definition to linux/resctrl.h.

    Passed the struct rdt_resource to these functions.
    Removed resctrl_arch_reset_rmid_all() from arch code. This will be done
    from the caller.

v6: Renamed abmc_enabled to mbm_cntr_assign_enabled.
    Used msr_set_bit and msr_clear_bit for msr updates.
    Renamed resctrl_arch_abmc_enable() to resctrl_arch_mbm_cntr_assign_enable().
    Renamed resctrl_arch_abmc_disable() to resctrl_arch_mbm_cntr_assign_disable().
    Made _resctrl_abmc_enable to return void.

v5: Renamed resctrl_abmc_enable to resctrl_arch_abmc_enable.
    Renamed resctrl_abmc_disable to resctrl_arch_abmc_disable.
    Introduced resctrl_arch_get_abmc_enabled to get abmc state from
    non-arch code.
    Renamed resctrl_abmc_set_all to _resctrl_abmc_enable().
    Modified commit log to make it clear about AMD ABMC feature.

v3: No changes.

v2: Few text changes in commit message.
---
 arch/x86/include/asm/msr-index.h       |  1 +
 arch/x86/kernel/cpu/resctrl/internal.h |  5 +++
 arch/x86/kernel/cpu/resctrl/monitor.c  | 45 ++++++++++++++++++++++++++
 include/linux/resctrl.h                | 20 ++++++++++++
 4 files changed, 71 insertions(+)

diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
index a0c1dbf5692b..18222527b0ee 100644
--- a/arch/x86/include/asm/msr-index.h
+++ b/arch/x86/include/asm/msr-index.h
@@ -1232,6 +1232,7 @@
 /* - AMD: */
 #define MSR_IA32_MBA_BW_BASE		0xc0000200
 #define MSR_IA32_SMBA_BW_BASE		0xc0000280
+#define MSR_IA32_L3_QOS_EXT_CFG		0xc00003ff
 #define MSR_IA32_EVT_CFG_BASE		0xc0000400
 
 /* AMD-V MSRs */
diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h
index 58dca892a5df..a79a487e639c 100644
--- a/arch/x86/kernel/cpu/resctrl/internal.h
+++ b/arch/x86/kernel/cpu/resctrl/internal.h
@@ -37,6 +37,9 @@ struct arch_mbm_state {
 	u64	prev_msr;
 };
 
+/* Setting bit 0 in L3_QOS_EXT_CFG enables the ABMC feature. */
+#define ABMC_ENABLE_BIT			0
+
 /**
  * struct rdt_hw_ctrl_domain - Arch private attributes of a set of CPUs that share
  *			       a resource for a control function
@@ -102,6 +105,7 @@ struct msr_param {
  * @mon_scale:		cqm counter * mon_scale = occupancy in bytes
  * @mbm_width:		Monitor width, to detect and correct for overflow.
  * @cdp_enabled:	CDP state of this resource
+ * @mbm_cntr_assign_enabled:	ABMC feature is enabled
  *
  * Members of this structure are either private to the architecture
  * e.g. mbm_width, or accessed via helpers that provide abstraction. e.g.
@@ -115,6 +119,7 @@ struct rdt_hw_resource {
 	unsigned int		mon_scale;
 	unsigned int		mbm_width;
 	bool			cdp_enabled;
+	bool			mbm_cntr_assign_enabled;
 };
 
 static inline struct rdt_hw_resource *resctrl_to_arch_res(struct rdt_resource *r)
diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c
index 0a695ce68f46..cce35a0ad455 100644
--- a/arch/x86/kernel/cpu/resctrl/monitor.c
+++ b/arch/x86/kernel/cpu/resctrl/monitor.c
@@ -399,3 +399,48 @@ void __init intel_rdt_mbm_apply_quirk(void)
 	mbm_cf_rmidthreshold = mbm_cf_table[cf_index].rmidthreshold;
 	mbm_cf = mbm_cf_table[cf_index].cf;
 }
+
+static void resctrl_abmc_set_one_amd(void *arg)
+{
+	bool *enable = arg;
+
+	if (*enable)
+		msr_set_bit(MSR_IA32_L3_QOS_EXT_CFG, ABMC_ENABLE_BIT);
+	else
+		msr_clear_bit(MSR_IA32_L3_QOS_EXT_CFG, ABMC_ENABLE_BIT);
+}
+
+/*
+ * ABMC enable/disable requires update of L3_QOS_EXT_CFG MSR on all the CPUs
+ * associated with all monitor domains.
+ */
+static void _resctrl_abmc_enable(struct rdt_resource *r, bool enable)
+{
+	struct rdt_mon_domain *d;
+
+	lockdep_assert_cpus_held();
+
+	list_for_each_entry(d, &r->mon_domains, hdr.list) {
+		on_each_cpu_mask(&d->hdr.cpu_mask, resctrl_abmc_set_one_amd,
+				 &enable, 1);
+		resctrl_arch_reset_rmid_all(r, d);
+	}
+}
+
+int resctrl_arch_mbm_cntr_assign_set(struct rdt_resource *r, bool enable)
+{
+	struct rdt_hw_resource *hw_res = resctrl_to_arch_res(r);
+
+	if (r->mon.mbm_cntr_assignable &&
+	    hw_res->mbm_cntr_assign_enabled != enable) {
+		_resctrl_abmc_enable(r, enable);
+		hw_res->mbm_cntr_assign_enabled = enable;
+	}
+
+	return 0;
+}
+
+bool resctrl_arch_mbm_cntr_assign_enabled(struct rdt_resource *r)
+{
+	return resctrl_to_arch_res(r)->mbm_cntr_assign_enabled;
+}
diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h
index eb80cc233be4..919806122c50 100644
--- a/include/linux/resctrl.h
+++ b/include/linux/resctrl.h
@@ -445,6 +445,26 @@ static inline u32 resctrl_get_config_index(u32 closid,
 bool resctrl_arch_get_cdp_enabled(enum resctrl_res_level l);
 int resctrl_arch_set_cdp_enabled(enum resctrl_res_level l, bool enable);
 
+/**
+ * resctrl_arch_mbm_cntr_assign_enabled() - Check if MBM counter assignment
+ *					    mode is enabled.
+ * @r:		Pointer to the resource structure.
+ *
+ * Return:
+ * true if the assignment mode is enabled, false otherwise.
+ */
+bool resctrl_arch_mbm_cntr_assign_enabled(struct rdt_resource *r);
+
+/**
+ * resctrl_arch_mbm_cntr_assign_set() - Configure the MBM counter assignment mode.
+ * @r:		Pointer to the resource structure.
+ * @enable:	Set to true to enable, false to disable the assignment mode.
+ *
+ * Return:
+ * 0 on success, < 0 on error.
+ */
+int resctrl_arch_mbm_cntr_assign_set(struct rdt_resource *r, bool enable);
+
 /*
  * Update the ctrl_val and apply this config right now.
  * Must be called on one of the domain's CPUs.
-- 
2.34.1


  parent reply	other threads:[~2025-09-05 21:36 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-05 21:33 [PATCH v18 00/33] x86,fs/resctrl: Support AMD Assignable Bandwidth Monitoring Counters (ABMC) Babu Moger
2025-09-05 21:34 ` [PATCH v18 01/33] x86,fs/resctrl: Consolidate monitor event descriptions Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Tony Luck
2025-09-05 21:34 ` [PATCH v18 02/33] x86,fs/resctrl: Replace architecture event enabled checks Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Tony Luck
2025-09-05 21:34 ` [PATCH v18 03/33] x86/resctrl: Remove 'rdt_mon_features' global variable Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] x86/resctrl: Remove the rdt_mon_features " tip-bot2 for Tony Luck
2025-09-05 21:34 ` [PATCH v18 04/33] x86,fs/resctrl: Prepare for more monitor events Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Tony Luck
2025-09-05 21:34 ` [PATCH v18 05/33] x86/cpufeatures: Add support for Assignable Bandwidth Monitoring Counters (ABMC) Babu Moger
2025-09-06  4:49   ` Reinette Chatre
2025-09-08 14:41     ` Moger, Babu
2025-09-08 15:03       ` Borislav Petkov
2025-09-08 18:26         ` Moger, Babu
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 06/33] x86/resctrl: Add ABMC feature in the command line options Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 07/33] x86,fs/resctrl: Consolidate monitoring related data from rdt_resource Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 08/33] x86,fs/resctrl: Detect Assignable Bandwidth Monitoring feature details Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` Babu Moger [this message]
2025-09-15 11:27   ` [tip: x86/cache] x86/resctrl: Add support to enable/disable AMD ABMC feature tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 10/33] fs/resctrl: Introduce the interface to display monitoring modes Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 11/33] fs/resctrl: Add resctrl file to display number of assignable counters Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 12/33] fs/resctrl: Introduce mbm_cntr_cfg to track assignable counters per domain Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 13/33] fs/resctrl: Introduce interface to display number of free MBM counters Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 14/33] x86/resctrl: Add data structures and definitions for ABMC assignment Babu Moger
2025-09-10 17:26   ` Borislav Petkov
2025-09-10 19:49     ` Moger, Babu
2025-09-10 19:59       ` Borislav Petkov
2025-09-10 20:26         ` Moger, Babu
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 15/33] fs/resctrl: Introduce event configuration field in struct mon_evt Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 16/33] x86,fs/resctrl: Implement resctrl_arch_config_cntr() to assign a counter with ABMC Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 17/33] fs/resctrl: Add the functionality to assign MBM events Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 18/33] fs/resctrl: Add the functionality to unassign " Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 19/33] fs/resctrl: Pass struct rdtgroup instead of individual members Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 20/33] fs/resctrl: Introduce counter ID read, reset calls in mbm_event mode Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 21/33] x86/resctrl: Refactor resctrl_arch_rmid_read() Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 22/33] x86/resctrl: Implement resctrl_arch_reset_cntr() and resctrl_arch_cntr_read() Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 23/33] fs/resctrl: Support counter read/reset with mbm_event assignment mode Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 24/33] fs/resctrl: Add event configuration directory under info/L3_MON/ Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 25/33] fs/resctrl: Provide interface to update the event configurations Babu Moger
2025-09-06  4:49   ` Reinette Chatre
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 26/33] fs/resctrl: Introduce mbm_assign_on_mkdir to enable assignments on mkdir Babu Moger
2025-09-11 15:08   ` Borislav Petkov
2025-09-11 16:24     ` Reinette Chatre
2025-09-11 16:54       ` Borislav Petkov
2025-09-11 17:11         ` Reinette Chatre
2025-09-11 16:28     ` Moger, Babu
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 27/33] fs/resctrl: Auto assign counters on mkdir and clean up on group removal Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 28/33] fs/resctrl: Introduce mbm_L3_assignments to list assignments in a group Babu Moger
2025-09-06  4:49   ` Reinette Chatre
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 29/33] fs/resctrl: Introduce the interface to modify " Babu Moger
2025-09-06  4:50   ` Reinette Chatre
2025-09-08 19:17     ` Moger, Babu
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 30/33] fs/resctrl: Disable BMEC event configuration when mbm_event mode is enabled Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 31/33] fs/resctrl: Introduce the interface to switch between monitor modes Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 32/33] x86/resctrl: Configure mbm_event mode if supported Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] " tip-bot2 for Babu Moger
2025-09-05 21:34 ` [PATCH v18 33/33] MAINTAINERS: resctrl: add myself as reviewer Babu Moger
2025-09-15 11:27   ` [tip: x86/cache] MAINTAINERS: resctrl: Add " tip-bot2 for Babu Moger
2025-09-09 16:03 ` [PATCH v18 00/33] x86,fs/resctrl: Support AMD Assignable Bandwidth Monitoring Counters (ABMC) Reinette Chatre
2025-09-09 16:19   ` Borislav Petkov
2025-09-09 16:24     ` Reinette Chatre
2025-09-09 17:33       ` Luck, Tony
2025-09-09 17:38         ` Borislav Petkov
2025-09-15 11:25 ` Borislav Petkov
2025-09-15 21:07   ` Reinette Chatre
2025-09-16 10:54     ` Borislav Petkov
2025-09-16 17:00     ` Moger, Babu
2025-11-16 17:25 ` Drew Fustini
2025-11-17 15:07   ` Babu Moger
2025-11-18 23:15     ` Drew Fustini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e937c847dcf764f094e7ce72bb7bca2ae08210f9.1757108044.git.babu.moger@amd.com \
    --to=babu.moger@amd.com \
    --cc=Dave.Martin@arm.com \
    --cc=Neeraj.Upadhyay@amd.com \
    --cc=akpm@linux-foundation.org \
    --cc=arnd@arndb.de \
    --cc=bp@alien8.de \
    --cc=chang.seok.bae@intel.com \
    --cc=corbet@lwn.net \
    --cc=dapeng1.mi@linux.intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=eranian@google.com \
    --cc=frederic@kernel.org \
    --cc=fvdl@google.com \
    --cc=gautham.shenoy@amd.com \
    --cc=hpa@zytor.com \
    --cc=james.morse@arm.com \
    --cc=kas@kernel.org \
    --cc=kees@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-coco@lists.linux.dev \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=manali.shukla@amd.com \
    --cc=mario.limonciello@amd.com \
    --cc=michael.roth@amd.com \
    --cc=mingo@redhat.com \
    --cc=paulmck@kernel.org \
    --cc=pawan.kumar.gupta@linux.intel.com \
    --cc=perry.yuan@amd.com \
    --cc=peternewman@google.com \
    --cc=peterz@infradead.org \
    --cc=pmladek@suse.com \
    --cc=reinette.chatre@intel.com \
    --cc=rick.p.edgecombe@intel.com \
    --cc=rostedt@goodmis.org \
    --cc=seanjc@google.com \
    --cc=sohil.mehta@intel.com \
    --cc=tglx@linutronix.de \
    --cc=thomas.lendacky@amd.com \
    --cc=tiala@microsoft.com \
    --cc=tony.luck@intel.com \
    --cc=x86@kernel.org \
    --cc=xin@zytor.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®