On Tue, 3 Mar 2026, Reinette Chatre wrote:

> The MBM and MBA tests compare MBM memory bandwidth measurements against
> the memory bandwidth event values obtained from each memory controller's
> PMU. The memory bandwidth event settings are discovered from the memory
> controller details found in /sys/bus/event_source/devices/uncore_imc_N and
> stored in struct imc_counter_config.
> 
> In addition to event settings struct imc_counter_config contains
> imc_counter_config::return_value in which the associated event value is
> stored on every read.
> 
> The event value is consumed and immediately recorded at regular intervals.
> The stored value is never consumed afterwards, making its storage as part
> of event configuration unnecessary.
> 
> Remove the return_value member from struct imc_counter_config. Instead
> just use a local variable for use during event reading.
> 
> Signed-off-by: Reinette Chatre <[email protected]>
> ---
>  tools/testing/selftests/resctrl/resctrl_val.c | 11 +++++------
>  1 file changed, 5 insertions(+), 6 deletions(-)
> 
> diff --git a/tools/testing/selftests/resctrl/resctrl_val.c 
> b/tools/testing/selftests/resctrl/resctrl_val.c
> index a5a8badb83d4..2cc22f61a1f8 100644
> --- a/tools/testing/selftests/resctrl/resctrl_val.c
> +++ b/tools/testing/selftests/resctrl/resctrl_val.c
> @@ -32,7 +32,6 @@ struct imc_counter_config {
>       __u64 event;
>       __u64 umask;
>       struct perf_event_attr pe;
> -     struct membw_read_format return_value;
>       int fd;
>  };
>  
> @@ -312,23 +311,23 @@ static int get_read_mem_bw_imc(float *bw_imc)
>        * Take overflow into consideration before calculating total bandwidth.
>        */
>       for (imc = 0; imc < imcs; imc++) {
> +             struct membw_read_format return_value;
>               struct imc_counter_config *r =
>                       &imc_counters_config[imc];
>  
> -             if (read(r->fd, &r->return_value,
> -                      sizeof(struct membw_read_format)) == -1) {
> +             if (read(r->fd, &return_value, sizeof(return_value)) == -1) {
>                       ksft_perror("Couldn't get read bandwidth through iMC");
>                       return -1;
>               }
>  
> -             __u64 r_time_enabled = r->return_value.time_enabled;
> -             __u64 r_time_running = r->return_value.time_running;
> +             __u64 r_time_enabled = return_value.time_enabled;
> +             __u64 r_time_running = return_value.time_running;
>  
>               if (r_time_enabled != r_time_running)
>                       of_mul_read = (float)r_time_enabled /
>                                       (float)r_time_running;
>  
> -             reads += r->return_value.value * of_mul_read * SCALE;
> +             reads += return_value.value * of_mul_read * SCALE;
>       }

This looks mostly okay though here too I don't like the variable name. 
Something like "measurement" would tell what it is much better than overly 
vague "return_value".

Reviewed-by: Ilpo Järvinen <[email protected]>

-- 
 i.

Reply via email to