Hi Reinette,

On 4/23/2026 12:02 AM, Reinette Chatre wrote:
Hi Yifan,

On 4/10/26 2:33 AM, Yifan Wu wrote:
@@ -113,6 +115,7 @@ static int parse_imc_read_bw_events(char *imc_dir, unsigned 
int type,
                                    unsigned int *count)
  {
        char imc_events_dir[PATH_MAX], imc_counter_cfg[PATH_MAX];
+       struct imc_counter_config *imc_counter;
        unsigned int orig_count = *count;
        char cas_count_cfg[1024];
        struct dirent *ep;
@@ -167,11 +170,17 @@ static int parse_imc_read_bw_events(char *imc_dir, 
unsigned int type,
                        ksft_print_msg("Maximum iMC count exceeded\n");
                        goto out_close;
                }
+               imc_counter = calloc(1, sizeof(*imc_counter));
+               if (!imc_counter) {
+                       ksft_perror("Unable to allocate memory for iMC 
counters\n");
+                       goto out_close;
+               }
imc_counters_config[*count].type = type;
                get_read_event_and_umask(cas_count_cfg, *count);
                /* Do not fail after incrementing *count. */
                *count += 1;
+               list_add(&imc_counter->entry, &imc_counters_list);
        }
        if (*count == orig_count) {
                ksft_print_msg("Unable to find events in %s\n", imc_events_dir);
Should cleanup_read_mem_bw_imc() be called on error exit path?
Thank you for your suggestion. When parse_imc_read_bw_events() exits with an
error, the linked list imc_counters_list will be cleaned up in test_cleanup().

main()
└── run_single_test()
    ├── mbm_run_test()
    │   └── resctrl_val()
    │       └── mbm_init()
    │           └── initialize_read_mem_bw_imc()
    │               └── enumerate_imcs()
    │                   └── read_from_imc_dir()
    │                       └── parse_imc_read_bw_events()
    │                           └── calloc()
    └── test_cleanup()
        └── mbm_test_cleanup()
            └── cleanup_read_mem_bw_imc()

Calling cleanup_read_mem_bw_imc() in the error exit path may be intended
to prevent resource leaks. However, this results in the function being called
repeatedly in both the error exit branch and test_cleanup().

Is there any specific intention behind calling it in parse_imc_read_bw_events()?
Or should the cleanup be uniformly handled in test_cleanup()?

Yifan



Reply via email to