Following tracing fixes:
- Add workqueue forward declaration (for new work, but a nice clean up) - seftest fixes for the new histogram code - Print output fix for hwlat tracer - Fix missing system call events - due to change in x86 syscall naming - Fix kprobe address being used by perf being hashed -----BEGIN PGP SIGNATURE----- iIoEABYIADIWIQRRSw7ePDh/lE+zeZMp5XQQmuv6qgUCWuIMShQccm9zdGVkdEBn b29kbWlzLm9yZwAKCRAp5XQQmuv6qkrdAQDRrgIGcm4pRGrvPiGhp4FeQKUx3woM LY10qMYo3St7zwEAn5oor/e/7KQaQSdKQ7QkL690QU2bTO6FXz4VwE1OcgM= =OHJk -----END PGP SIGNATURE----- Merge tag 'trace-v4.17-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace Pull tracing fixes from Steven Rostedt: - Add workqueue forward declaration (for new work, but a nice clean up) - seftest fixes for the new histogram code - Print output fix for hwlat tracer - Fix missing system call events - due to change in x86 syscall naming - Fix kprobe address being used by perf being hashed * tag 'trace-v4.17-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: tracing: Fix missing tab for hwlat_detector print format selftests: ftrace: Add a testcase for multiple actions on trigger selftests: ftrace: Fix trigger extended error testcase kprobes: Fix random address output of blacklist file tracing: Fix kernel crash while using empty filter with perf tracing/x86: Update syscall trace events to handle new prefixed syscall func names tracing: Add missing forward declaration
This commit is contained in:
commit
47b5ece937
|
@ -46,7 +46,21 @@ int ftrace_int3_handler(struct pt_regs *regs);
|
||||||
#endif /* CONFIG_FUNCTION_TRACER */
|
#endif /* CONFIG_FUNCTION_TRACER */
|
||||||
|
|
||||||
|
|
||||||
#if !defined(__ASSEMBLY__) && !defined(COMPILE_OFFSETS)
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
|
#define ARCH_HAS_SYSCALL_MATCH_SYM_NAME
|
||||||
|
static inline bool arch_syscall_match_sym_name(const char *sym, const char *name)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Compare the symbol name with the system call name. Skip the
|
||||||
|
* "__x64_sys", "__ia32_sys" or simple "sys" prefix.
|
||||||
|
*/
|
||||||
|
return !strcmp(sym + 3, name + 3) ||
|
||||||
|
(!strncmp(sym, "__x64_", 6) && !strcmp(sym + 9, name + 3)) ||
|
||||||
|
(!strncmp(sym, "__ia32_", 7) && !strcmp(sym + 10, name + 3));
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef COMPILE_OFFSETS
|
||||||
|
|
||||||
#if defined(CONFIG_FTRACE_SYSCALLS) && defined(CONFIG_IA32_EMULATION)
|
#if defined(CONFIG_FTRACE_SYSCALLS) && defined(CONFIG_IA32_EMULATION)
|
||||||
#include <asm/compat.h>
|
#include <asm/compat.h>
|
||||||
|
@ -67,6 +81,7 @@ static inline bool arch_trace_is_compat_syscall(struct pt_regs *regs)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_FTRACE_SYSCALLS && CONFIG_IA32_EMULATION */
|
#endif /* CONFIG_FTRACE_SYSCALLS && CONFIG_IA32_EMULATION */
|
||||||
#endif /* !__ASSEMBLY__ && !COMPILE_OFFSETS */
|
#endif /* !COMPILE_OFFSETS */
|
||||||
|
#endif /* !__ASSEMBLY__ */
|
||||||
|
|
||||||
#endif /* _ASM_X86_FTRACE_H */
|
#endif /* _ASM_X86_FTRACE_H */
|
||||||
|
|
|
@ -25,6 +25,8 @@ DECLARE_EVENT_CLASS(workqueue_work,
|
||||||
TP_printk("work struct %p", __entry->work)
|
TP_printk("work struct %p", __entry->work)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
struct pool_workqueue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* workqueue_queue_work - called when a work gets queued
|
* workqueue_queue_work - called when a work gets queued
|
||||||
* @req_cpu: the requested cpu
|
* @req_cpu: the requested cpu
|
||||||
|
|
|
@ -2428,7 +2428,7 @@ static int kprobe_blacklist_seq_show(struct seq_file *m, void *v)
|
||||||
struct kprobe_blacklist_entry *ent =
|
struct kprobe_blacklist_entry *ent =
|
||||||
list_entry(v, struct kprobe_blacklist_entry, list);
|
list_entry(v, struct kprobe_blacklist_entry, list);
|
||||||
|
|
||||||
seq_printf(m, "0x%p-0x%p\t%ps\n", (void *)ent->start_addr,
|
seq_printf(m, "0x%px-0x%px\t%ps\n", (void *)ent->start_addr,
|
||||||
(void *)ent->end_addr, (void *)ent->start_addr);
|
(void *)ent->end_addr, (void *)ent->start_addr);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -356,7 +356,7 @@ FTRACE_ENTRY(hwlat, hwlat_entry,
|
||||||
__field( unsigned int, seqnum )
|
__field( unsigned int, seqnum )
|
||||||
),
|
),
|
||||||
|
|
||||||
F_printk("cnt:%u\tts:%010llu.%010lu\tinner:%llu\touter:%llunmi-ts:%llu\tnmi-count:%u\n",
|
F_printk("cnt:%u\tts:%010llu.%010lu\tinner:%llu\touter:%llu\tnmi-ts:%llu\tnmi-count:%u\n",
|
||||||
__entry->seqnum,
|
__entry->seqnum,
|
||||||
__entry->tv_sec,
|
__entry->tv_sec,
|
||||||
__entry->tv_nsec,
|
__entry->tv_nsec,
|
||||||
|
|
|
@ -1499,14 +1499,14 @@ static int process_preds(struct trace_event_call *call,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!nr_preds) {
|
if (!nr_preds)
|
||||||
prog = NULL;
|
return -EINVAL;
|
||||||
} else {
|
|
||||||
prog = predicate_parse(filter_string, nr_parens, nr_preds,
|
prog = predicate_parse(filter_string, nr_parens, nr_preds,
|
||||||
parse_pred, call, pe);
|
parse_pred, call, pe);
|
||||||
if (IS_ERR(prog))
|
if (IS_ERR(prog))
|
||||||
return PTR_ERR(prog);
|
return PTR_ERR(prog);
|
||||||
}
|
|
||||||
rcu_assign_pointer(filter->prog, prog);
|
rcu_assign_pointer(filter->prog, prog);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ do_reset
|
||||||
|
|
||||||
echo "Test extended error support"
|
echo "Test extended error support"
|
||||||
echo 'hist:keys=pid:ts0=common_timestamp.usecs if comm=="ping"' > events/sched/sched_wakeup/trigger
|
echo 'hist:keys=pid:ts0=common_timestamp.usecs if comm=="ping"' > events/sched/sched_wakeup/trigger
|
||||||
echo 'hist:keys=pid:ts0=common_timestamp.usecs if comm=="ping"' >> events/sched/sched_wakeup/trigger &>/dev/null
|
! echo 'hist:keys=pid:ts0=common_timestamp.usecs if comm=="ping"' >> events/sched/sched_wakeup/trigger 2> /dev/null
|
||||||
if ! grep -q "ERROR:" events/sched/sched_wakeup/hist; then
|
if ! grep -q "ERROR:" events/sched/sched_wakeup/hist; then
|
||||||
fail "Failed to generate extended error in histogram"
|
fail "Failed to generate extended error in histogram"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# description: event trigger - test multiple actions on hist trigger
|
||||||
|
|
||||||
|
|
||||||
|
do_reset() {
|
||||||
|
reset_trigger
|
||||||
|
echo > set_event
|
||||||
|
clear_trace
|
||||||
|
}
|
||||||
|
|
||||||
|
fail() { #msg
|
||||||
|
do_reset
|
||||||
|
echo $1
|
||||||
|
exit_fail
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ ! -f set_event ]; then
|
||||||
|
echo "event tracing is not supported"
|
||||||
|
exit_unsupported
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f synthetic_events ]; then
|
||||||
|
echo "synthetic event is not supported"
|
||||||
|
exit_unsupported
|
||||||
|
fi
|
||||||
|
|
||||||
|
clear_synthetic_events
|
||||||
|
reset_tracer
|
||||||
|
do_reset
|
||||||
|
|
||||||
|
echo "Test multiple actions on hist trigger"
|
||||||
|
echo 'wakeup_latency u64 lat; pid_t pid' >> synthetic_events
|
||||||
|
TRIGGER1=events/sched/sched_wakeup/trigger
|
||||||
|
TRIGGER2=events/sched/sched_switch/trigger
|
||||||
|
|
||||||
|
echo 'hist:keys=pid:ts0=common_timestamp.usecs if comm=="cyclictest"' > $TRIGGER1
|
||||||
|
echo 'hist:keys=next_pid:wakeup_lat=common_timestamp.usecs-$ts0 if next_comm=="cyclictest"' >> $TRIGGER2
|
||||||
|
echo 'hist:keys=next_pid:onmatch(sched.sched_wakeup).wakeup_latency(sched.sched_switch.$wakeup_lat,next_pid) if next_comm=="cyclictest"' >> $TRIGGER2
|
||||||
|
echo 'hist:keys=next_pid:onmatch(sched.sched_wakeup).wakeup_latency(sched.sched_switch.$wakeup_lat,prev_pid) if next_comm=="cyclictest"' >> $TRIGGER2
|
||||||
|
echo 'hist:keys=next_pid if next_comm=="cyclictest"' >> $TRIGGER2
|
||||||
|
|
||||||
|
do_reset
|
||||||
|
|
||||||
|
exit 0
|
Loading…
Reference in New Issue