mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: James Morse <james.morse@arm.com>
To: Babu Moger <babu.moger@amd.com>
Cc: x86@kernel.org, hpa@zytor.com, paulmck@kernel.org,
	rdunlap@infradead.org, tj@kernel.org, peterz@infradead.org,
	yanjiewtw@gmail.com, corbet@lwn.net, kim.phillips@amd.com,
	lukas.bulwahn@gmail.com, seanjc@google.com, jmattson@google.com,
	leitao@debian.org, jpoimboe@kernel.org,
	rick.p.edgecombe@intel.com, kirill.shutemov@linux.intel.com,
	jithu.joseph@intel.com, kai.huang@intel.com,
	kan.liang@linux.intel.com, daniel.sneddon@linux.intel.com,
	pbonzini@redhat.com, sandipan.das@amd.com,
	ilpo.jarvinen@linux.intel.com, peternewman@google.com,
	maciej.wieczor-retman@intel.com, linux-doc@vger.kernel.org,
	linux-kernel@vger.kernel.org, eranian@google.com,
	dave.hansen@linux.intel.com, reinette.chatre@intel.com,
	mingo@redhat.com, fenghua.yu@intel.com, tglx@linutronix.de,
	bp@alien8.de
Subject: Re: [PATCH v6 06/22] x86/resctrl: Add support to enable/disable AMD ABMC feature
Date: Fri, 16 Aug 2024 17:29:05 +0100	[thread overview]
Message-ID: <20500833-44a0-4fd4-ae6a-729bb906abda@arm.com> (raw)
In-Reply-To: <140e4e7bb26db9bbad3e37d910c0cea0060e99e2.1722981659.git.babu.moger@amd.com>

Hi Babu,

Some boring comments about where the code goes...

On 06/08/2024 23:00, Babu Moger wrote:
> 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. Reset the
> architectural state so that reading of hardware counter is not considered
> as an overflow in next update.
> 
> The ABMC feature details are documented in APM listed below [1].
> [1] AMD64 Architecture Programmer's Manual Volume 2: System Programming
> Publication # 24593 Revision 3.41 section 19.3.3.3 Assignable Bandwidth
> Monitoring (ABMC).

> diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h
> index 2bd207624eec..154983a67646 100644
> --- a/arch/x86/kernel/cpu/resctrl/internal.h
> +++ b/arch/x86/kernel/cpu/resctrl/internal.h

> @@ -536,6 +541,14 @@ int resctrl_arch_set_cdp_enabled(enum resctrl_res_level l, bool enable);
>  
>  void arch_mon_domain_online(struct rdt_resource *r, struct rdt_mon_domain *d);
>  
> +static inline bool resctrl_arch_get_abmc_enabled(void)
> +{
> +	return rdt_resources_all[RDT_RESOURCE_L3].mbm_cntr_assign_enabled;
> +}

Once the filesystem code moves to /fs/resctrl, this can't be inlined from the
architectures internal.h. Accessing rdt_resources_all[] from asm/resctrl.h isn't something
that is done today... could you move this to be a non-inline function in core.c?

(this saves me moving it later!)


> +int resctrl_arch_mbm_cntr_assign_enable(void);
> +void resctrl_arch_mbm_cntr_assign_disable(void);

Please add these in linux/resctrl.h - it saves me moving them later!


> diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
> index 7e76f8d839fc..6075b1e5bb77 100644
> --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
> +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
> @@ -2402,6 +2402,63 @@ int resctrl_arch_set_cdp_enabled(enum resctrl_res_level l, bool enable)

> +static void _resctrl_abmc_enable(struct rdt_resource *r, bool enable)
> +{
> +	struct rdt_mon_domain *d;


> +	/*
> +	 * Hardware counters will reset after switching the monitor mode.
> +	 * Reset the architectural state so that reading of hardware
> +	 * counter is not considered as an overflow in the next update.
> +	 */
> +	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);
> +	}

Is there any mileage in getting resctrl_arch_mbm_cntr_assign_enable()'s caller to do this?
Every architecture that supports this will have to do this, and neither x86 nor arm64 are
able to do it atomically, or quicker than calling resctrl_arch_reset_rmid_all() for each
domain.

> +}


> +int resctrl_arch_mbm_cntr_assign_enable(void)

Could we pass the struct rdt_resource in - instead of hard coding it to be the L3 - you
already check hw_res->mbm_cntr_assign_enabled so no additional check is needed...

