Merge tag 'trace-v4.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace
Pull tracing fixes from Steven Rostedt:
"There was some breakage with the changes for jump labels in the 4.11
merge window:
- powerpc broke as jump labels uses the two LSB bits as flags in
initialization.
A check was added to make sure that all jump label entries were 4
bytes aligned, but powerpc didn't work that way for modules. Adding
an alignment in the module linker script appeared to be the best
solution.
- Jump labels also added an anonymous union to access those LSB bits
as a normal long. But because this structure had static
initialization, it broke older compilers that could not statically
initialize anonymous unions without brackets.
- The command line parameter for setting function graph filter broke
the "EMPTY_HASH" descriptor by modifying it instead of creating a
new hash to hold the entries.
- The command line parameter ftrace_graph_max_depth was added to
allow its setting at boot time. It uses existing code and only the
command line hook was added.
This is not really a fix, but as it uses existing code without
affecting anything else, I added it to this release. It was ready
before the merge window closed, but I wanted to let it sit in
linux-next for a couple of days first"
* tag 'trace-v4.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace:
ftrace/graph: Add ftrace_graph_max_depth kernel parameter
tracing: Add #undef to fix compile error
jump_label: Add comment about initialization order for anonymous unions
jump_label: Fix anonymous union initialization
module: set __jump_table alignment to 8
ftrace/graph: Do not modify the EMPTY_HASH for the function_graph filter
tracing: Fix code comment for ftrace_ops_get_func()
This commit is contained in:
@@ -1183,6 +1183,12 @@
|
||||
functions that can be changed at run time by the
|
||||
set_graph_notrace file in the debugfs tracing directory.
|
||||
|
||||
ftrace_graph_max_depth=<uint>
|
||||
[FTRACE] Used with the function graph tracer. This is
|
||||
the max depth it will trace into a function. This value
|
||||
can be changed at run time by the max_graph_depth file
|
||||
in the tracefs tracing directory. default: 0 (no limit)
|
||||
|
||||
gamecon.map[2|3]=
|
||||
[HW,JOY] Multisystem joystick and NES/SNES/PSX pad
|
||||
support via parallel port (up to 5 devices per port)
|
||||
|
||||
@@ -90,6 +90,13 @@ extern bool static_key_initialized;
|
||||
struct static_key {
|
||||
atomic_t enabled;
|
||||
/*
|
||||
* Note:
|
||||
* To make anonymous unions work with old compilers, the static
|
||||
* initialization of them requires brackets. This creates a dependency
|
||||
* on the order of the struct with the initializers. If any fields
|
||||
* are added, STATIC_KEY_INIT_TRUE and STATIC_KEY_INIT_FALSE may need
|
||||
* to be modified.
|
||||
*
|
||||
* bit 0 => 1 if key is initially true
|
||||
* 0 if initially false
|
||||
* bit 1 => 1 if points to struct static_key_mod
|
||||
@@ -166,10 +173,10 @@ extern void static_key_disable(struct static_key *key);
|
||||
*/
|
||||
#define STATIC_KEY_INIT_TRUE \
|
||||
{ .enabled = { 1 }, \
|
||||
.entries = (void *)JUMP_TYPE_TRUE }
|
||||
{ .entries = (void *)JUMP_TYPE_TRUE } }
|
||||
#define STATIC_KEY_INIT_FALSE \
|
||||
{ .enabled = { 0 }, \
|
||||
.entries = (void *)JUMP_TYPE_FALSE }
|
||||
{ .entries = (void *)JUMP_TYPE_FALSE } }
|
||||
|
||||
#else /* !HAVE_JUMP_LABEL */
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM raw_syscalls
|
||||
#undef TRACE_INCLUDE_FILE
|
||||
#define TRACE_INCLUDE_FILE syscalls
|
||||
|
||||
#if !defined(_TRACE_EVENTS_SYSCALLS_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
|
||||
@@ -4416,16 +4416,24 @@ static int __init set_graph_notrace_function(char *str)
|
||||
}
|
||||
__setup("ftrace_graph_notrace=", set_graph_notrace_function);
|
||||
|
||||
static int __init set_graph_max_depth_function(char *str)
|
||||
{
|
||||
if (!str)
|
||||
return 0;
|
||||
fgraph_max_depth = simple_strtoul(str, NULL, 0);
|
||||
return 1;
|
||||
}
|
||||
__setup("ftrace_graph_max_depth=", set_graph_max_depth_function);
|
||||
|
||||
static void __init set_ftrace_early_graph(char *buf, int enable)
|
||||
{
|
||||
int ret;
|
||||
char *func;
|
||||
struct ftrace_hash *hash;
|
||||
|
||||
if (enable)
|
||||
hash = ftrace_graph_hash;
|
||||
else
|
||||
hash = ftrace_graph_notrace_hash;
|
||||
hash = alloc_ftrace_hash(FTRACE_HASH_DEFAULT_BITS);
|
||||
if (WARN_ON(!hash))
|
||||
return;
|
||||
|
||||
while (buf) {
|
||||
func = strsep(&buf, ",");
|
||||
@@ -4435,6 +4443,11 @@ static void __init set_ftrace_early_graph(char *buf, int enable)
|
||||
printk(KERN_DEBUG "ftrace: function %s not "
|
||||
"traceable\n", func);
|
||||
}
|
||||
|
||||
if (enable)
|
||||
ftrace_graph_hash = hash;
|
||||
else
|
||||
ftrace_graph_notrace_hash = hash;
|
||||
}
|
||||
#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
|
||||
|
||||
@@ -5488,7 +5501,7 @@ static void ftrace_ops_assist_func(unsigned long ip, unsigned long parent_ip,
|
||||
* Normally the mcount trampoline will call the ops->func, but there
|
||||
* are times that it should not. For example, if the ops does not
|
||||
* have its own recursion protection, then it should call the
|
||||
* ftrace_ops_recurs_func() instead.
|
||||
* ftrace_ops_assist_func() instead.
|
||||
*
|
||||
* Returns the function that the trampoline should call for @ops.
|
||||
*/
|
||||
|
||||
@@ -22,4 +22,6 @@ SECTIONS {
|
||||
|
||||
. = ALIGN(8);
|
||||
.init_array 0 : { *(SORT(.init_array.*)) *(.init_array) }
|
||||
|
||||
__jump_table 0 : ALIGN(8) { KEEP(*(__jump_table)) }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user