tracing: remove max_tracer_type_len
Limit the length of a tracer's name within 100 chars, and then we don't have to play with max_tracer_type_len. Acked-by: Frederic Weisbecker <fweisbec@gmail.com> Signed-off-by: Li Zefan <lizf@cn.fujitsu.com> LKML-Reference: <4AB32377.9020601@cn.fujitsu.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
parent
a4ec5e0c26
commit
ee6c2c1bd1
1 changed files with 16 additions and 33 deletions
|
@ -125,13 +125,13 @@ int ftrace_dump_on_oops;
|
||||||
|
|
||||||
static int tracing_set_tracer(const char *buf);
|
static int tracing_set_tracer(const char *buf);
|
||||||
|
|
||||||
#define BOOTUP_TRACER_SIZE 100
|
#define MAX_TRACER_SIZE 100
|
||||||
static char bootup_tracer_buf[BOOTUP_TRACER_SIZE] __initdata;
|
static char bootup_tracer_buf[MAX_TRACER_SIZE] __initdata;
|
||||||
static char *default_bootup_tracer;
|
static char *default_bootup_tracer;
|
||||||
|
|
||||||
static int __init set_ftrace(char *str)
|
static int __init set_ftrace(char *str)
|
||||||
{
|
{
|
||||||
strncpy(bootup_tracer_buf, str, BOOTUP_TRACER_SIZE);
|
strncpy(bootup_tracer_buf, str, MAX_TRACER_SIZE);
|
||||||
default_bootup_tracer = bootup_tracer_buf;
|
default_bootup_tracer = bootup_tracer_buf;
|
||||||
/* We are using ftrace early, expand it */
|
/* We are using ftrace early, expand it */
|
||||||
ring_buffer_expanded = 1;
|
ring_buffer_expanded = 1;
|
||||||
|
@ -241,13 +241,6 @@ static struct tracer *trace_types __read_mostly;
|
||||||
/* current_trace points to the tracer that is currently active */
|
/* current_trace points to the tracer that is currently active */
|
||||||
static struct tracer *current_trace __read_mostly;
|
static struct tracer *current_trace __read_mostly;
|
||||||
|
|
||||||
/*
|
|
||||||
* max_tracer_type_len is used to simplify the allocating of
|
|
||||||
* buffers to read userspace tracer names. We keep track of
|
|
||||||
* the longest tracer name registered.
|
|
||||||
*/
|
|
||||||
static int max_tracer_type_len;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* trace_types_lock is used to protect the trace_types list.
|
* trace_types_lock is used to protect the trace_types list.
|
||||||
* This lock is also used to keep user access serialized.
|
* This lock is also used to keep user access serialized.
|
||||||
|
@ -619,7 +612,6 @@ __releases(kernel_lock)
|
||||||
__acquires(kernel_lock)
|
__acquires(kernel_lock)
|
||||||
{
|
{
|
||||||
struct tracer *t;
|
struct tracer *t;
|
||||||
int len;
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
if (!type->name) {
|
if (!type->name) {
|
||||||
|
@ -627,6 +619,11 @@ __acquires(kernel_lock)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (strlen(type->name) > MAX_TRACER_SIZE) {
|
||||||
|
pr_info("Tracer has a name longer than %d\n", MAX_TRACER_SIZE);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When this gets called we hold the BKL which means that
|
* When this gets called we hold the BKL which means that
|
||||||
* preemption is disabled. Various trace selftests however
|
* preemption is disabled. Various trace selftests however
|
||||||
|
@ -641,7 +638,7 @@ __acquires(kernel_lock)
|
||||||
for (t = trace_types; t; t = t->next) {
|
for (t = trace_types; t; t = t->next) {
|
||||||
if (strcmp(type->name, t->name) == 0) {
|
if (strcmp(type->name, t->name) == 0) {
|
||||||
/* already found */
|
/* already found */
|
||||||
pr_info("Trace %s already registered\n",
|
pr_info("Tracer %s already registered\n",
|
||||||
type->name);
|
type->name);
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -692,9 +689,6 @@ __acquires(kernel_lock)
|
||||||
|
|
||||||
type->next = trace_types;
|
type->next = trace_types;
|
||||||
trace_types = type;
|
trace_types = type;
|
||||||
len = strlen(type->name);
|
|
||||||
if (len > max_tracer_type_len)
|
|
||||||
max_tracer_type_len = len;
|
|
||||||
|
|
||||||
out:
|
out:
|
||||||
tracing_selftest_running = false;
|
tracing_selftest_running = false;
|
||||||
|
@ -703,7 +697,7 @@ __acquires(kernel_lock)
|
||||||
if (ret || !default_bootup_tracer)
|
if (ret || !default_bootup_tracer)
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
|
|
||||||
if (strncmp(default_bootup_tracer, type->name, BOOTUP_TRACER_SIZE))
|
if (strncmp(default_bootup_tracer, type->name, MAX_TRACER_SIZE))
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
|
|
||||||
printk(KERN_INFO "Starting tracer '%s'\n", type->name);
|
printk(KERN_INFO "Starting tracer '%s'\n", type->name);
|
||||||
|
@ -725,14 +719,13 @@ __acquires(kernel_lock)
|
||||||
void unregister_tracer(struct tracer *type)
|
void unregister_tracer(struct tracer *type)
|
||||||
{
|
{
|
||||||
struct tracer **t;
|
struct tracer **t;
|
||||||
int len;
|
|
||||||
|
|
||||||
mutex_lock(&trace_types_lock);
|
mutex_lock(&trace_types_lock);
|
||||||
for (t = &trace_types; *t; t = &(*t)->next) {
|
for (t = &trace_types; *t; t = &(*t)->next) {
|
||||||
if (*t == type)
|
if (*t == type)
|
||||||
goto found;
|
goto found;
|
||||||
}
|
}
|
||||||
pr_info("Trace %s not registered\n", type->name);
|
pr_info("Tracer %s not registered\n", type->name);
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
found:
|
found:
|
||||||
|
@ -745,17 +738,7 @@ void unregister_tracer(struct tracer *type)
|
||||||
current_trace->stop(&global_trace);
|
current_trace->stop(&global_trace);
|
||||||
current_trace = &nop_trace;
|
current_trace = &nop_trace;
|
||||||
}
|
}
|
||||||
|
out:
|
||||||
if (strlen(type->name) != max_tracer_type_len)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
max_tracer_type_len = 0;
|
|
||||||
for (t = &trace_types; *t; t = &(*t)->next) {
|
|
||||||
len = strlen((*t)->name);
|
|
||||||
if (len > max_tracer_type_len)
|
|
||||||
max_tracer_type_len = len;
|
|
||||||
}
|
|
||||||
out:
|
|
||||||
mutex_unlock(&trace_types_lock);
|
mutex_unlock(&trace_types_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2604,7 +2587,7 @@ static ssize_t
|
||||||
tracing_set_trace_read(struct file *filp, char __user *ubuf,
|
tracing_set_trace_read(struct file *filp, char __user *ubuf,
|
||||||
size_t cnt, loff_t *ppos)
|
size_t cnt, loff_t *ppos)
|
||||||
{
|
{
|
||||||
char buf[max_tracer_type_len+2];
|
char buf[MAX_TRACER_SIZE+2];
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
mutex_lock(&trace_types_lock);
|
mutex_lock(&trace_types_lock);
|
||||||
|
@ -2754,15 +2737,15 @@ static ssize_t
|
||||||
tracing_set_trace_write(struct file *filp, const char __user *ubuf,
|
tracing_set_trace_write(struct file *filp, const char __user *ubuf,
|
||||||
size_t cnt, loff_t *ppos)
|
size_t cnt, loff_t *ppos)
|
||||||
{
|
{
|
||||||
char buf[max_tracer_type_len+1];
|
char buf[MAX_TRACER_SIZE+1];
|
||||||
int i;
|
int i;
|
||||||
size_t ret;
|
size_t ret;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
ret = cnt;
|
ret = cnt;
|
||||||
|
|
||||||
if (cnt > max_tracer_type_len)
|
if (cnt > MAX_TRACER_SIZE)
|
||||||
cnt = max_tracer_type_len;
|
cnt = MAX_TRACER_SIZE;
|
||||||
|
|
||||||
if (copy_from_user(&buf, ubuf, cnt))
|
if (copy_from_user(&buf, ubuf, cnt))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
Loading…
Reference in a new issue