diff options
| -rw-r--r-- | tools/perf/util/cs-etm.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c index 3011c6cae531..aac07f950074 100644 --- a/tools/perf/util/cs-etm.c +++ b/tools/perf/util/cs-etm.c | |||
| @@ -175,6 +175,10 @@ static void cs_etm__dump_event(struct cs_etm_auxtrace *etm, | |||
| 175 | 175 | ||
| 176 | /* Use metadata to fill in trace parameters for trace decoder */ | 176 | /* Use metadata to fill in trace parameters for trace decoder */ |
| 177 | t_params = zalloc(sizeof(*t_params) * etm->num_cpu); | 177 | t_params = zalloc(sizeof(*t_params) * etm->num_cpu); |
| 178 | |||
| 179 | if (!t_params) | ||
| 180 | return; | ||
| 181 | |||
| 178 | for (i = 0; i < etm->num_cpu; i++) { | 182 | for (i = 0; i < etm->num_cpu; i++) { |
| 179 | if (etm->metadata[i][CS_ETM_MAGIC] == __perf_cs_etmv3_magic) { | 183 | if (etm->metadata[i][CS_ETM_MAGIC] == __perf_cs_etmv3_magic) { |
| 180 | u32 etmidr = etm->metadata[i][CS_ETM_ETMIDR]; | 184 | u32 etmidr = etm->metadata[i][CS_ETM_ETMIDR]; |
| @@ -206,14 +210,12 @@ static void cs_etm__dump_event(struct cs_etm_auxtrace *etm, | |||
| 206 | /* Set decoder parameters to simply print the trace packets */ | 210 | /* Set decoder parameters to simply print the trace packets */ |
| 207 | if (cs_etm__init_decoder_params(&d_params, NULL, | 211 | if (cs_etm__init_decoder_params(&d_params, NULL, |
| 208 | CS_ETM_OPERATION_PRINT)) | 212 | CS_ETM_OPERATION_PRINT)) |
| 209 | return; | 213 | goto out_free; |
| 210 | 214 | ||
| 211 | decoder = cs_etm_decoder__new(etm->num_cpu, &d_params, t_params); | 215 | decoder = cs_etm_decoder__new(etm->num_cpu, &d_params, t_params); |
| 212 | 216 | ||
| 213 | zfree(&t_params); | ||
| 214 | |||
| 215 | if (!decoder) | 217 | if (!decoder) |
| 216 | return; | 218 | goto out_free; |
| 217 | do { | 219 | do { |
| 218 | size_t consumed; | 220 | size_t consumed; |
| 219 | 221 | ||
| @@ -228,6 +230,9 @@ static void cs_etm__dump_event(struct cs_etm_auxtrace *etm, | |||
| 228 | } while (buffer_used < buffer->size); | 230 | } while (buffer_used < buffer->size); |
| 229 | 231 | ||
| 230 | cs_etm_decoder__free(decoder); | 232 | cs_etm_decoder__free(decoder); |
| 233 | |||
| 234 | out_free: | ||
| 235 | zfree(&t_params); | ||
| 231 | } | 236 | } |
| 232 | 237 | ||
| 233 | static int cs_etm__flush_events(struct perf_session *session, | 238 | static int cs_etm__flush_events(struct perf_session *session, |
| @@ -379,7 +384,7 @@ static struct cs_etm_queue *cs_etm__alloc_queue(struct cs_etm_auxtrace *etm, | |||
| 379 | { | 384 | { |
| 380 | int i; | 385 | int i; |
| 381 | struct cs_etm_decoder_params d_params; | 386 | struct cs_etm_decoder_params d_params; |
| 382 | struct cs_etm_trace_params *t_params; | 387 | struct cs_etm_trace_params *t_params = NULL; |
| 383 | struct cs_etm_queue *etmq; | 388 | struct cs_etm_queue *etmq; |
| 384 | size_t szp = sizeof(struct cs_etm_packet); | 389 | size_t szp = sizeof(struct cs_etm_packet); |
| 385 | 390 | ||
| @@ -461,8 +466,6 @@ static struct cs_etm_queue *cs_etm__alloc_queue(struct cs_etm_auxtrace *etm, | |||
| 461 | 466 | ||
| 462 | etmq->decoder = cs_etm_decoder__new(etm->num_cpu, &d_params, t_params); | 467 | etmq->decoder = cs_etm_decoder__new(etm->num_cpu, &d_params, t_params); |
| 463 | 468 | ||
| 464 | zfree(&t_params); | ||
| 465 | |||
| 466 | if (!etmq->decoder) | 469 | if (!etmq->decoder) |
| 467 | goto out_free; | 470 | goto out_free; |
| 468 | 471 | ||
| @@ -475,6 +478,8 @@ static struct cs_etm_queue *cs_etm__alloc_queue(struct cs_etm_auxtrace *etm, | |||
| 475 | cs_etm__mem_access)) | 478 | cs_etm__mem_access)) |
| 476 | goto out_free_decoder; | 479 | goto out_free_decoder; |
| 477 | 480 | ||
| 481 | zfree(&t_params); | ||
| 482 | |||
| 478 | etmq->offset = 0; | 483 | etmq->offset = 0; |
| 479 | etmq->period_instructions = 0; | 484 | etmq->period_instructions = 0; |
| 480 | 485 | ||
| @@ -483,6 +488,7 @@ static struct cs_etm_queue *cs_etm__alloc_queue(struct cs_etm_auxtrace *etm, | |||
| 483 | out_free_decoder: | 488 | out_free_decoder: |
| 484 | cs_etm_decoder__free(etmq->decoder); | 489 | cs_etm_decoder__free(etmq->decoder); |
| 485 | out_free: | 490 | out_free: |
| 491 | zfree(&t_params); | ||
| 486 | zfree(&etmq->event_buf); | 492 | zfree(&etmq->event_buf); |
| 487 | zfree(&etmq->last_branch); | 493 | zfree(&etmq->last_branch); |
| 488 | zfree(&etmq->last_branch_rb); | 494 | zfree(&etmq->last_branch_rb); |
