[PATCH 1/7] perf tool: flush_sample_queue needs to handle errors from handlers

2012-08-26 Thread David Ahern
Allows errors to propogate through event processing code and back
to commands.

Signed-off-by: David Ahern 
Cc: Ingo Molnar 
Cc: Frederic Weisbecker 
Cc: Peter Zijlstra 
---
 tools/perf/util/session.c |   24 +++-
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index f7bb7ae..9453758 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -692,7 +692,7 @@ static int perf_session_deliver_event(struct perf_session 
*session,
  struct perf_tool *tool,
  u64 file_offset);
 
-static void flush_sample_queue(struct perf_session *s,
+static int flush_sample_queue(struct perf_session *s,
   struct perf_tool *tool)
 {
struct ordered_samples *os = >ordered_samples;
@@ -705,7 +705,7 @@ static void flush_sample_queue(struct perf_session *s,
int ret;
 
if (!tool->ordered_samples || !limit)
-   return;
+   return 0;
 
list_for_each_entry_safe(iter, tmp, head, list) {
if (iter->timestamp > limit)
@@ -715,9 +715,12 @@ static void flush_sample_queue(struct perf_session *s,
s->header.needs_swap);
if (ret)
pr_err("Can't parse sample, err = %d\n", ret);
-   else
-   perf_session_deliver_event(s, iter->event, , 
tool,
-  iter->file_offset);
+   else {
+   ret = perf_session_deliver_event(s, iter->event, 
, tool,
+iter->file_offset);
+   if (ret)
+   return ret;
+   }
 
os->last_flush = iter->timestamp;
list_del(>list);
@@ -737,6 +740,8 @@ static void flush_sample_queue(struct perf_session *s,
}
 
os->nr_samples = 0;
+
+   return 0;
 }
 
 /*
@@ -782,10 +787,11 @@ static int process_finished_round(struct perf_tool *tool,
  union perf_event *event __used,
  struct perf_session *session)
 {
-   flush_sample_queue(session, tool);
-   session->ordered_samples.next_flush = 
session->ordered_samples.max_timestamp;
+   int ret = flush_sample_queue(session, tool);
+   if (!ret)
+   session->ordered_samples.next_flush = 
session->ordered_samples.max_timestamp;
 
-   return 0;
+   return ret;
 }
 
 /* The queue is ordered by time */
@@ -1443,7 +1449,7 @@ more:
err = 0;
/* do the final flush for ordered samples */
session->ordered_samples.next_flush = ULLONG_MAX;
-   flush_sample_queue(session, tool);
+   err = flush_sample_queue(session, tool);
 out_err:
perf_session__warn_about_errors(session, tool);
perf_session_free_sample_buffers(session);
-- 
1.7.10.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 1/7] perf tool: flush_sample_queue needs to handle errors from handlers

2012-08-26 Thread David Ahern
Allows errors to propogate through event processing code and back
to commands.

Signed-off-by: David Ahern dsah...@gmail.com
Cc: Ingo Molnar mi...@kernel.org
Cc: Frederic Weisbecker fweis...@gmail.com
Cc: Peter Zijlstra pet...@infradead.org
---
 tools/perf/util/session.c |   24 +++-
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index f7bb7ae..9453758 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -692,7 +692,7 @@ static int perf_session_deliver_event(struct perf_session 
*session,
  struct perf_tool *tool,
  u64 file_offset);
 
-static void flush_sample_queue(struct perf_session *s,
+static int flush_sample_queue(struct perf_session *s,
   struct perf_tool *tool)
 {
struct ordered_samples *os = s-ordered_samples;
@@ -705,7 +705,7 @@ static void flush_sample_queue(struct perf_session *s,
int ret;
 
if (!tool-ordered_samples || !limit)
-   return;
+   return 0;
 
list_for_each_entry_safe(iter, tmp, head, list) {
if (iter-timestamp  limit)
@@ -715,9 +715,12 @@ static void flush_sample_queue(struct perf_session *s,
s-header.needs_swap);
if (ret)
pr_err(Can't parse sample, err = %d\n, ret);
-   else
-   perf_session_deliver_event(s, iter-event, sample, 
tool,
-  iter-file_offset);
+   else {
+   ret = perf_session_deliver_event(s, iter-event, 
sample, tool,
+iter-file_offset);
+   if (ret)
+   return ret;
+   }
 
os-last_flush = iter-timestamp;
list_del(iter-list);
@@ -737,6 +740,8 @@ static void flush_sample_queue(struct perf_session *s,
}
 
os-nr_samples = 0;
+
+   return 0;
 }
 
 /*
@@ -782,10 +787,11 @@ static int process_finished_round(struct perf_tool *tool,
  union perf_event *event __used,
  struct perf_session *session)
 {
-   flush_sample_queue(session, tool);
-   session-ordered_samples.next_flush = 
session-ordered_samples.max_timestamp;
+   int ret = flush_sample_queue(session, tool);
+   if (!ret)
+   session-ordered_samples.next_flush = 
session-ordered_samples.max_timestamp;
 
-   return 0;
+   return ret;
 }
 
 /* The queue is ordered by time */
@@ -1443,7 +1449,7 @@ more:
err = 0;
/* do the final flush for ordered samples */
session-ordered_samples.next_flush = ULLONG_MAX;
-   flush_sample_queue(session, tool);
+   err = flush_sample_queue(session, tool);
 out_err:
perf_session__warn_about_errors(session, tool);
perf_session_free_sample_buffers(session);
-- 
1.7.10.1

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/