[RFC PATCH 10/10] ftrace: Factorize search and insertion in the function hashlist

From: Frederic Weisbecker
Date: Thu Jan 21 2010 - 20:18:30 EST


Factorize search and insertion operations in the function hashlist
to remove some redundant code.

Signed-off-by: Frederic Weisbecker <fweisbec@xxxxxxxxx>
Cc: Steven Rostedt <rostedt@xxxxxxxxxxx>
Cc: Li Zefan <lizf@xxxxxxxxxxxxxx>
Cc: Lai Jiangshan <laijs@xxxxxxxxxxxxxx>
---
kernel/trace/ftrace.c | 18 ++++++------------
kernel/trace/functions_hlist.h | 12 ++++++++++++
kernel/trace/trace_functions_graph.c | 17 +++++++----------
3 files changed, 25 insertions(+), 22 deletions(-)

diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index d719078..785d077 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -385,12 +385,9 @@ function_profile_call(unsigned long ip, unsigned long parent_ip)

hlist = &__get_cpu_var(func_hlist_cpu);

- rec = function_find_hlist_node(hlist, ip);
- if (!rec) {
- rec = function_hlist_record_alloc(hlist, ip);
- if (!rec)
- goto out;
- }
+ rec = function_get_hlist_node(hlist, ip);
+ if (!rec)
+ goto out;

rec->counter++;
out:
@@ -2198,12 +2195,9 @@ change_graph_function_hlist(unsigned long ip, int val, struct func_hlist *hlist)
{
struct func_node *rec;

- rec = function_find_hlist_node(hlist, ip);
- if (!rec) {
- rec = function_hlist_record_alloc(hlist, ip);
- if (!rec)
- return 1;
- }
+ rec = function_get_hlist_node(hlist, ip);
+ if (!rec)
+ return 1;

rec->graph_start = val;

diff --git a/kernel/trace/functions_hlist.h b/kernel/trace/functions_hlist.h
index 39d89b4..3baf4bb 100644
--- a/kernel/trace/functions_hlist.h
+++ b/kernel/trace/functions_hlist.h
@@ -40,3 +40,15 @@ int get_function_hlist(void);
void put_function_hlist(void);
void function_hlist_reset_profile(void);
void function_hlist_reset_graph(void);
+
+static inline struct func_node *
+function_get_hlist_node(struct func_hlist *hlist, unsigned long ip)
+{
+ struct func_node *rec;
+
+ rec = function_find_hlist_node(hlist, ip);
+ if (!rec)
+ rec = function_hlist_record_alloc(hlist, ip);
+
+ return rec;
+}
diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
index da24add..0fa0691 100644
--- a/kernel/trace/trace_functions_graph.c
+++ b/kernel/trace/trace_functions_graph.c
@@ -213,16 +213,13 @@ static inline int ftrace_graph_addr(unsigned long addr)

hlist = &__get_cpu_var(func_hlist_cpu);

- rec = function_find_hlist_node(hlist, addr);
- if (!rec) {
- /*
- * TODO: send a retrieval error event
- * to keep track of this.
- */
- rec = function_hlist_record_alloc(hlist, addr);
- if (!rec)
- return 0;
- }
+ /*
+ * TODO: send a retrieval error event
+ * to keep track of failures
+ */
+ rec = function_get_hlist_node(hlist, addr);
+ if (!rec)
+ return 0;

if (rec->graph_start)
return 1;
--
1.6.2.3

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