
From: Wang ShaoBo <bobo.shaobowang@huawei.com> hulk inclusion category: feature bugzilla: 34278 CVE: NA ------------------------------------------------- Sometimes monitoring will have such anomalies: e.g. > cd /sys/fs/resctrl/ && grep . mon_data/* mon_data/mon_L3CODE_00:14336 mon_data/mon_L3CODE_01:344064 mon_data/mon_L3CODE_02:2048 mon_data/mon_L3CODE_03:27648 mon_data/mon_L3DATA_00:0 #L3DATA's monitoring data always be 0 mon_data/mon_L3DATA_01:0 mon_data/mon_L3DATA_02:0 mon_data/mon_L3DATA_03:0 mon_data/mon_MB_00:392 mon_data/mon_MB_01:552 mon_data/mon_MB_02:160 mon_data/mon_MB_03:0 If cdp on, tasks in resctrl default group with closid=0 and rmid=0 don't know how to fill proper partid_i/pmg_i and partid_d/pmg_d into MPAMx_ELx sysregs by mpam_sched_in() called by __switch_to(), it's because current cpu's default closid and rmid are also equal to 0 and to make the operation modifying configuration passed. Update per cpu default closid of none-zero value, call update_closid_rmid() to update each cpu's mpam proper MPAMx_ELx sysregs for setting partid and pmg when mounting resctrl sysfs, it looks like a practical method. Signed-off-by: Wang ShaoBo <bobo.shaobowang@huawei.com> Reviewed-by: Xiongfeng Wang <wangxiongfeng2@huawei.com> Reviewed-by: Cheng Jian <cj.chengjian@huawei.com> Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> --- fs/resctrlfs.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/fs/resctrlfs.c b/fs/resctrlfs.c index 48661b51ed36..4248dec9340a 100644 --- a/fs/resctrlfs.c +++ b/fs/resctrlfs.c @@ -317,6 +317,28 @@ static int mkdir_mondata_all(struct kernfs_node *parent_kn, return ret; } +static void resctrl_cdp_update_cpus_state(struct resctrl_group *r) +{ + int cpu; + + /* + * If cdp on, tasks in resctrl default group with closid=0 + * and rmid=0 don't know how to fill proper partid_i/pmg_i + * and partid_d/pmg_d into MPAMx_ELx sysregs by mpam_sched_in() + * called by __switch_to(), it's because current cpu's default + * closid and rmid are also equal to 0 and to make the operation + * modifying configuration passed. Update per cpu default closid + * of none-zero value, call update_closid_rmid() to update each + * cpu's mpam proper MPAMx_ELx sysregs for setting partid and + * pmg when mounting resctrl sysfs, it looks like a practical + * method. + */ + for_each_cpu(cpu, &r->cpu_mask) + per_cpu(pqr_state.default_closid, cpu) = ~0; + + update_closid_rmid(&r->cpu_mask, NULL); +} + static struct dentry *resctrl_mount(struct file_system_type *fs_type, int flags, const char *unused_dev_name, void *data) @@ -386,6 +408,8 @@ static struct dentry *resctrl_mount(struct file_system_type *fs_type, if (IS_ERR(dentry)) goto out_mondata; + resctrl_cdp_update_cpus_state(&resctrl_group_default); + post_resctrl_mount(); goto out; -- 2.25.1