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
This commit is contained in:
parent
ae2328b529
commit
d80975e264
|
@ -67,6 +67,11 @@ unsigned int rdt_mon_features;
|
|||
*/
|
||||
unsigned int resctrl_rmid_realloc_threshold;
|
||||
|
||||
/*
|
||||
* This is the maximum value for the reallocation threshold, in bytes.
|
||||
*/
|
||||
unsigned int resctrl_rmid_realloc_limit;
|
||||
|
||||
#define CF(cf) ((unsigned long)(1048576 * (cf) + 0.5))
|
||||
|
||||
/*
|
||||
|
@ -747,10 +752,10 @@ int rdt_get_mon_l3_config(struct rdt_resource *r)
|
|||
{
|
||||
unsigned int mbm_offset = boot_cpu_data.x86_cache_mbm_width_offset;
|
||||
struct rdt_hw_resource *hw_res = resctrl_to_arch_res(r);
|
||||
unsigned int cl_size = boot_cpu_data.x86_cache_size;
|
||||
unsigned int threshold;
|
||||
int ret;
|
||||
|
||||
resctrl_rmid_realloc_limit = boot_cpu_data.x86_cache_size * 1024;
|
||||
hw_res->mon_scale = boot_cpu_data.x86_cache_occ_scale;
|
||||
r->num_rmid = boot_cpu_data.x86_cache_max_rmid + 1;
|
||||
hw_res->mbm_width = MBM_CNTR_WIDTH_BASE;
|
||||
|
@ -767,7 +772,7 @@ int rdt_get_mon_l3_config(struct rdt_resource *r)
|
|||
*
|
||||
* For a 35MB LLC and 56 RMIDs, this is ~1.8% of the LLC.
|
||||
*/
|
||||
threshold = cl_size * 1024 / r->num_rmid;
|
||||
threshold = resctrl_rmid_realloc_limit / r->num_rmid;
|
||||
|
||||
/*
|
||||
* Because num_rmid may not be a power of two, round the value
|
||||
|
|
|
@ -1059,7 +1059,7 @@ static ssize_t max_threshold_occ_write(struct kernfs_open_file *of,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (bytes > (boot_cpu_data.x86_cache_size * 1024))
|
||||
if (bytes > resctrl_rmid_realloc_limit)
|
||||
return -EINVAL;
|
||||
|
||||
resctrl_rmid_realloc_threshold = resctrl_arch_round_mon_val(bytes);
|
||||
|
|
|
@ -251,5 +251,6 @@ void resctrl_arch_reset_rmid(struct rdt_resource *r, struct rdt_domain *d,
|
|||
u32 rmid, enum resctrl_event_id eventid);
|
||||
|
||||
extern unsigned int resctrl_rmid_realloc_threshold;
|
||||
extern unsigned int resctrl_rmid_realloc_limit;
|
||||
|
||||
#endif /* _RESCTRL_H */
|
||||
|
|
Loading…
Reference in New Issue