aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tools/perf/builtin-test.c9
-rw-r--r--tools/perf/builtin-top.c7
-rw-r--r--tools/perf/util/python.c14
-rw-r--r--tools/perf/util/session.c14
4 files changed, 33 insertions, 11 deletions
diff --git a/tools/perf/builtin-test.c b/tools/perf/builtin-test.c
index 44d7df280430..1fa9f58c2af2 100644
--- a/tools/perf/builtin-test.c
+++ b/tools/perf/builtin-test.c
@@ -559,8 +559,13 @@ static int test__basic_mmap(void)
559 goto out_munmap; 559 goto out_munmap;
560 } 560 }
561 561
562 perf_event__parse_sample(event, attr.sample_type, sample_size, 562 err = perf_event__parse_sample(event, attr.sample_type, sample_size,
563 false, &sample); 563 false, &sample);
564 if (err) {
565 pr_err("Can't parse sample, err = %d\n", err);
566 goto out_munmap;
567 }
568
564 evsel = perf_evlist__id2evsel(evlist, sample.id); 569 evsel = perf_evlist__id2evsel(evlist, sample.id);
565 if (evsel == NULL) { 570 if (evsel == NULL) {
566 pr_debug("event with id %" PRIu64 571 pr_debug("event with id %" PRIu64
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index 7e3d6e310bf8..74f533cbf6ca 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -805,9 +805,14 @@ static void perf_session__mmap_read_cpu(struct perf_session *self, int cpu)
805{ 805{
806 struct perf_sample sample; 806 struct perf_sample sample;
807 union perf_event *event; 807 union perf_event *event;
808 int ret;
808 809
809 while ((event = perf_evlist__read_on_cpu(top.evlist, cpu)) != NULL) { 810 while ((event = perf_evlist__read_on_cpu(top.evlist, cpu)) != NULL) {
810 perf_session__parse_sample(self, event, &sample); 811 ret = perf_session__parse_sample(self, event, &sample);
812 if (ret) {
813 pr_err("Can't parse sample, err = %d\n", ret);
814 continue;
815 }
811 816
812 if (event->header.type == PERF_RECORD_SAMPLE) 817 if (event->header.type == PERF_RECORD_SAMPLE)
813 perf_event__process_sample(event, &sample, self); 818 perf_event__process_sample(event, &sample, self);
diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c
index 4174c0990320..3344d6e6f048 100644
--- a/tools/perf/util/python.c
+++ b/tools/perf/util/python.c
@@ -675,6 +675,7 @@ static PyObject *pyrf_evlist__read_on_cpu(struct pyrf_evlist *pevlist,
675 union perf_event *event; 675 union perf_event *event;
676 int sample_id_all = 1, cpu; 676 int sample_id_all = 1, cpu;
677 static char *kwlist[] = {"sample_id_all", NULL, NULL}; 677 static char *kwlist[] = {"sample_id_all", NULL, NULL};
678 int err;
678 679
679 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i|i", kwlist, 680 if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i|i", kwlist,
680 &cpu, &sample_id_all)) 681 &cpu, &sample_id_all))
@@ -690,12 +691,17 @@ static PyObject *pyrf_evlist__read_on_cpu(struct pyrf_evlist *pevlist,
690 return PyErr_NoMemory(); 691 return PyErr_NoMemory();
691 692
692 first = list_entry(evlist->entries.next, struct perf_evsel, node); 693 first = list_entry(evlist->entries.next, struct perf_evsel, node);
693 perf_event__parse_sample(event, first->attr.sample_type, 694 err = perf_event__parse_sample(event, first->attr.sample_type,
694 perf_sample_size(first->attr.sample_type), 695 perf_sample_size(first->attr.sample_type),
695 sample_id_all, &pevent->sample); 696 sample_id_all, &pevent->sample);
697 if (err) {
698 pr_err("Can't parse sample, err = %d\n", err);
699 goto end;
700 }
701
696 return pyevent; 702 return pyevent;
697 } 703 }
698 704end:
699 Py_INCREF(Py_None); 705 Py_INCREF(Py_None);
700 return Py_None; 706 return Py_None;
701} 707}
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index 8940fd871eae..948327d9e92b 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -480,6 +480,7 @@ static void flush_sample_queue(struct perf_session *s,
480 struct perf_sample sample; 480 struct perf_sample sample;
481 u64 limit = os->next_flush; 481 u64 limit = os->next_flush;
482 u64 last_ts = os->last_sample ? os->last_sample->timestamp : 0ULL; 482 u64 last_ts = os->last_sample ? os->last_sample->timestamp : 0ULL;
483 int ret;
483 484
484 if (!ops->ordered_samples || !limit) 485 if (!ops->ordered_samples || !limit)
485 return; 486 return;
@@ -488,9 +489,12 @@ static void flush_sample_queue(struct perf_session *s,
488 if (iter->timestamp > limit) 489 if (iter->timestamp > limit)
489 break; 490 break;
490 491
491 perf_session__parse_sample(s, iter->event, &sample); 492 ret = perf_session__parse_sample(s, iter->event, &sample);
492 perf_session_deliver_event(s, iter->event, &sample, ops, 493 if (ret)
493 iter->file_offset); 494 pr_err("Can't parse sample, err = %d\n", ret);
495 else
496 perf_session_deliver_event(s, iter->event, &sample, ops,
497 iter->file_offset);
494 498
495 os->last_flush = iter->timestamp; 499 os->last_flush = iter->timestamp;
496 list_del(&iter->list); 500 list_del(&iter->list);
@@ -806,7 +810,9 @@ static int perf_session__process_event(struct perf_session *session,
806 /* 810 /*
807 * For all kernel events we get the sample data 811 * For all kernel events we get the sample data
808 */ 812 */
809 perf_session__parse_sample(session, event, &sample); 813 ret = perf_session__parse_sample(session, event, &sample);
814 if (ret)
815 return ret;
810 816
811 /* Preprocess sample records - precheck callchains */ 817 /* Preprocess sample records - precheck callchains */
812 if (perf_session__preprocess_sample(session, event, &sample)) 818 if (perf_session__preprocess_sample(session, event, &sample))