[tip:perf/core] perf callchain: Factor out adding new call chain entries

2014-11-19 Thread tip-bot for Andi Kleen
Commit-ID:  37592b8afb7151994e760d1727c264329d9c13c8
Gitweb: http://git.kernel.org/tip/37592b8afb7151994e760d1727c264329d9c13c8
Author: Andi Kleen 
AuthorDate: Wed, 12 Nov 2014 18:05:19 -0800
Committer:  Arnaldo Carvalho de Melo 
CommitDate: Wed, 19 Nov 2014 12:33:47 -0300

perf callchain: Factor out adding new call chain entries

Move the code to resolve and add a new callchain entry into a new
add_callchain_ip function. This will be used in the next patches to add
LBRs too.

No change in behavior.

Signed-off-by: Andi Kleen 
Cc: Jiri Olsa 
Cc: Namhyung Kim 
Link: 
http://lkml.kernel.org/r/1415844328-4884-2-git-send-email-a...@firstfloor.org
Signed-off-by: Arnaldo Carvalho de Melo 
---
 tools/perf/util/machine.c | 51 +--
 1 file changed, 32 insertions(+), 19 deletions(-)

diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
index 52e9490..84390ee 100644
--- a/tools/perf/util/machine.c
+++ b/tools/perf/util/machine.c
@@ -1381,6 +1381,34 @@ struct mem_info *sample__resolve_mem(struct perf_sample 
*sample,
return mi;
 }
 
+static int add_callchain_ip(struct thread *thread,
+   struct symbol **parent,
+   struct addr_location *root_al,
+   int cpumode,
+   u64 ip)
+{
+   struct addr_location al;
+
+   al.filtered = 0;
+   al.sym = NULL;
+   thread__find_addr_location(thread, cpumode, MAP__FUNCTION,
+  ip, );
+   if (al.sym != NULL) {
+   if (sort__has_parent && !*parent &&
+   symbol__match_regex(al.sym, _regex))
+   *parent = al.sym;
+   else if (have_ignore_callees && root_al &&
+ symbol__match_regex(al.sym, _callees_regex)) {
+   /* Treat this symbol as the root,
+  forgetting its callees. */
+   *root_al = al;
+   callchain_cursor_reset(_cursor);
+   }
+   }
+
+   return callchain_cursor_append(_cursor, ip, al.map, al.sym);
+}
+
 struct branch_info *sample__resolve_bstack(struct perf_sample *sample,
   struct addr_location *al)
 {
@@ -1427,7 +1455,6 @@ static int thread__resolve_callchain_sample(struct thread 
*thread,
 
for (i = 0; i < chain_nr; i++) {
u64 ip;
-   struct addr_location al;
 
if (callchain_param.order == ORDER_CALLEE)
j = i;
@@ -1464,24 +1491,10 @@ static int thread__resolve_callchain_sample(struct 
thread *thread,
continue;
}
 
-   al.filtered = 0;
-   thread__find_addr_location(thread, cpumode,
-  MAP__FUNCTION, ip, );
-   if (al.sym != NULL) {
-   if (sort__has_parent && !*parent &&
-   symbol__match_regex(al.sym, _regex))
-   *parent = al.sym;
-   else if (have_ignore_callees && root_al &&
- symbol__match_regex(al.sym, _callees_regex)) {
-   /* Treat this symbol as the root,
-  forgetting its callees. */
-   *root_al = al;
-   callchain_cursor_reset(_cursor);
-   }
-   }
-
-   err = callchain_cursor_append(_cursor,
- ip, al.map, al.sym);
+   err = add_callchain_ip(thread, parent, root_al,
+  cpumode, ip);
+   if (err == -EINVAL)
+   break;
if (err)
return err;
}
--
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/


[tip:perf/core] perf callchain: Factor out adding new call chain entries

2014-11-19 Thread tip-bot for Andi Kleen
Commit-ID:  37592b8afb7151994e760d1727c264329d9c13c8
Gitweb: http://git.kernel.org/tip/37592b8afb7151994e760d1727c264329d9c13c8
Author: Andi Kleen a...@linux.intel.com
AuthorDate: Wed, 12 Nov 2014 18:05:19 -0800
Committer:  Arnaldo Carvalho de Melo a...@redhat.com
CommitDate: Wed, 19 Nov 2014 12:33:47 -0300

perf callchain: Factor out adding new call chain entries

Move the code to resolve and add a new callchain entry into a new
add_callchain_ip function. This will be used in the next patches to add
LBRs too.

No change in behavior.

Signed-off-by: Andi Kleen a...@linux.intel.com
Cc: Jiri Olsa jo...@redhat.com
Cc: Namhyung Kim namhy...@kernel.org
Link: 
http://lkml.kernel.org/r/1415844328-4884-2-git-send-email-a...@firstfloor.org
Signed-off-by: Arnaldo Carvalho de Melo a...@redhat.com
---
 tools/perf/util/machine.c | 51 +--
 1 file changed, 32 insertions(+), 19 deletions(-)

diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
index 52e9490..84390ee 100644
--- a/tools/perf/util/machine.c
+++ b/tools/perf/util/machine.c
@@ -1381,6 +1381,34 @@ struct mem_info *sample__resolve_mem(struct perf_sample 
*sample,
return mi;
 }
 
+static int add_callchain_ip(struct thread *thread,
+   struct symbol **parent,
+   struct addr_location *root_al,
+   int cpumode,
+   u64 ip)
+{
+   struct addr_location al;
+
+   al.filtered = 0;
+   al.sym = NULL;
+   thread__find_addr_location(thread, cpumode, MAP__FUNCTION,
+  ip, al);
+   if (al.sym != NULL) {
+   if (sort__has_parent  !*parent 
+   symbol__match_regex(al.sym, parent_regex))
+   *parent = al.sym;
+   else if (have_ignore_callees  root_al 
+ symbol__match_regex(al.sym, ignore_callees_regex)) {
+   /* Treat this symbol as the root,
+  forgetting its callees. */
+   *root_al = al;
+   callchain_cursor_reset(callchain_cursor);
+   }
+   }
+
+   return callchain_cursor_append(callchain_cursor, ip, al.map, al.sym);
+}
+
 struct branch_info *sample__resolve_bstack(struct perf_sample *sample,
   struct addr_location *al)
 {
@@ -1427,7 +1455,6 @@ static int thread__resolve_callchain_sample(struct thread 
*thread,
 
for (i = 0; i  chain_nr; i++) {
u64 ip;
-   struct addr_location al;
 
if (callchain_param.order == ORDER_CALLEE)
j = i;
@@ -1464,24 +1491,10 @@ static int thread__resolve_callchain_sample(struct 
thread *thread,
continue;
}
 
-   al.filtered = 0;
-   thread__find_addr_location(thread, cpumode,
-  MAP__FUNCTION, ip, al);
-   if (al.sym != NULL) {
-   if (sort__has_parent  !*parent 
-   symbol__match_regex(al.sym, parent_regex))
-   *parent = al.sym;
-   else if (have_ignore_callees  root_al 
- symbol__match_regex(al.sym, ignore_callees_regex)) {
-   /* Treat this symbol as the root,
-  forgetting its callees. */
-   *root_al = al;
-   callchain_cursor_reset(callchain_cursor);
-   }
-   }
-
-   err = callchain_cursor_append(callchain_cursor,
- ip, al.map, al.sym);
+   err = add_callchain_ip(thread, parent, root_al,
+  cpumode, ip);
+   if (err == -EINVAL)
+   break;
if (err)
return err;
}
--
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/