| .. | .. |
|---|
| 89 | 89 | static int get_llc_perf(unsigned long *llc_perf_miss) |
|---|
| 90 | 90 | { |
|---|
| 91 | 91 | __u64 total_misses; |
|---|
| 92 | + int ret; |
|---|
| 92 | 93 | |
|---|
| 93 | 94 | /* Stop counters after one span to get miss rate */ |
|---|
| 94 | 95 | |
|---|
| 95 | 96 | ioctl(fd_lm, PERF_EVENT_IOC_DISABLE, 0); |
|---|
| 96 | 97 | |
|---|
| 97 | | - if (read(fd_lm, &rf_cqm, sizeof(struct read_format)) == -1) { |
|---|
| 98 | + ret = read(fd_lm, &rf_cqm, sizeof(struct read_format)); |
|---|
| 99 | + if (ret == -1) { |
|---|
| 98 | 100 | perror("Could not get llc misses through perf"); |
|---|
| 99 | | - |
|---|
| 100 | 101 | return -1; |
|---|
| 101 | 102 | } |
|---|
| 102 | 103 | |
|---|
| 103 | 104 | total_misses = rf_cqm.values[0].value; |
|---|
| 104 | | - |
|---|
| 105 | | - close(fd_lm); |
|---|
| 106 | | - |
|---|
| 107 | 105 | *llc_perf_miss = total_misses; |
|---|
| 108 | 106 | |
|---|
| 109 | 107 | return 0; |
|---|
| .. | .. |
|---|
| 256 | 254 | memflush, operation, resctrl_val)) { |
|---|
| 257 | 255 | fprintf(stderr, "Error-running fill buffer\n"); |
|---|
| 258 | 256 | ret = -1; |
|---|
| 259 | | - break; |
|---|
| 257 | + goto pe_close; |
|---|
| 260 | 258 | } |
|---|
| 261 | 259 | |
|---|
| 262 | 260 | sleep(1); |
|---|
| 263 | 261 | ret = measure_cache_vals(param, bm_pid); |
|---|
| 264 | 262 | if (ret) |
|---|
| 265 | | - break; |
|---|
| 263 | + goto pe_close; |
|---|
| 264 | + |
|---|
| 265 | + close(fd_lm); |
|---|
| 266 | 266 | } else { |
|---|
| 267 | 267 | break; |
|---|
| 268 | 268 | } |
|---|
| 269 | 269 | } |
|---|
| 270 | 270 | |
|---|
| 271 | 271 | return ret; |
|---|
| 272 | + |
|---|
| 273 | +pe_close: |
|---|
| 274 | + close(fd_lm); |
|---|
| 275 | + return ret; |
|---|
| 272 | 276 | } |
|---|