On Fri, 13 Mar 2026, Reinette Chatre wrote: > The events needed to read memory bandwidth are discovered by iterating > over every memory controller (iMC) within /sys/bus/event_source/devices. > Each iMC's PMU is assumed to have one event to measure read memory > bandwidth that is represented by the sysfs cas_count_read file. The event's > configuration is read from "cas_count_read" and stored as an element of > imc_counters_config[] by read_from_imc_dir() that receives the > index of the array where to store the configuration as argument. > > It is possible that an iMC's PMU may have more than one event that should > be used to measure memory bandwidth. > > Change semantics to not provide the index of the array to > read_from_imc_dir() but instead a pointer to the index. This enables > read_from_imc_dir() to store configurations for more than one event by > incrementing the index to imc_counters_config[] itself. > > Ensure that the same type is consistently used for the index as it is > passed around during counter configuration. > > Signed-off-by: Reinette Chatre <[email protected]> > Tested-by: Chen Yu <[email protected]> > Reviewed-by: Zide Chen <[email protected]> > --- > Changes since v1: > - Add Zide Chen's RB tag. > > Changes since v2: > - Add Chen Yu's tag. > --- > tools/testing/selftests/resctrl/resctrl_val.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/tools/testing/selftests/resctrl/resctrl_val.c > b/tools/testing/selftests/resctrl/resctrl_val.c > index 71d6f88cc1f7..6d766347e3fc 100644 > --- a/tools/testing/selftests/resctrl/resctrl_val.c > +++ b/tools/testing/selftests/resctrl/resctrl_val.c > @@ -73,7 +73,7 @@ static void read_mem_bw_ioctl_perf_event_ioc_disable(int i) > * @cas_count_cfg: Config > * @count: iMC number > */ > -static void get_read_event_and_umask(char *cas_count_cfg, int count) > +static void get_read_event_and_umask(char *cas_count_cfg, unsigned int count) > { > char *token[MAX_TOKENS]; > int i = 0; > @@ -110,7 +110,7 @@ static int open_perf_read_event(int i, int cpu_no) > } > > /* Get type and config of an iMC counter's read event. */ > -static int read_from_imc_dir(char *imc_dir, int count) > +static int read_from_imc_dir(char *imc_dir, unsigned int *count) > { > char cas_count_cfg[1024], imc_counter_cfg[1024], imc_counter_type[1024]; > FILE *fp; > @@ -123,7 +123,7 @@ static int read_from_imc_dir(char *imc_dir, int count) > > return -1; > } > - if (fscanf(fp, "%u", &imc_counters_config[count].type) <= 0) { > + if (fscanf(fp, "%u", &imc_counters_config[*count].type) <= 0) { > ksft_perror("Could not get iMC type"); > fclose(fp); > > @@ -147,7 +147,8 @@ static int read_from_imc_dir(char *imc_dir, int count) > } > fclose(fp); > > - get_read_event_and_umask(cas_count_cfg, count); > + get_read_event_and_umask(cas_count_cfg, *count); > + *count += 1; > > return 0; > } > @@ -196,13 +197,12 @@ static int num_of_imcs(void) > if (temp[0] >= '0' && temp[0] <= '9') { > sprintf(imc_dir, "%s/%s/", DYN_PMU_PATH, > ep->d_name); > - ret = read_from_imc_dir(imc_dir, count); > + ret = read_from_imc_dir(imc_dir, &count); > if (ret) { > closedir(dp); > > return ret; > } > - count++; > } > } > closedir(dp); >
Reviewed-by: Ilpo Järvinen <[email protected]> -- i.

