Skip to content

Commit d80975e

Browse files
James Morsesuryasaimadhu
authored andcommitted
x86/resctrl: Add resctrl_rmid_realloc_limit to abstract x86's boot_cpu_data
resctrl_rmid_realloc_threshold can be set by user-space. The maximum value is specified by the architecture. Currently max_threshold_occ_write() reads the maximum value from boot_cpu_data.x86_cache_size, which is not portable to another architecture. Add resctrl_rmid_realloc_limit to describe the maximum size in bytes that user-space can set the threshold to. Signed-off-by: James Morse <james.morse@arm.com> Signed-off-by: Borislav Petkov <bp@suse.de> Reviewed-by: Jamie Iles <quic_jiles@quicinc.com> Reviewed-by: Shaopeng Tan <tan.shaopeng@fujitsu.com> Reviewed-by: Reinette Chatre <reinette.chatre@intel.com> Tested-by: Xin Hao <xhao@linux.alibaba.com> Tested-by: Shaopeng Tan <tan.shaopeng@fujitsu.com> Tested-by: Cristian Marussi <cristian.marussi@arm.com> Link: https://lore.kernel.org/r/20220902154829.30399-21-james.morse@arm.com
1 parent ae2328b commit d80975e

File tree

3 files changed

+9
-3
lines changed

3 files changed

+9
-3
lines changed

arch/x86/kernel/cpu/resctrl/monitor.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@ unsigned int rdt_mon_features;
6767
*/
6868
unsigned int resctrl_rmid_realloc_threshold;
6969

70+
/*
71+
* This is the maximum value for the reallocation threshold, in bytes.
72+
*/
73+
unsigned int resctrl_rmid_realloc_limit;
74+
7075
#define CF(cf) ((unsigned long)(1048576 * (cf) + 0.5))
7176

7277
/*
@@ -747,10 +752,10 @@ int rdt_get_mon_l3_config(struct rdt_resource *r)
747752
{
748753
unsigned int mbm_offset = boot_cpu_data.x86_cache_mbm_width_offset;
749754
struct rdt_hw_resource *hw_res = resctrl_to_arch_res(r);
750-
unsigned int cl_size = boot_cpu_data.x86_cache_size;
751755
unsigned int threshold;
752756
int ret;
753757

758+
resctrl_rmid_realloc_limit = boot_cpu_data.x86_cache_size * 1024;
754759
hw_res->mon_scale = boot_cpu_data.x86_cache_occ_scale;
755760
r->num_rmid = boot_cpu_data.x86_cache_max_rmid + 1;
756761
hw_res->mbm_width = MBM_CNTR_WIDTH_BASE;
@@ -767,7 +772,7 @@ int rdt_get_mon_l3_config(struct rdt_resource *r)
767772
*
768773
* For a 35MB LLC and 56 RMIDs, this is ~1.8% of the LLC.
769774
*/
770-
threshold = cl_size * 1024 / r->num_rmid;
775+
threshold = resctrl_rmid_realloc_limit / r->num_rmid;
771776

772777
/*
773778
* Because num_rmid may not be a power of two, round the value

arch/x86/kernel/cpu/resctrl/rdtgroup.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1059,7 +1059,7 @@ static ssize_t max_threshold_occ_write(struct kernfs_open_file *of,
10591059
if (ret)
10601060
return ret;
10611061

1062-
if (bytes > (boot_cpu_data.x86_cache_size * 1024))
1062+
if (bytes > resctrl_rmid_realloc_limit)
10631063
return -EINVAL;
10641064

10651065
resctrl_rmid_realloc_threshold = resctrl_arch_round_mon_val(bytes);

include/linux/resctrl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,5 +251,6 @@ void resctrl_arch_reset_rmid(struct rdt_resource *r, struct rdt_domain *d,
251251
u32 rmid, enum resctrl_event_id eventid);
252252

253253
extern unsigned int resctrl_rmid_realloc_threshold;
254+
extern unsigned int resctrl_rmid_realloc_limit;
254255

255256
#endif /* _RESCTRL_H */

0 commit comments

Comments
 (0)