| From: "Steven Rostedt (VMware)" <rostedt@goodmis.org> |
| Date: Wed, 9 May 2018 14:36:09 -0400 |
| Subject: tracing/x86/xen: Remove zero data size trace events |
| trace_xen_mmu_flush_tlb{_all} |
| |
| commit 45dd9b0666a162f8e4be76096716670cf1741f0e upstream. |
| |
| Doing an audit of trace events, I discovered two trace events in the xen |
| subsystem that use a hack to create zero data size trace events. This is not |
| what trace events are for. Trace events add memory footprint overhead, and |
| if all you need to do is see if a function is hit or not, simply make that |
| function noinline and use function tracer filtering. |
| |
| Worse yet, the hack used was: |
| |
| __array(char, x, 0) |
| |
| Which creates a static string of zero in length. There's assumptions about |
| such constructs in ftrace that this is a dynamic string that is nul |
| terminated. This is not the case with these tracepoints and can cause |
| problems in various parts of ftrace. |
| |
| Nuke the trace events! |
| |
| Link: http://lkml.kernel.org/r/20180509144605.5a220327@gandalf.local.home |
| |
| Fixes: 95a7d76897c1e ("xen/mmu: Use Xen specific TLB flush instead of the generic one.") |
| Reviewed-by: Juergen Gross <jgross@suse.com> |
| Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> |
| [bwh: Backported to 3.16: adjust filename, context] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| --- a/arch/x86/xen/mmu.c |
| +++ b/arch/x86/xen/mmu.c |
| @@ -1283,8 +1283,6 @@ void xen_flush_tlb_all(void) |
| struct mmuext_op *op; |
| struct multicall_space mcs; |
| |
| - trace_xen_mmu_flush_tlb_all(0); |
| - |
| preempt_disable(); |
| |
| mcs = xen_mc_entry(sizeof(*op)); |
| @@ -1297,13 +1295,11 @@ void xen_flush_tlb_all(void) |
| |
| preempt_enable(); |
| } |
| -static void xen_flush_tlb(void) |
| +static noinline void xen_flush_tlb(void) |
| { |
| struct mmuext_op *op; |
| struct multicall_space mcs; |
| |
| - trace_xen_mmu_flush_tlb(0); |
| - |
| preempt_disable(); |
| |
| mcs = xen_mc_entry(sizeof(*op)); |
| --- a/include/trace/events/xen.h |
| +++ b/include/trace/events/xen.h |
| @@ -377,22 +377,6 @@ DECLARE_EVENT_CLASS(xen_mmu_pgd, |
| DEFINE_XEN_MMU_PGD_EVENT(xen_mmu_pgd_pin); |
| DEFINE_XEN_MMU_PGD_EVENT(xen_mmu_pgd_unpin); |
| |
| -TRACE_EVENT(xen_mmu_flush_tlb_all, |
| - TP_PROTO(int x), |
| - TP_ARGS(x), |
| - TP_STRUCT__entry(__array(char, x, 0)), |
| - TP_fast_assign((void)x), |
| - TP_printk("%s", "") |
| - ); |
| - |
| -TRACE_EVENT(xen_mmu_flush_tlb, |
| - TP_PROTO(int x), |
| - TP_ARGS(x), |
| - TP_STRUCT__entry(__array(char, x, 0)), |
| - TP_fast_assign((void)x), |
| - TP_printk("%s", "") |
| - ); |
| - |
| TRACE_EVENT(xen_mmu_flush_tlb_single, |
| TP_PROTO(unsigned long addr), |
| TP_ARGS(addr), |