.. | .. |
---|
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 | } |
---|