diff options
| author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-12-09 01:14:38 -0500 |
|---|---|---|
| committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-12-09 01:14:38 -0500 |
| commit | bcd6acd51f3d4d1ada201e9bc5c40a31d6d80c71 (patch) | |
| tree | 2f6dffd2d3e4dd67355a224de7e7a960335a92fd /kernel/trace/trace_selftest.c | |
| parent | 11c34c7deaeeebcee342cbc35e1bb2a6711b2431 (diff) | |
| parent | 3ff6a468b45b5dfeb0e903e56f4eb27d34b2437c (diff) | |
Merge commit 'origin/master' into next
Conflicts:
include/linux/kvm.h
Diffstat (limited to 'kernel/trace/trace_selftest.c')
| -rw-r--r-- | kernel/trace/trace_selftest.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/kernel/trace/trace_selftest.c b/kernel/trace/trace_selftest.c index d2cdbabb4ead..dc98309e839a 100644 --- a/kernel/trace/trace_selftest.c +++ b/kernel/trace/trace_selftest.c | |||
| @@ -17,6 +17,7 @@ static inline int trace_valid_entry(struct trace_entry *entry) | |||
| 17 | case TRACE_GRAPH_ENT: | 17 | case TRACE_GRAPH_ENT: |
| 18 | case TRACE_GRAPH_RET: | 18 | case TRACE_GRAPH_RET: |
| 19 | case TRACE_HW_BRANCHES: | 19 | case TRACE_HW_BRANCHES: |
| 20 | case TRACE_KSYM: | ||
| 20 | return 1; | 21 | return 1; |
| 21 | } | 22 | } |
| 22 | return 0; | 23 | return 0; |
| @@ -808,3 +809,57 @@ trace_selftest_startup_hw_branches(struct tracer *trace, | |||
| 808 | return ret; | 809 | return ret; |
| 809 | } | 810 | } |
| 810 | #endif /* CONFIG_HW_BRANCH_TRACER */ | 811 | #endif /* CONFIG_HW_BRANCH_TRACER */ |
| 812 | |||
| 813 | #ifdef CONFIG_KSYM_TRACER | ||
| 814 | static int ksym_selftest_dummy; | ||
| 815 | |||
| 816 | int | ||
| 817 | trace_selftest_startup_ksym(struct tracer *trace, struct trace_array *tr) | ||
| 818 | { | ||
| 819 | unsigned long count; | ||
| 820 | int ret; | ||
| 821 | |||
| 822 | /* start the tracing */ | ||
| 823 | ret = tracer_init(trace, tr); | ||
| 824 | if (ret) { | ||
| 825 | warn_failed_init_tracer(trace, ret); | ||
| 826 | return ret; | ||
| 827 | } | ||
| 828 | |||
| 829 | ksym_selftest_dummy = 0; | ||
| 830 | /* Register the read-write tracing request */ | ||
| 831 | |||
| 832 | ret = process_new_ksym_entry("ksym_selftest_dummy", | ||
| 833 | HW_BREAKPOINT_R | HW_BREAKPOINT_W, | ||
| 834 | (unsigned long)(&ksym_selftest_dummy)); | ||
| 835 | |||
| 836 | if (ret < 0) { | ||
| 837 | printk(KERN_CONT "ksym_trace read-write startup test failed\n"); | ||
| 838 | goto ret_path; | ||
| 839 | } | ||
| 840 | /* Perform a read and a write operation over the dummy variable to | ||
| 841 | * trigger the tracer | ||
| 842 | */ | ||
| 843 | if (ksym_selftest_dummy == 0) | ||
| 844 | ksym_selftest_dummy++; | ||
| 845 | |||
| 846 | /* stop the tracing. */ | ||
| 847 | tracing_stop(); | ||
| 848 | /* check the trace buffer */ | ||
| 849 | ret = trace_test_buffer(tr, &count); | ||
| 850 | trace->reset(tr); | ||
| 851 | tracing_start(); | ||
| 852 | |||
| 853 | /* read & write operations - one each is performed on the dummy variable | ||
| 854 | * triggering two entries in the trace buffer | ||
| 855 | */ | ||
| 856 | if (!ret && count != 2) { | ||
| 857 | printk(KERN_CONT "Ksym tracer startup test failed"); | ||
| 858 | ret = -1; | ||
| 859 | } | ||
| 860 | |||
| 861 | ret_path: | ||
| 862 | return ret; | ||
| 863 | } | ||
| 864 | #endif /* CONFIG_KSYM_TRACER */ | ||
| 865 | |||
