aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2012-01-03 15:27:45 -0500
committerArnd Bergmann <arnd@arndb.de>2012-01-03 15:27:45 -0500
commit5d3cb0ffdd0c8987dc17a2ef4529b246198ceb72 (patch)
treec60bdca0529cbd44d32b3918b78d14e182ef57cd /kernel/trace
parent3b0d597139efddfd8960b44249b4a4c977d172f1 (diff)
parent5f0a6e2d503896062f641639dacfe5055c2f593b (diff)
Merge branch 'v3.2-rc7' into next/pm
Conflicts: arch/arm/kernel/setup.c arch/arm/mach-shmobile/board-kota2.c
Diffstat (limited to 'kernel/trace')
-rw-r--r--kernel/trace/ftrace.c5
-rw-r--r--kernel/trace/trace_events.c1
-rw-r--r--kernel/trace/trace_events_filter.c13
3 files changed, 12 insertions, 7 deletions
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index 900b409543db..b1e8943fed1d 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -152,7 +152,6 @@ void clear_ftrace_function(void)
152 ftrace_pid_function = ftrace_stub; 152 ftrace_pid_function = ftrace_stub;
153} 153}
154 154
155#undef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST
156#ifndef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST 155#ifndef CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST
157/* 156/*
158 * For those archs that do not test ftrace_trace_stop in their 157 * For those archs that do not test ftrace_trace_stop in their
@@ -1212,7 +1211,9 @@ ftrace_hash_move(struct ftrace_ops *ops, int enable,
1212 if (!src->count) { 1211 if (!src->count) {
1213 free_ftrace_hash_rcu(*dst); 1212 free_ftrace_hash_rcu(*dst);
1214 rcu_assign_pointer(*dst, EMPTY_HASH); 1213 rcu_assign_pointer(*dst, EMPTY_HASH);
1215 return 0; 1214 /* still need to update the function records */
1215 ret = 0;
1216 goto out;
1216 } 1217 }
1217 1218
1218 /* 1219 /*
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 581876f9f387..c212a7f934ec 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -1078,7 +1078,6 @@ event_subsystem_dir(const char *name, struct dentry *d_events)
1078 /* First see if we did not already create this dir */ 1078 /* First see if we did not already create this dir */
1079 list_for_each_entry(system, &event_subsystems, list) { 1079 list_for_each_entry(system, &event_subsystems, list) {
1080 if (strcmp(system->name, name) == 0) { 1080 if (strcmp(system->name, name) == 0) {
1081 __get_system(system);
1082 system->nr_events++; 1081 system->nr_events++;
1083 return system->entry; 1082 return system->entry;
1084 } 1083 }
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
index 816d3d074979..95dc31efd6dd 100644
--- a/kernel/trace/trace_events_filter.c
+++ b/kernel/trace/trace_events_filter.c
@@ -1649,7 +1649,9 @@ static int replace_system_preds(struct event_subsystem *system,
1649 */ 1649 */
1650 err = replace_preds(call, NULL, ps, filter_string, true); 1650 err = replace_preds(call, NULL, ps, filter_string, true);
1651 if (err) 1651 if (err)
1652 goto fail; 1652 call->flags |= TRACE_EVENT_FL_NO_SET_FILTER;
1653 else
1654 call->flags &= ~TRACE_EVENT_FL_NO_SET_FILTER;
1653 } 1655 }
1654 1656
1655 list_for_each_entry(call, &ftrace_events, list) { 1657 list_for_each_entry(call, &ftrace_events, list) {
@@ -1658,6 +1660,9 @@ static int replace_system_preds(struct event_subsystem *system,
1658 if (strcmp(call->class->system, system->name) != 0) 1660 if (strcmp(call->class->system, system->name) != 0)
1659 continue; 1661 continue;
1660 1662
1663 if (call->flags & TRACE_EVENT_FL_NO_SET_FILTER)
1664 continue;
1665
1661 filter_item = kzalloc(sizeof(*filter_item), GFP_KERNEL); 1666 filter_item = kzalloc(sizeof(*filter_item), GFP_KERNEL);
1662 if (!filter_item) 1667 if (!filter_item)
1663 goto fail_mem; 1668 goto fail_mem;
@@ -1686,7 +1691,7 @@ static int replace_system_preds(struct event_subsystem *system,
1686 * replace the filter for the call. 1691 * replace the filter for the call.
1687 */ 1692 */
1688 filter = call->filter; 1693 filter = call->filter;
1689 call->filter = filter_item->filter; 1694 rcu_assign_pointer(call->filter, filter_item->filter);
1690 filter_item->filter = filter; 1695 filter_item->filter = filter;
1691 1696
1692 fail = false; 1697 fail = false;
@@ -1741,7 +1746,7 @@ int apply_event_filter(struct ftrace_event_call *call, char *filter_string)
1741 filter = call->filter; 1746 filter = call->filter;
1742 if (!filter) 1747 if (!filter)
1743 goto out_unlock; 1748 goto out_unlock;
1744 call->filter = NULL; 1749 RCU_INIT_POINTER(call->filter, NULL);
1745 /* Make sure the filter is not being used */ 1750 /* Make sure the filter is not being used */
1746 synchronize_sched(); 1751 synchronize_sched();
1747 __free_filter(filter); 1752 __free_filter(filter);
@@ -1782,7 +1787,7 @@ out:
1782 * string 1787 * string
1783 */ 1788 */
1784 tmp = call->filter; 1789 tmp = call->filter;
1785 call->filter = filter; 1790 rcu_assign_pointer(call->filter, filter);
1786 if (tmp) { 1791 if (tmp) {
1787 /* Make sure the call is done with the filter */ 1792 /* Make sure the call is done with the filter */
1788 synchronize_sched(); 1793 synchronize_sched();