mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-26 08:31:13 +00:00
Nothing major this round. Mostly small clean ups and fixes.
Some visible changes: A new flag was added to distinguish traces done in NMI context. Preempt tracer now shows functions where preemption is disabled but interrupts are still enabled. Other notes: Updates were done to function tracing to allow better performance with perf. Infrastructure code has been added to allow for a new histogram feature for recording live trace event histograms that can be configured by simple user commands. The feature itself was just finished, but needs a round in linux-next before being pulled. This only includes some infrastructure changes that will be needed. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJW8/WPAAoJEKKk/i67LK/8wrAH/j2gU9ZfjVxTu8068TBGWRJP yvvzq0cK5evB3dsVuUmKKRfU52nSv4J1WcFF569X0RulSLylR0dHlcxFJMn4kkgR bm0AHRrqOf87ub3VimcpG146iVQij37l5A0SRoFbvSPLQx1KUW18v99x41Ji8dv6 oWXRc6/YhdzEE7l0nUsVjmScQ4b2emsems3cxZzXOY+nRJsiim6i+VaDeatdyey1 csLVqtRCs+x62TVtxG3+GhcLdRoPRbnHAGzrKDFIn1SrQaRXCc54wN5d2hWxjgNI 1laOwaj070lnJiWfBLIP/K+lx+VKRx5/O0rKZX35foLUTqJJKSyjAbKXuMCcSAM= =2h2K -----END PGP SIGNATURE----- Merge tag 'trace-v4.6' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace Pull tracing updates from Steven Rostedt: "Nothing major this round. Mostly small clean ups and fixes. Some visible changes: - A new flag was added to distinguish traces done in NMI context. - Preempt tracer now shows functions where preemption is disabled but interrupts are still enabled. Other notes: - Updates were done to function tracing to allow better performance with perf. - Infrastructure code has been added to allow for a new histogram feature for recording live trace event histograms that can be configured by simple user commands. The feature itself was just finished, but needs a round in linux-next before being pulled. This only includes some infrastructure changes that will be needed" * tag 'trace-v4.6' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: (22 commits) tracing: Record and show NMI state tracing: Fix trace_printk() to print when not using bprintk() tracing: Remove redundant reset per-CPU buff in irqsoff tracer x86: ftrace: Fix the misleading comment for arch/x86/kernel/ftrace.c tracing: Fix crash from reading trace_pipe with sendfile tracing: Have preempt(irqs)off trace preempt disabled functions tracing: Fix return while holding a lock in register_tracer() ftrace: Use kasprintf() in ftrace_profile_tracefs() ftrace: Update dynamic ftrace calls only if necessary ftrace: Make ftrace_hash_rec_enable return update bool tracing: Fix typoes in code comment and printk in trace_nop.c tracing, writeback: Replace cgroup path to cgroup ino tracing: Use flags instead of bool in trigger structure tracing: Add an unreg_all() callback to trigger commands tracing: Add needs_rec flag to event triggers tracing: Add a per-event-trigger 'paused' field tracing: Add get_syscall_name() tracing: Add event record param to trigger_ops.func() tracing: Make event trigger functions available tracing: Make ftrace_event_field checking functions available ...
This commit is contained in:
commit
e46b4e2b46
17 changed files with 280 additions and 235 deletions
|
@ -1030,8 +1030,7 @@ static __init void ftrace_profile_tracefs(struct dentry *d_tracer)
|
|||
for_each_possible_cpu(cpu) {
|
||||
stat = &per_cpu(ftrace_profile_stats, cpu);
|
||||
|
||||
/* allocate enough for function name + cpu number */
|
||||
name = kmalloc(32, GFP_KERNEL);
|
||||
name = kasprintf(GFP_KERNEL, "function%d", cpu);
|
||||
if (!name) {
|
||||
/*
|
||||
* The files created are permanent, if something happens
|
||||
|
@ -1043,7 +1042,6 @@ static __init void ftrace_profile_tracefs(struct dentry *d_tracer)
|
|||
return;
|
||||
}
|
||||
stat->stat = function_stats;
|
||||
snprintf(name, 32, "function%d", cpu);
|
||||
stat->stat.name = name;
|
||||
ret = register_stat_tracer(&stat->stat);
|
||||
if (ret) {
|
||||
|
@ -1609,7 +1607,7 @@ static bool test_rec_ops_needs_regs(struct dyn_ftrace *rec)
|
|||
return keep_regs;
|
||||
}
|
||||
|
||||
static void __ftrace_hash_rec_update(struct ftrace_ops *ops,
|
||||
static bool __ftrace_hash_rec_update(struct ftrace_ops *ops,
|
||||
int filter_hash,
|
||||
bool inc)
|
||||
{
|
||||
|
@ -1617,12 +1615,13 @@ static void __ftrace_hash_rec_update(struct ftrace_ops *ops,
|
|||
struct ftrace_hash *other_hash;
|
||||
struct ftrace_page *pg;
|
||||
struct dyn_ftrace *rec;
|
||||
bool update = false;
|
||||
int count = 0;
|
||||
int all = 0;
|
||||
|
||||
/* Only update if the ops has been registered */
|
||||
if (!(ops->flags & FTRACE_OPS_FL_ENABLED))
|
||||
return;
|
||||
return false;
|
||||
|
||||
/*
|
||||
* In the filter_hash case:
|
||||
|
@ -1649,7 +1648,7 @@ static void __ftrace_hash_rec_update(struct ftrace_ops *ops,
|
|||
* then there's nothing to do.
|
||||
*/
|
||||
if (ftrace_hash_empty(hash))
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
do_for_each_ftrace_rec(pg, rec) {
|
||||
|
@ -1693,7 +1692,7 @@ static void __ftrace_hash_rec_update(struct ftrace_ops *ops,
|
|||
if (inc) {
|
||||
rec->flags++;
|
||||
if (FTRACE_WARN_ON(ftrace_rec_count(rec) == FTRACE_REF_MAX))
|
||||
return;
|
||||
return false;
|
||||
|
||||
/*
|
||||
* If there's only a single callback registered to a
|
||||
|
@ -1719,7 +1718,7 @@ static void __ftrace_hash_rec_update(struct ftrace_ops *ops,
|
|||
rec->flags |= FTRACE_FL_REGS;
|
||||
} else {
|
||||
if (FTRACE_WARN_ON(ftrace_rec_count(rec) == 0))
|
||||
return;
|
||||
return false;
|
||||
rec->flags--;
|
||||
|
||||
/*
|
||||
|
@ -1752,22 +1751,28 @@ static void __ftrace_hash_rec_update(struct ftrace_ops *ops,
|
|||
*/
|
||||
}
|
||||
count++;
|
||||
|
||||
/* Must match FTRACE_UPDATE_CALLS in ftrace_modify_all_code() */
|
||||
update |= ftrace_test_record(rec, 1) != FTRACE_UPDATE_IGNORE;
|
||||
|
||||
/* Shortcut, if we handled all records, we are done. */
|
||||
if (!all && count == hash->count)
|
||||
return;
|
||||
return update;
|
||||
} while_for_each_ftrace_rec();
|
||||
|
||||
return update;
|
||||
}
|
||||
|
||||
static void ftrace_hash_rec_disable(struct ftrace_ops *ops,
|
||||
static bool ftrace_hash_rec_disable(struct ftrace_ops *ops,
|
||||
int filter_hash)
|
||||
{
|
||||
__ftrace_hash_rec_update(ops, filter_hash, 0);
|
||||
return __ftrace_hash_rec_update(ops, filter_hash, 0);
|
||||
}
|
||||
|
||||
static void ftrace_hash_rec_enable(struct ftrace_ops *ops,
|
||||
static bool ftrace_hash_rec_enable(struct ftrace_ops *ops,
|
||||
int filter_hash)
|
||||
{
|
||||
__ftrace_hash_rec_update(ops, filter_hash, 1);
|
||||
return __ftrace_hash_rec_update(ops, filter_hash, 1);
|
||||
}
|
||||
|
||||
static void ftrace_hash_rec_update_modify(struct ftrace_ops *ops,
|
||||
|
@ -2643,7 +2648,6 @@ static int ftrace_startup(struct ftrace_ops *ops, int command)
|
|||
return ret;
|
||||
|
||||
ftrace_start_up++;
|
||||
command |= FTRACE_UPDATE_CALLS;
|
||||
|
||||
/*
|
||||
* Note that ftrace probes uses this to start up
|
||||
|
@ -2664,7 +2668,8 @@ static int ftrace_startup(struct ftrace_ops *ops, int command)
|
|||
return ret;
|
||||
}
|
||||
|
||||
ftrace_hash_rec_enable(ops, 1);
|
||||
if (ftrace_hash_rec_enable(ops, 1))
|
||||
command |= FTRACE_UPDATE_CALLS;
|
||||
|
||||
ftrace_startup_enable(command);
|
||||
|
||||
|
@ -2694,12 +2699,12 @@ static int ftrace_shutdown(struct ftrace_ops *ops, int command)
|
|||
|
||||
/* Disabling ipmodify never fails */
|
||||
ftrace_hash_ipmodify_disable(ops);
|
||||
ftrace_hash_rec_disable(ops, 1);
|
||||
|
||||
if (ftrace_hash_rec_disable(ops, 1))
|
||||
command |= FTRACE_UPDATE_CALLS;
|
||||
|
||||
ops->flags &= ~FTRACE_OPS_FL_ENABLED;
|
||||
|
||||
command |= FTRACE_UPDATE_CALLS;
|
||||
|
||||
if (saved_ftrace_func != ftrace_trace_function) {
|
||||
saved_ftrace_func = ftrace_trace_function;
|
||||
command |= FTRACE_UPDATE_TRACE_FUNC;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue