diff options
| -rw-r--r-- | include/linux/ftrace.h | 3 | ||||
| -rw-r--r-- | kernel/trace/ftrace.c | 42 | ||||
| -rw-r--r-- | kernel/trace/trace.c | 2 |
3 files changed, 4 insertions, 43 deletions
diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h index 79fa10cbdcfb..ac58e94668b7 100644 --- a/include/linux/ftrace.h +++ b/include/linux/ftrace.h | |||
| @@ -40,7 +40,7 @@ extern void ftrace_stub(unsigned long a0, unsigned long a1); | |||
| 40 | # define register_ftrace_function(ops) do { } while (0) | 40 | # define register_ftrace_function(ops) do { } while (0) |
| 41 | # define unregister_ftrace_function(ops) do { } while (0) | 41 | # define unregister_ftrace_function(ops) do { } while (0) |
| 42 | # define clear_ftrace_function(ops) do { } while (0) | 42 | # define clear_ftrace_function(ops) do { } while (0) |
| 43 | static inline void ftrace_kill_atomic(void) { } | 43 | static inline void ftrace_kill(void) { } |
| 44 | #endif /* CONFIG_FUNCTION_TRACER */ | 44 | #endif /* CONFIG_FUNCTION_TRACER */ |
| 45 | 45 | ||
| 46 | #ifdef CONFIG_DYNAMIC_FTRACE | 46 | #ifdef CONFIG_DYNAMIC_FTRACE |
| @@ -117,7 +117,6 @@ static inline void ftrace_release(void *start, unsigned long size) { } | |||
| 117 | 117 | ||
| 118 | /* totally disable ftrace - can not re-enable after this */ | 118 | /* totally disable ftrace - can not re-enable after this */ |
| 119 | void ftrace_kill(void); | 119 | void ftrace_kill(void); |
| 120 | void ftrace_kill_atomic(void); | ||
| 121 | 120 | ||
| 122 | static inline void tracer_disable(void) | 121 | static inline void tracer_disable(void) |
| 123 | { | 122 | { |
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index b2de8de77356..93245ae046e1 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c | |||
| @@ -1549,22 +1549,6 @@ int ftrace_force_update(void) | |||
| 1549 | return ret; | 1549 | return ret; |
| 1550 | } | 1550 | } |
| 1551 | 1551 | ||
| 1552 | static void ftrace_force_shutdown(void) | ||
| 1553 | { | ||
| 1554 | struct task_struct *task; | ||
| 1555 | int command = FTRACE_DISABLE_CALLS | FTRACE_UPDATE_TRACE_FUNC; | ||
| 1556 | |||
| 1557 | mutex_lock(&ftraced_lock); | ||
| 1558 | task = ftraced_task; | ||
| 1559 | ftraced_task = NULL; | ||
| 1560 | ftraced_suspend = -1; | ||
| 1561 | ftrace_run_update_code(command); | ||
| 1562 | mutex_unlock(&ftraced_lock); | ||
| 1563 | |||
| 1564 | if (task) | ||
| 1565 | kthread_stop(task); | ||
| 1566 | } | ||
| 1567 | |||
| 1568 | static __init int ftrace_init_debugfs(void) | 1552 | static __init int ftrace_init_debugfs(void) |
| 1569 | { | 1553 | { |
| 1570 | struct dentry *d_tracer; | 1554 | struct dentry *d_tracer; |
| @@ -1795,17 +1779,16 @@ core_initcall(ftrace_dynamic_init); | |||
| 1795 | # define ftrace_shutdown() do { } while (0) | 1779 | # define ftrace_shutdown() do { } while (0) |
| 1796 | # define ftrace_startup_sysctl() do { } while (0) | 1780 | # define ftrace_startup_sysctl() do { } while (0) |
| 1797 | # define ftrace_shutdown_sysctl() do { } while (0) | 1781 | # define ftrace_shutdown_sysctl() do { } while (0) |
| 1798 | # define ftrace_force_shutdown() do { } while (0) | ||
| 1799 | #endif /* CONFIG_DYNAMIC_FTRACE */ | 1782 | #endif /* CONFIG_DYNAMIC_FTRACE */ |
| 1800 | 1783 | ||
| 1801 | /** | 1784 | /** |
| 1802 | * ftrace_kill_atomic - kill ftrace from critical sections | 1785 | * ftrace_kill - kill ftrace |
| 1803 | * | 1786 | * |
| 1804 | * This function should be used by panic code. It stops ftrace | 1787 | * This function should be used by panic code. It stops ftrace |
| 1805 | * but in a not so nice way. If you need to simply kill ftrace | 1788 | * but in a not so nice way. If you need to simply kill ftrace |
| 1806 | * from a non-atomic section, use ftrace_kill. | 1789 | * from a non-atomic section, use ftrace_kill. |
| 1807 | */ | 1790 | */ |
| 1808 | void ftrace_kill_atomic(void) | 1791 | void ftrace_kill(void) |
| 1809 | { | 1792 | { |
| 1810 | ftrace_disabled = 1; | 1793 | ftrace_disabled = 1; |
| 1811 | ftrace_enabled = 0; | 1794 | ftrace_enabled = 0; |
| @@ -1816,27 +1799,6 @@ void ftrace_kill_atomic(void) | |||
| 1816 | } | 1799 | } |
| 1817 | 1800 | ||
| 1818 | /** | 1801 | /** |
| 1819 | * ftrace_kill - totally shutdown ftrace | ||
| 1820 | * | ||
| 1821 | * This is a safety measure. If something was detected that seems | ||
| 1822 | * wrong, calling this function will keep ftrace from doing | ||
| 1823 | * any more modifications, and updates. | ||
| 1824 | * used when something went wrong. | ||
| 1825 | */ | ||
| 1826 | void ftrace_kill(void) | ||
| 1827 | { | ||
| 1828 | mutex_lock(&ftrace_sysctl_lock); | ||
| 1829 | ftrace_disabled = 1; | ||
| 1830 | ftrace_enabled = 0; | ||
| 1831 | |||
| 1832 | clear_ftrace_function(); | ||
| 1833 | mutex_unlock(&ftrace_sysctl_lock); | ||
| 1834 | |||
| 1835 | /* Try to totally disable ftrace */ | ||
| 1836 | ftrace_force_shutdown(); | ||
| 1837 | } | ||
| 1838 | |||
| 1839 | /** | ||
| 1840 | * register_ftrace_function - register a function for profiling | 1802 | * register_ftrace_function - register a function for profiling |
| 1841 | * @ops - ops structure that holds the function for profiling. | 1803 | * @ops - ops structure that holds the function for profiling. |
| 1842 | * | 1804 | * |
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index aeb2f2505bc5..333a5162149b 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c | |||
| @@ -3097,7 +3097,7 @@ void ftrace_dump(void) | |||
| 3097 | dump_ran = 1; | 3097 | dump_ran = 1; |
| 3098 | 3098 | ||
| 3099 | /* No turning back! */ | 3099 | /* No turning back! */ |
| 3100 | ftrace_kill_atomic(); | 3100 | ftrace_kill(); |
| 3101 | 3101 | ||
| 3102 | for_each_tracing_cpu(cpu) { | 3102 | for_each_tracing_cpu(cpu) { |
| 3103 | atomic_inc(&global_trace.data[cpu]->disabled); | 3103 | atomic_inc(&global_trace.data[cpu]->disabled); |
