Merge tag 'trace-v5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace
Pull tracing updates from Steven Rostedt: "The main changes in this release include: - Add user space specific memory reading for kprobes - Allow kprobes to be executed earlier in boot The rest are mostly just various clean ups and small fixes" * tag 'trace-v5.3' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: (33 commits) tracing: Make trace_get_fields() global tracing: Let filter_assign_type() detect FILTER_PTR_STRING tracing: Pass type into tracing_generic_entry_update() ftrace/selftest: Test if set_event/ftrace_pid exists before writing ftrace/selftests: Return the skip code when tracing directory not configured in kernel tracing/kprobe: Check registered state using kprobe tracing/probe: Add trace_event_call accesses APIs tracing/probe: Add probe event name and group name accesses APIs tracing/probe: Add trace flag access APIs for trace_probe tracing/probe: Add trace_event_file access APIs for trace_probe tracing/probe: Add trace_event_call register API for trace_probe tracing/probe: Add trace_probe init and free functions tracing/uprobe: Set print format when parsing command tracing/kprobe: Set print format right after parsed command kprobes: Fix to init kprobes in subsys_initcall tracepoint: Use struct_size() in kmalloc() ring-buffer: Remove HAVE_64BIT_ALIGNED_ACCESS ftrace: Enable trampoline when rec count returns back to one tracing/kprobe: Do not run kprobe boot tests if kprobe_event is on cmdline tracing: Make a separate config for trace event self tests ...
This commit is contained in:
@@ -1622,6 +1622,11 @@ static bool test_rec_ops_needs_regs(struct dyn_ftrace *rec)
|
||||
return keep_regs;
|
||||
}
|
||||
|
||||
static struct ftrace_ops *
|
||||
ftrace_find_tramp_ops_any(struct dyn_ftrace *rec);
|
||||
static struct ftrace_ops *
|
||||
ftrace_find_tramp_ops_next(struct dyn_ftrace *rec, struct ftrace_ops *ops);
|
||||
|
||||
static bool __ftrace_hash_rec_update(struct ftrace_ops *ops,
|
||||
int filter_hash,
|
||||
bool inc)
|
||||
@@ -1750,15 +1755,17 @@ static bool __ftrace_hash_rec_update(struct ftrace_ops *ops,
|
||||
}
|
||||
|
||||
/*
|
||||
* If the rec had TRAMP enabled, then it needs to
|
||||
* be cleared. As TRAMP can only be enabled iff
|
||||
* there is only a single ops attached to it.
|
||||
* In otherwords, always disable it on decrementing.
|
||||
* In the future, we may set it if rec count is
|
||||
* decremented to one, and the ops that is left
|
||||
* has a trampoline.
|
||||
* The TRAMP needs to be set only if rec count
|
||||
* is decremented to one, and the ops that is
|
||||
* left has a trampoline. As TRAMP can only be
|
||||
* enabled if there is only a single ops attached
|
||||
* to it.
|
||||
*/
|
||||
rec->flags &= ~FTRACE_FL_TRAMP;
|
||||
if (ftrace_rec_count(rec) == 1 &&
|
||||
ftrace_find_tramp_ops_any(rec))
|
||||
rec->flags |= FTRACE_FL_TRAMP;
|
||||
else
|
||||
rec->flags &= ~FTRACE_FL_TRAMP;
|
||||
|
||||
/*
|
||||
* flags will be cleared in ftrace_check_record()
|
||||
@@ -1768,7 +1775,7 @@ static bool __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;
|
||||
update |= ftrace_test_record(rec, true) != FTRACE_UPDATE_IGNORE;
|
||||
|
||||
/* Shortcut, if we handled all records, we are done. */
|
||||
if (!all && count == hash->count)
|
||||
@@ -1951,11 +1958,6 @@ static void print_ip_ins(const char *fmt, const unsigned char *p)
|
||||
printk(KERN_CONT "%s%02x", i ? ":" : "", p[i]);
|
||||
}
|
||||
|
||||
static struct ftrace_ops *
|
||||
ftrace_find_tramp_ops_any(struct dyn_ftrace *rec);
|
||||
static struct ftrace_ops *
|
||||
ftrace_find_tramp_ops_next(struct dyn_ftrace *rec, struct ftrace_ops *ops);
|
||||
|
||||
enum ftrace_bug_type ftrace_bug_type;
|
||||
const void *ftrace_expected;
|
||||
|
||||
@@ -2047,7 +2049,7 @@ void ftrace_bug(int failed, struct dyn_ftrace *rec)
|
||||
}
|
||||
}
|
||||
|
||||
static int ftrace_check_record(struct dyn_ftrace *rec, int enable, int update)
|
||||
static int ftrace_check_record(struct dyn_ftrace *rec, bool enable, bool update)
|
||||
{
|
||||
unsigned long flag = 0UL;
|
||||
|
||||
@@ -2146,28 +2148,28 @@ static int ftrace_check_record(struct dyn_ftrace *rec, int enable, int update)
|
||||
/**
|
||||
* ftrace_update_record, set a record that now is tracing or not
|
||||
* @rec: the record to update
|
||||
* @enable: set to 1 if the record is tracing, zero to force disable
|
||||
* @enable: set to true if the record is tracing, false to force disable
|
||||
*
|
||||
* The records that represent all functions that can be traced need
|
||||
* to be updated when tracing has been enabled.
|
||||
*/
|
||||
int ftrace_update_record(struct dyn_ftrace *rec, int enable)
|
||||
int ftrace_update_record(struct dyn_ftrace *rec, bool enable)
|
||||
{
|
||||
return ftrace_check_record(rec, enable, 1);
|
||||
return ftrace_check_record(rec, enable, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* ftrace_test_record, check if the record has been enabled or not
|
||||
* @rec: the record to test
|
||||
* @enable: set to 1 to check if enabled, 0 if it is disabled
|
||||
* @enable: set to true to check if enabled, false if it is disabled
|
||||
*
|
||||
* The arch code may need to test if a record is already set to
|
||||
* tracing to determine how to modify the function code that it
|
||||
* represents.
|
||||
*/
|
||||
int ftrace_test_record(struct dyn_ftrace *rec, int enable)
|
||||
int ftrace_test_record(struct dyn_ftrace *rec, bool enable)
|
||||
{
|
||||
return ftrace_check_record(rec, enable, 0);
|
||||
return ftrace_check_record(rec, enable, false);
|
||||
}
|
||||
|
||||
static struct ftrace_ops *
|
||||
@@ -2356,7 +2358,7 @@ unsigned long ftrace_get_addr_curr(struct dyn_ftrace *rec)
|
||||
}
|
||||
|
||||
static int
|
||||
__ftrace_replace_code(struct dyn_ftrace *rec, int enable)
|
||||
__ftrace_replace_code(struct dyn_ftrace *rec, bool enable)
|
||||
{
|
||||
unsigned long ftrace_old_addr;
|
||||
unsigned long ftrace_addr;
|
||||
@@ -2395,7 +2397,7 @@ void __weak ftrace_replace_code(int mod_flags)
|
||||
{
|
||||
struct dyn_ftrace *rec;
|
||||
struct ftrace_page *pg;
|
||||
int enable = mod_flags & FTRACE_MODIFY_ENABLE_FL;
|
||||
bool enable = mod_flags & FTRACE_MODIFY_ENABLE_FL;
|
||||
int schedulable = mod_flags & FTRACE_MODIFY_MAY_SLEEP_FL;
|
||||
int failed;
|
||||
|
||||
|
Reference in New Issue
Block a user