Merge tag 'trace-v4.15' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace
Pull tracing updates from - allow module init functions to be traced - clean up some unused or not used by config events (saves space) - clean up of trace histogram code - add support for preempt and interrupt enabled/disable events - other various clean ups * tag 'trace-v4.15' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: (30 commits) tracing, thermal: Hide cpu cooling trace events when not in use tracing, thermal: Hide devfreq trace events when not in use ftrace: Kill FTRACE_OPS_FL_PER_CPU perf/ftrace: Small cleanup perf/ftrace: Fix function trace events perf/ftrace: Revert ("perf/ftrace: Fix double traces of perf on ftrace:function") tracing, dma-buf: Remove unused trace event dma_fence_annotate_wait_on tracing, memcg, vmscan: Hide trace events when not in use tracing/xen: Hide events that are not used when X86_PAE is not defined tracing: mark trace_test_buffer as __maybe_unused printk: Remove superfluous memory barriers from printk_safe ftrace: Clear hashes of stale ips of init memory tracing: Add support for preempt and irq enable/disable events tracing: Prepare to add preempt and irq trace events ftrace/kallsyms: Have /proc/kallsyms show saved mod init functions ftrace: Add freeing algorithm to free ftrace_mod_maps ftrace: Save module init functions kallsyms symbols for tracing ftrace: Allow module init functions to be traced ftrace: Add a ftrace_free_mem() function for modules to use tracing: Reimplement log2 ...
This commit is contained in:
@@ -9,46 +9,6 @@
|
||||
|
||||
struct dma_fence;
|
||||
|
||||
TRACE_EVENT(dma_fence_annotate_wait_on,
|
||||
|
||||
/* fence: the fence waiting on f1, f1: the fence to be waited on. */
|
||||
TP_PROTO(struct dma_fence *fence, struct dma_fence *f1),
|
||||
|
||||
TP_ARGS(fence, f1),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__string(driver, fence->ops->get_driver_name(fence))
|
||||
__string(timeline, fence->ops->get_timeline_name(fence))
|
||||
__field(unsigned int, context)
|
||||
__field(unsigned int, seqno)
|
||||
|
||||
__string(waiting_driver, f1->ops->get_driver_name(f1))
|
||||
__string(waiting_timeline, f1->ops->get_timeline_name(f1))
|
||||
__field(unsigned int, waiting_context)
|
||||
__field(unsigned int, waiting_seqno)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__assign_str(driver, fence->ops->get_driver_name(fence))
|
||||
__assign_str(timeline, fence->ops->get_timeline_name(fence))
|
||||
__entry->context = fence->context;
|
||||
__entry->seqno = fence->seqno;
|
||||
|
||||
__assign_str(waiting_driver, f1->ops->get_driver_name(f1))
|
||||
__assign_str(waiting_timeline, f1->ops->get_timeline_name(f1))
|
||||
__entry->waiting_context = f1->context;
|
||||
__entry->waiting_seqno = f1->seqno;
|
||||
|
||||
),
|
||||
|
||||
TP_printk("driver=%s timeline=%s context=%u seqno=%u " \
|
||||
"waits on driver=%s timeline=%s context=%u seqno=%u",
|
||||
__get_str(driver), __get_str(timeline), __entry->context,
|
||||
__entry->seqno,
|
||||
__get_str(waiting_driver), __get_str(waiting_timeline),
|
||||
__entry->waiting_context, __entry->waiting_seqno)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(dma_fence,
|
||||
|
||||
TP_PROTO(struct dma_fence *fence),
|
||||
|
70
include/trace/events/preemptirq.h
Normal file
70
include/trace/events/preemptirq.h
Normal file
@@ -0,0 +1,70 @@
|
||||
#ifdef CONFIG_PREEMPTIRQ_EVENTS
|
||||
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM preemptirq
|
||||
|
||||
#if !defined(_TRACE_PREEMPTIRQ_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_PREEMPTIRQ_H
|
||||
|
||||
#include <linux/ktime.h>
|
||||
#include <linux/tracepoint.h>
|
||||
#include <linux/string.h>
|
||||
#include <asm/sections.h>
|
||||
|
||||
DECLARE_EVENT_CLASS(preemptirq_template,
|
||||
|
||||
TP_PROTO(unsigned long ip, unsigned long parent_ip),
|
||||
|
||||
TP_ARGS(ip, parent_ip),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(u32, caller_offs)
|
||||
__field(u32, parent_offs)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->caller_offs = (u32)(ip - (unsigned long)_stext);
|
||||
__entry->parent_offs = (u32)(parent_ip - (unsigned long)_stext);
|
||||
),
|
||||
|
||||
TP_printk("caller=%pF parent=%pF",
|
||||
(void *)((unsigned long)(_stext) + __entry->caller_offs),
|
||||
(void *)((unsigned long)(_stext) + __entry->parent_offs))
|
||||
);
|
||||
|
||||
#ifndef CONFIG_PROVE_LOCKING
|
||||
DEFINE_EVENT(preemptirq_template, irq_disable,
|
||||
TP_PROTO(unsigned long ip, unsigned long parent_ip),
|
||||
TP_ARGS(ip, parent_ip));
|
||||
|
||||
DEFINE_EVENT(preemptirq_template, irq_enable,
|
||||
TP_PROTO(unsigned long ip, unsigned long parent_ip),
|
||||
TP_ARGS(ip, parent_ip));
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DEBUG_PREEMPT
|
||||
DEFINE_EVENT(preemptirq_template, preempt_disable,
|
||||
TP_PROTO(unsigned long ip, unsigned long parent_ip),
|
||||
TP_ARGS(ip, parent_ip));
|
||||
|
||||
DEFINE_EVENT(preemptirq_template, preempt_enable,
|
||||
TP_PROTO(unsigned long ip, unsigned long parent_ip),
|
||||
TP_ARGS(ip, parent_ip));
|
||||
#endif
|
||||
|
||||
#endif /* _TRACE_PREEMPTIRQ_H */
|
||||
|
||||
#include <trace/define_trace.h>
|
||||
|
||||
#else /* !CONFIG_PREEMPTIRQ_EVENTS */
|
||||
|
||||
#define trace_irq_enable(...)
|
||||
#define trace_irq_disable(...)
|
||||
#define trace_preempt_enable(...)
|
||||
#define trace_preempt_disable(...)
|
||||
#define trace_irq_enable_rcuidle(...)
|
||||
#define trace_irq_disable_rcuidle(...)
|
||||
#define trace_preempt_enable_rcuidle(...)
|
||||
#define trace_preempt_disable_rcuidle(...)
|
||||
|
||||
#endif
|
@@ -91,6 +91,7 @@ TRACE_EVENT(thermal_zone_trip,
|
||||
show_tzt_type(__entry->trip_type))
|
||||
);
|
||||
|
||||
#ifdef CONFIG_CPU_THERMAL
|
||||
TRACE_EVENT(thermal_power_cpu_get_power,
|
||||
TP_PROTO(const struct cpumask *cpus, unsigned long freq, u32 *load,
|
||||
size_t load_len, u32 dynamic_power, u32 static_power),
|
||||
@@ -148,7 +149,9 @@ TRACE_EVENT(thermal_power_cpu_limit,
|
||||
__get_bitmask(cpumask), __entry->freq, __entry->cdev_state,
|
||||
__entry->power)
|
||||
);
|
||||
#endif /* CONFIG_CPU_THERMAL */
|
||||
|
||||
#ifdef CONFIG_DEVFREQ_THERMAL
|
||||
TRACE_EVENT(thermal_power_devfreq_get_power,
|
||||
TP_PROTO(struct thermal_cooling_device *cdev,
|
||||
struct devfreq_dev_status *status, unsigned long freq,
|
||||
@@ -204,6 +207,7 @@ TRACE_EVENT(thermal_power_devfreq_limit,
|
||||
__get_str(type), __entry->freq, __entry->cdev_state,
|
||||
__entry->power)
|
||||
);
|
||||
#endif /* CONFIG_DEVFREQ_THERMAL */
|
||||
#endif /* _TRACE_THERMAL_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
@@ -134,6 +134,7 @@ DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_direct_reclaim_b
|
||||
TP_ARGS(order, may_writepage, gfp_flags, classzone_idx)
|
||||
);
|
||||
|
||||
#ifdef CONFIG_MEMCG
|
||||
DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_reclaim_begin,
|
||||
|
||||
TP_PROTO(int order, int may_writepage, gfp_t gfp_flags, int classzone_idx),
|
||||
@@ -147,6 +148,7 @@ DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_softlimit_
|
||||
|
||||
TP_ARGS(order, may_writepage, gfp_flags, classzone_idx)
|
||||
);
|
||||
#endif /* CONFIG_MEMCG */
|
||||
|
||||
DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_end_template,
|
||||
|
||||
@@ -172,6 +174,7 @@ DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_direct_reclaim_end
|
||||
TP_ARGS(nr_reclaimed)
|
||||
);
|
||||
|
||||
#ifdef CONFIG_MEMCG
|
||||
DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_reclaim_end,
|
||||
|
||||
TP_PROTO(unsigned long nr_reclaimed),
|
||||
@@ -185,6 +188,7 @@ DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, mm_vmscan_memcg_softlimit_re
|
||||
|
||||
TP_ARGS(nr_reclaimed)
|
||||
);
|
||||
#endif /* CONFIG_MEMCG */
|
||||
|
||||
TRACE_EVENT(mm_shrink_slab_start,
|
||||
TP_PROTO(struct shrinker *shr, struct shrink_control *sc,
|
||||
|
@@ -148,7 +148,6 @@ DECLARE_EVENT_CLASS(xen_mmu__set_pte,
|
||||
TP_ARGS(ptep, pteval))
|
||||
|
||||
DEFINE_XEN_MMU_SET_PTE(xen_mmu_set_pte);
|
||||
DEFINE_XEN_MMU_SET_PTE(xen_mmu_set_pte_atomic);
|
||||
|
||||
TRACE_EVENT(xen_mmu_set_pte_at,
|
||||
TP_PROTO(struct mm_struct *mm, unsigned long addr,
|
||||
@@ -170,21 +169,6 @@ TRACE_EVENT(xen_mmu_set_pte_at,
|
||||
(int)sizeof(pteval_t) * 2, (unsigned long long)__entry->pteval)
|
||||
);
|
||||
|
||||
TRACE_EVENT(xen_mmu_pte_clear,
|
||||
TP_PROTO(struct mm_struct *mm, unsigned long addr, pte_t *ptep),
|
||||
TP_ARGS(mm, addr, ptep),
|
||||
TP_STRUCT__entry(
|
||||
__field(struct mm_struct *, mm)
|
||||
__field(unsigned long, addr)
|
||||
__field(pte_t *, ptep)
|
||||
),
|
||||
TP_fast_assign(__entry->mm = mm;
|
||||
__entry->addr = addr;
|
||||
__entry->ptep = ptep),
|
||||
TP_printk("mm %p addr %lx ptep %p",
|
||||
__entry->mm, __entry->addr, __entry->ptep)
|
||||
);
|
||||
|
||||
TRACE_DEFINE_SIZEOF(pmdval_t);
|
||||
|
||||
TRACE_EVENT(xen_mmu_set_pmd,
|
||||
@@ -202,6 +186,24 @@ TRACE_EVENT(xen_mmu_set_pmd,
|
||||
(int)sizeof(pmdval_t) * 2, (unsigned long long)__entry->pmdval)
|
||||
);
|
||||
|
||||
#ifdef CONFIG_X86_PAE
|
||||
DEFINE_XEN_MMU_SET_PTE(xen_mmu_set_pte_atomic);
|
||||
|
||||
TRACE_EVENT(xen_mmu_pte_clear,
|
||||
TP_PROTO(struct mm_struct *mm, unsigned long addr, pte_t *ptep),
|
||||
TP_ARGS(mm, addr, ptep),
|
||||
TP_STRUCT__entry(
|
||||
__field(struct mm_struct *, mm)
|
||||
__field(unsigned long, addr)
|
||||
__field(pte_t *, ptep)
|
||||
),
|
||||
TP_fast_assign(__entry->mm = mm;
|
||||
__entry->addr = addr;
|
||||
__entry->ptep = ptep),
|
||||
TP_printk("mm %p addr %lx ptep %p",
|
||||
__entry->mm, __entry->addr, __entry->ptep)
|
||||
);
|
||||
|
||||
TRACE_EVENT(xen_mmu_pmd_clear,
|
||||
TP_PROTO(pmd_t *pmdp),
|
||||
TP_ARGS(pmdp),
|
||||
@@ -211,6 +213,7 @@ TRACE_EVENT(xen_mmu_pmd_clear,
|
||||
TP_fast_assign(__entry->pmdp = pmdp),
|
||||
TP_printk("pmdp %p", __entry->pmdp)
|
||||
);
|
||||
#endif
|
||||
|
||||
#if CONFIG_PGTABLE_LEVELS >= 4
|
||||
|
||||
|
Reference in New Issue
Block a user