Background: I'd like to reduce the amount of "I magically know its the L3" to reduce the
work for whoever has to add monitor support for something other than the L3.
(I've currently no plans - but someone is going to build it!)


> +{
> +	struct rdt_resource *r = &rdt_resources_all[RDT_RESOURCE_L3].r_resctrl;
> +	struct rdt_hw_resource *hw_res = resctrl_to_arch_res(r);

> +	lockdep_assert_held(&rdtgroup_mutex);

After the split between the architecture and filesystem code - this lock is private to the
filesystem. If you need to prevent concurrent enable/disable calls the architecture should
take its own mutex.

| static DEFINE_MUTEX(abmc_lock);
?


> +	if (r->mon.mbm_cntr_assignable && !hw_res->mbm_cntr_assign_enabled) {
> +		_resctrl_abmc_enable(r, true);
> +		hw_res->mbm_cntr_assign_enabled = true;
> +	}
> +
> +	return 0;
> +}
> +
> +void resctrl_arch_mbm_cntr_assign_disable(void)
> +{
> +	struct rdt_resource *r = &rdt_resources_all[RDT_RESOURCE_L3].r_resctrl;
> +	struct rdt_hw_resource *hw_res = resctrl_to_arch_res(r);
> +
> +	lockdep_assert_held(&rdtgroup_mutex);

(same plea for passing the resource in, and not referring to the filesystem's locks)


> +	if (hw_res->mbm_cntr_assign_enabled) {
> +		_resctrl_abmc_enable(r, false);
> +		hw_res->mbm_cntr_assign_enabled = false;
> +	}
> +}


The work you do in these functions is pretty symmetric. Is it worth combining them into:
| resctrl_arch_mbm_cntr_assign_set(struct rdt_resource *r, bool enable) {
|	struct rdt_hw_resource *hw_res = resctrl_to_arch_res(r);
|
|	if (hw_res->mbm_cntr_assign_enabled != enable) {
|		_resctrl_abmc_enable(r, enable
|		hw_res->mbm_cntr_assign_enabled = enable;
|	}
| }

I think you need a resctrl_arch_mbm_cntr_assign_test() too - I'll comment on that patch...


Thanks,

James

  reply	other threads:[~2024-08-16 16:29 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-06 22:00 [PATCH v6 00/22] x86/resctrl : Support AMD Assignable Bandwidth Monitoring Counters (ABMC) Babu Moger
2024-08-06 22:00 ` [PATCH v6 01/22] x86/cpufeatures: Add support for " Babu Moger
2024-08-07 16:32   ` Thomas Gleixner
2024-08-08 14:46     ` Moger, Babu
2024-08-06 22:00 ` [PATCH v6 02/22] x86/resctrl: Add ABMC feature in the command line options Babu Moger
2024-08-06 22:00 ` [PATCH v6 03/22] x86/resctrl: Consolidate monitoring related data from rdt_resource Babu Moger
2024-08-16 21:29   ` Reinette Chatre
2024-08-19 14:46     ` Moger, Babu
2024-08-06 22:00 ` [PATCH v6 04/22] x86/resctrl: Detect Assignable Bandwidth Monitoring feature details Babu Moger
2024-08-07 16:33   ` Thomas Gleixner
2024-08-16 21:30   ` Reinette Chatre
2024-08-19 15:37     ` Moger, Babu
2024-08-06 22:00 ` [PATCH v6 05/22] x86/resctrl: Introduce resctrl_file_fflags_init() to initialize fflags Babu Moger
2024-08-06 22:00 ` [PATCH v6 06/22] x86/resctrl: Add support to enable/disable AMD ABMC feature Babu Moger
2024-08-16 16:29   ` James Morse [this message]
2024-08-16 20:38     ` Moger, Babu
2024-08-16 21:31   ` Reinette Chatre
2024-08-19 18:07     ` Moger, Babu
2024-08-20 18:17       ` Reinette Chatre
2024-08-06 22:00 ` [PATCH v6 07/22] x86/resctrl: Introduce the interface to display monitor mode Babu Moger
2024-08-16 16:56   ` James Morse
2024-08-16 20:38     ` Moger, Babu
2024-08-16 21:32   ` Reinette Chatre
2024-08-19 19:27     ` Moger, Babu
2024-08-06 22:00 ` [PATCH v6 08/22] x86/resctrl: Introduce interface to display number of monitoring counters Babu Moger
2024-08-16 21:34   ` Reinette Chatre
2024-08-20 15:56     ` Moger, Babu
2024-08-20 18:08       ` Reinette Chatre
2024-08-06 22:00 ` [PATCH v6 09/22] x86/resctrl: Introduce MBM counters bitmap Babu Moger
2024-08-16 16:29   ` James Morse
2024-08-16 20:39     ` Moger, Babu
2024-08-16 21:35   ` Reinette Chatre
2024-08-19 15:49     ` Moger, Babu
2024-08-20 18:08       ` Reinette Chatre
2024-08-06 22:00 ` [PATCH v6 10/22] x86/resctrl: Introduce mbm_total_cfg and mbm_local_cfg Babu Moger
2024-08-06 22:00 ` [PATCH v6 11/22] x86/resctrl: Remove MSR reading of event configuration value Babu Moger
2024-08-16 21:36   ` Reinette Chatre
2024-08-20 16:19     ` Moger, Babu
2024-08-20 18:09       ` Reinette Chatre
2024-08-06 22:00 ` [PATCH v6 12/22] x86/resctrl: Introduce mbm_cntr_map to track counters at domain Babu Moger
2024-08-16 21:37   ` Reinette Chatre
2024-08-20 18:24     ` Moger, Babu
2024-08-06 22:00 ` [PATCH v6 13/22] x86/resctrl: Add data structures and definitions for ABMC assignment Babu Moger
2024-08-16 21:38   ` Reinette Chatre
2024-08-20 20:56     ` Moger, Babu
2024-08-20 21:09       ` Reinette Chatre
2024-08-06 22:00 ` [PATCH v6 14/22] x86/resctrl: Introduce cntr_id in mongroup for assignments Babu Moger
2024-08-16 21:38   ` Reinette Chatre
2024-08-20 22:42     ` Moger, Babu
2024-08-06 22:00 ` [PATCH v6 15/22] x86/resctrl: Add the interface to assign a hardware counter Babu Moger
2024-08-16 16:30   ` James Morse
2024-08-16 20:39     ` Moger, Babu
2024-08-16 21:41   ` Reinette Chatre
2024-08-21 15:04     ` Moger, Babu
2024-08-06 22:00 ` [PATCH v6 16/22] x86/resctrl: Add the interface to unassign a MBM counter Babu Moger
2024-08-16 21:41   ` Reinette Chatre
2024-08-21 16:01     ` Moger, Babu
2024-08-23 20:18       ` Reinette Chatre
2024-08-23 22:05         ` Moger, Babu
2024-08-06 22:00 ` [PATCH v6 17/22] x86/resctrl: Assign/unassign counters by default when ABMC is enabled Babu Moger
2024-08-16 21:42   ` Reinette Chatre
2024-08-21 17:20     ` Moger, Babu
2024-08-06 22:00 ` [PATCH v6 18/22] x86/resctrl: Report "Unassigned" for MBM events in ABMC mode Babu Moger
2024-08-16 21:42   ` Reinette Chatre
2024-08-21 17:30     ` Moger, Babu
2024-08-06 22:00 ` [PATCH v6 19/22] x86/resctrl: Introduce the interface to switch between monitor modes Babu Moger
2024-08-16 16:31   ` James Morse
2024-08-16 17:01     ` Reinette Chatre
2024-08-16 17:16       ` Peter Newman
2024-08-16 18:09         ` Reinette Chatre
2024-08-19 14:52           ` Reinette Chatre
2024-08-19 18:27             ` Peter Newman
2024-08-20 18:11               ` Reinette Chatre
2024-08-16 21:42   ` Reinette Chatre
2024-08-21 18:08     ` Moger, Babu
2024-08-06 22:00 ` [PATCH v6 20/22] x86/resctrl: Enable AMD ABMC feature by default when supported Babu Moger
2024-08-16 16:32   ` James Morse
2024-08-16 20:40     ` Moger, Babu
2024-08-16 22:33   ` Reinette Chatre
2024-08-19 18:18     ` Moger, Babu
2024-08-20 18:12       ` Reinette Chatre
2024-08-20 20:04         ` Moger, Babu
2024-08-20 20:18           ` Moger, Babu
2024-08-20 20:37             ` Reinette Chatre
2024-08-06 22:00 ` [PATCH v6 21/22] x86/resctrl: Introduce interface to list monitor states of all the groups Babu Moger
2024-08-16 16:28   ` James Morse
2024-08-16 20:40     ` Moger, Babu
2024-08-06 22:00 ` [PATCH v6 22/22] x86/resctrl: Introduce interface to modify assignment states of " Babu Moger
2024-08-16 22:33   ` Reinette Chatre
2024-08-21 20:11     ` Moger, Babu
2024-08-23 20:18       ` Reinette Chatre
2024-08-23 22:04         ` Moger, Babu
2024-08-16 21:28 ` [PATCH v6 00/22] x86/resctrl : Support AMD Assignable Bandwidth Monitoring Counters (ABMC) Reinette Chatre
2024-08-22  1:31   ` Moger, Babu
2024-08-23 20:29     ` Reinette Chatre
2024-08-23 22:14       ` Moger, Babu

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=20500833-44a0-4fd4-ae6a-729bb906abda@arm.com \
    --to=james.morse@arm.com \
    --cc=babu.moger@amd.com \
    --cc=bp@alien8.de \
    --cc=corbet@lwn.net \
    --cc=daniel.sneddon@linux.intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=eranian@google.com \
    --cc=fenghua.yu@intel.com \
    --cc=hpa@zytor.com \
    --cc=ilpo.jarvinen@linux.intel.com \
    --cc=jithu.joseph@intel.com \
    --cc=jmattson@google.com \
    --cc=jpoimboe@kernel.org \
    --cc=kai.huang@intel.com \
    --cc=kan.liang@linux.intel.com \
    --cc=kim.phillips@amd.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=leitao@debian.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lukas.bulwahn@gmail.com \
    --cc=maciej.wieczor-retman@intel.com \
    --cc=mingo@redhat.com \
    --cc=paulmck@kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=peternewman@google.com \
    --cc=peterz@infradead.org \
    --cc=rdunlap@infradead.org \
    --cc=reinette.chatre@intel.com \
    --cc=rick.p.edgecombe@intel.com \
    --cc=sandipan.das@amd.com \
    --cc=seanjc@google.com \
    --cc=tglx@linutronix.de \
    --cc=tj@kernel.org \
    --cc=x86@kernel.org \
    --cc=yanjiewtw@gmail.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®