[PATCH v1 17/31] x86/resctrl: Move mbm_cfg_mask to struct rdt_resource

James Morse posted 31 patches 1 year, 10 months ago
There is a newer version of this series
[PATCH v1 17/31] x86/resctrl: Move mbm_cfg_mask to struct rdt_resource
Posted by James Morse 1 year, 10 months ago
The mbm_cfg_mask field lists the bits that user-space can set when
configuring an event. This value is output via the last_cmd_status
file.

Once the filesystem parts of resctrl are moved to live in /fs/, the
struct rdt_hw_resource is inaccessible to the filesystem code. Because
this value is output to user-space, it has to be accessible to the
filesystem code.

Move it to struct rdt_resource.

Signed-off-by: James Morse <james.morse@arm.com>
---
 arch/x86/kernel/cpu/resctrl/internal.h | 3 ---
 arch/x86/kernel/cpu/resctrl/monitor.c  | 2 +-
 arch/x86/kernel/cpu/resctrl/rdtgroup.c | 5 ++---
 include/linux/resctrl.h                | 3 +++
 4 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h
index 46370eafb00f..238b81d3f64a 100644
--- a/arch/x86/kernel/cpu/resctrl/internal.h
+++ b/arch/x86/kernel/cpu/resctrl/internal.h
@@ -371,8 +371,6 @@ struct msr_param {
  * @msr_update:		Function pointer to update QOS MSRs
  * @mon_scale:		cqm counter * mon_scale = occupancy in bytes
  * @mbm_width:		Monitor width, to detect and correct for overflow.
- * @mbm_cfg_mask:	Bandwidth sources that can be tracked when Bandwidth
- *			Monitoring Event Configuration (BMEC) is supported.
  * @cdp_enabled:	CDP state of this resource
  *
  * Members of this structure are either private to the architecture
@@ -387,7 +385,6 @@ struct rdt_hw_resource {
 				 struct rdt_resource *r);
 	unsigned int		mon_scale;
 	unsigned int		mbm_width;
-	unsigned int		mbm_cfg_mask;
 	bool			cdp_enabled;
 };
 
diff --git a/arch/x86/kernel/cpu/resctrl/monitor.c b/arch/x86/kernel/cpu/resctrl/monitor.c
index ccb85c61b43b..287fb0a5f060 100644
--- a/arch/x86/kernel/cpu/resctrl/monitor.c
+++ b/arch/x86/kernel/cpu/resctrl/monitor.c
@@ -1068,7 +1068,7 @@ int __init rdt_get_mon_l3_config(struct rdt_resource *r)
 
 		/* Detect list of bandwidth sources that can be tracked */
 		cpuid_count(0x80000020, 3, &eax, &ebx, &ecx, &edx);
-		hw_res->mbm_cfg_mask = ecx & MAX_EVT_CONFIG_BITS;
+		r->mbm_cfg_mask = ecx & MAX_EVT_CONFIG_BITS;
 	}
 
 	r->mon_capable = true;
diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
index e76018687117..3d3a839eba6b 100644
--- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
+++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
@@ -1731,7 +1731,6 @@ static void mbm_config_write_domain(struct rdt_resource *r,
 
 static int mon_config_write(struct rdt_resource *r, char *tok, u32 evtid)
 {
-	struct rdt_hw_resource *hw_res = resctrl_to_arch_res(r);
 	char *dom_str = NULL, *id_str;
 	unsigned long dom_id, val;
 	struct rdt_domain *d;
@@ -1758,9 +1757,9 @@ static int mon_config_write(struct rdt_resource *r, char *tok, u32 evtid)
 	}
 
 	/* Value from user cannot be more than the supported set of events */
-	if ((val & hw_res->mbm_cfg_mask) != val) {
+	if ((val & r->mbm_cfg_mask) != val) {
 		rdt_last_cmd_printf("Invalid event configuration: max valid mask is 0x%02x\n",
-				    hw_res->mbm_cfg_mask);
+				    r->mbm_cfg_mask);
 		return -EINVAL;
 	}
 
diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h
index 975b80102fbe..8a7367d1ce45 100644
--- a/include/linux/resctrl.h
+++ b/include/linux/resctrl.h
@@ -140,6 +140,8 @@ struct resctrl_membw {
  * @format_str:		Per resource format string to show domain value
  * @evt_list:		List of monitoring events
  * @fflags:		flags to choose base and info files
+ * @mbm_cfg_mask:	Bandwidth sources that can be tracked when Bandwidth
+ *			Monitoring Event Configuration (BMEC) is supported.
  * @cdp_capable:	Is the CDP feature available on this resource
  */
 struct rdt_resource {
@@ -157,6 +159,7 @@ struct rdt_resource {
 	const char		*format_str;
 	struct list_head	evt_list;
 	unsigned long		fflags;
+	unsigned int		mbm_cfg_mask;
 	bool			cdp_capable;
 };
 
-- 
2.39.2
Re: [PATCH v1 17/31] x86/resctrl: Move mbm_cfg_mask to struct rdt_resource
Posted by Reinette Chatre 1 year, 10 months ago
Hi James,

On 3/21/2024 9:50 AM, James Morse wrote:
> The mbm_cfg_mask field lists the bits that user-space can set when
> configuring an event. This value is output via the last_cmd_status
> file.
> 
> Once the filesystem parts of resctrl are moved to live in /fs/, the
> struct rdt_hw_resource is inaccessible to the filesystem code. Because
> this value is output to user-space, it has to be accessible to the
> filesystem code.
> 
> Move it to struct rdt_resource.
> 
> Signed-off-by: James Morse <james.morse@arm.com>

...

> diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h
> index 975b80102fbe..8a7367d1ce45 100644
> --- a/include/linux/resctrl.h
> +++ b/include/linux/resctrl.h
> @@ -140,6 +140,8 @@ struct resctrl_membw {
>   * @format_str:		Per resource format string to show domain value
>   * @evt_list:		List of monitoring events
>   * @fflags:		flags to choose base and info files
> + * @mbm_cfg_mask:	Bandwidth sources that can be tracked when Bandwidth
> + *			Monitoring Event Configuration (BMEC) is supported.

BMEC is an AMD term. If MPAM is planning to use this member then this comment
should be made generic.

>   * @cdp_capable:	Is the CDP feature available on this resource
>   */
>  struct rdt_resource {
> @@ -157,6 +159,7 @@ struct rdt_resource {
>  	const char		*format_str;
>  	struct list_head	evt_list;
>  	unsigned long		fflags;
> +	unsigned int		mbm_cfg_mask;
>  	bool			cdp_capable;
>  };
>  

Reinette
Re: [PATCH v1 17/31] x86/resctrl: Move mbm_cfg_mask to struct rdt_resource
Posted by Dave Martin 1 year, 10 months ago
On Mon, Apr 08, 2024 at 08:21:24PM -0700, Reinette Chatre wrote:
> Hi James,
> 
> On 3/21/2024 9:50 AM, James Morse wrote:
> > The mbm_cfg_mask field lists the bits that user-space can set when
> > configuring an event. This value is output via the last_cmd_status
> > file.
> > 
> > Once the filesystem parts of resctrl are moved to live in /fs/, the
> > struct rdt_hw_resource is inaccessible to the filesystem code. Because
> > this value is output to user-space, it has to be accessible to the
> > filesystem code.
> > 
> > Move it to struct rdt_resource.
> > 
> > Signed-off-by: James Morse <james.morse@arm.com>
> 
> ..
> 
> > diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h
> > index 975b80102fbe..8a7367d1ce45 100644
> > --- a/include/linux/resctrl.h
> > +++ b/include/linux/resctrl.h
> > @@ -140,6 +140,8 @@ struct resctrl_membw {
> >   * @format_str:		Per resource format string to show domain value
> >   * @evt_list:		List of monitoring events
> >   * @fflags:		flags to choose base and info files
> > + * @mbm_cfg_mask:	Bandwidth sources that can be tracked when Bandwidth
> > + *			Monitoring Event Configuration (BMEC) is supported.

[...]

> Reinette
> 
> BMEC is an AMD term. If MPAM is planning to use this member then this comment
> should be made generic.

MPAM can (at least) filter reads and/or writes, and it looks like James
is expecting to support this.

However, it probably does make sense to keep the comments neutral in a
common header.

Would the following work?

	* @ mbm_cfg_mask:	Arch-specific event configuration flags



I think that's broad enough to cover all bases, but I'll wait for your
response.

Cheers
---Dave
Re: [PATCH v1 17/31] x86/resctrl: Move mbm_cfg_mask to struct rdt_resource
Posted by Reinette Chatre 1 year, 10 months ago
Hi Dave,

On 4/11/2024 7:16 AM, Dave Martin wrote:
> On Mon, Apr 08, 2024 at 08:21:24PM -0700, Reinette Chatre wrote:
>> Hi James,
>>
>> On 3/21/2024 9:50 AM, James Morse wrote:
>>> The mbm_cfg_mask field lists the bits that user-space can set when
>>> configuring an event. This value is output via the last_cmd_status
>>> file.
>>>
>>> Once the filesystem parts of resctrl are moved to live in /fs/, the
>>> struct rdt_hw_resource is inaccessible to the filesystem code. Because
>>> this value is output to user-space, it has to be accessible to the
>>> filesystem code.
>>>
>>> Move it to struct rdt_resource.
>>>
>>> Signed-off-by: James Morse <james.morse@arm.com>
>>
>> ..
>>
>>> diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h
>>> index 975b80102fbe..8a7367d1ce45 100644
>>> --- a/include/linux/resctrl.h
>>> +++ b/include/linux/resctrl.h
>>> @@ -140,6 +140,8 @@ struct resctrl_membw {
>>>   * @format_str:		Per resource format string to show domain value
>>>   * @evt_list:		List of monitoring events
>>>   * @fflags:		flags to choose base and info files
>>> + * @mbm_cfg_mask:	Bandwidth sources that can be tracked when Bandwidth
>>> + *			Monitoring Event Configuration (BMEC) is supported.
> 
> [...]
> 
>> Reinette
>>
>> BMEC is an AMD term. If MPAM is planning to use this member then this comment
>> should be made generic.
> 
> MPAM can (at least) filter reads and/or writes, and it looks like James
> is expecting to support this.
> 
> However, it probably does make sense to keep the comments neutral in a
> common header.
> 
> Would the following work?
> 
> 	* @ mbm_cfg_mask:	Arch-specific event configuration flags
> 
> 
> 
> I think that's broad enough to cover all bases, but I'll wait for your
> response.

Since this is exposed to user space, ideally all architectures would use
the same bits to mean the same thing. I assumed that is what James intended
by placing the existing (AMD BMEC) bits in the global resctrl_types.h.

Reinette