600 lines · 15.0 KB · C
RawDownload
	/* Checks for tracefs lockdown */	return ftrace_regex_open(ops, FTRACE_ITER_FILTER,				 inode, file);} static const struct file_operations stack_trace_filter_fops = {	.open = stack_trace_filter_open,	.read = seq_read,	.write = ftrace_filter_write,	.llseek = tracing_lseek,	.release = ftrace_regex_release,}; #endif /* CONFIG_DYNAMIC_FTRACE */ intstack_trace_sysctl(const struct ctl_table *table, int write, void *buffer,		   size_t *lenp, loff_t *ppos){	int was_enabled;	int ret; 	guard(mutex)(&stack_sysctl_mutex);	was_enabled = !!stack_tracer_enabled; 	ret = proc_dointvec(table, write, buffer, lenp, ppos); 	if (ret || !write || (was_enabled == !!stack_tracer_enabled))		return ret; 	if (stack_tracer_enabled)		register_ftrace_function(&trace_ops);	else		unregister_ftrace_function(&trace_ops);	return ret;} static char stack_trace_filter_buf[COMMAND_LINE_SIZE+1] __initdata; static __init int enable_stacktrace(char *str){	int len; 	if ((len = str_has_prefix(str, "_filter=")))		strscpy(stack_trace_filter_buf, str + len); 	stack_tracer_enabled = 1;	return 1;}__setup("stacktrace", enable_stacktrace); static __init int stack_trace_init(void){	int ret; 	ret = tracing_init_dentry();	if (ret)		return 0; 	trace_create_file("stack_max_size", TRACE_MODE_WRITE, NULL,			&stack_trace_max_size, &stack_max_size_fops); 	trace_create_file("stack_trace", TRACE_MODE_READ, NULL,			NULL, &stack_trace_fops); #ifdef CONFIG_DYNAMIC_FTRACE	trace_create_file("stack_trace_filter", TRACE_MODE_WRITE, NULL,			  &trace_ops, &stack_trace_filter_fops);#endif 	if (stack_trace_filter_buf[0])		ftrace_set_early_filter(&trace_ops, stack_trace_filter_buf, 1); 	if (stack_tracer_enabled)		register_ftrace_function(&trace_ops); 	return 0;} device_initcall(stack_trace_init);  static const struct ctl_table trace_stack_sysctl_table[] = {	{		.procname	= "stack_tracer_enabled",		.data		= &stack_tracer_enabled,		.maxlen		= sizeof(int),		.mode		= 0644,		.proc_handler	= stack_trace_sysctl,	},}; static int __init init_trace_stack_sysctls(void){	register_sysctl_init("kernel", trace_stack_sysctl_table);	return 0;}subsys_initcall(init_trace_stack_sysctls);  

Lines 501–600 of 600. Previous lines