Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 158399
b: refs/heads/master
c: e202687
h: refs/heads/master
i:
  158397: f5b90c0
  158395: fe11a4c
  158391: 964a34b
  158383: 1837672
  158367: 43e3089
  158335: 5d36b2e
v: v3
  • Loading branch information
Ingo Molnar committed Jul 10, 2009
1 parent 10d0d4c commit 48f0504
Show file tree
Hide file tree
Showing 9 changed files with 87 additions and 81 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8b2c70d1e43074cc06afe99b0de12b686d9c9d02
refs/heads/master: e202687927c132b1e1ff36b526b5e78ac33de840
41 changes: 13 additions & 28 deletions trunk/kernel/trace/kmemtrace.c
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ struct kmemtrace_user_event_alloc {
};

static enum print_line_t
kmemtrace_print_alloc_user(struct trace_iterator *iter, int flags)
kmemtrace_print_alloc(struct trace_iterator *iter, int flags)
{
struct trace_seq *s = &iter->seq;
struct kmemtrace_alloc_entry *entry;
Expand All @@ -259,7 +259,7 @@ kmemtrace_print_alloc_user(struct trace_iterator *iter, int flags)
}

static enum print_line_t
kmemtrace_print_free_user(struct trace_iterator *iter, int flags)
kmemtrace_print_free(struct trace_iterator *iter, int flags)
{
struct trace_seq *s = &iter->seq;
struct kmemtrace_free_entry *entry;
Expand All @@ -277,7 +277,7 @@ kmemtrace_print_free_user(struct trace_iterator *iter, int flags)
}

static enum print_line_t
kmemtrace_print_alloc_user_bin(struct trace_iterator *iter, int flags)
kmemtrace_print_alloc_user(struct trace_iterator *iter, int flags)
{
struct trace_seq *s = &iter->seq;
struct kmemtrace_alloc_entry *entry;
Expand Down Expand Up @@ -311,7 +311,7 @@ kmemtrace_print_alloc_user_bin(struct trace_iterator *iter, int flags)
}

static enum print_line_t
kmemtrace_print_free_user_bin(struct trace_iterator *iter, int flags)
kmemtrace_print_free_user(struct trace_iterator *iter, int flags)
{
struct trace_seq *s = &iter->seq;
struct kmemtrace_free_entry *entry;
Expand Down Expand Up @@ -389,19 +389,12 @@ kmemtrace_print_alloc_compress(struct trace_iterator *iter)
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;

/* Node */
ret = trace_seq_printf(s, "%4d ", entry->node);
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;

/* Call site */
ret = seq_print_ip_sym(s, entry->call_site, 0);
/* Node and call site*/
ret = trace_seq_printf(s, "%4d %pf\n", entry->node,
(void *)entry->call_site);
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;

if (!trace_seq_printf(s, "\n"))
return TRACE_TYPE_PARTIAL_LINE;

return TRACE_TYPE_HANDLED;
}

Expand Down Expand Up @@ -447,19 +440,11 @@ kmemtrace_print_free_compress(struct trace_iterator *iter)
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;

/* Skip node */
ret = trace_seq_printf(s, " ");
/* Skip node and print call site*/
ret = trace_seq_printf(s, " %pf\n", (void *)entry->call_site);
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;

/* Call site */
ret = seq_print_ip_sym(s, entry->call_site, 0);
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;

if (!trace_seq_printf(s, "\n"))
return TRACE_TYPE_PARTIAL_LINE;

return TRACE_TYPE_HANDLED;
}

Expand All @@ -482,14 +467,14 @@ static enum print_line_t kmemtrace_print_line(struct trace_iterator *iter)

static struct trace_event kmem_trace_alloc = {
.type = TRACE_KMEM_ALLOC,
.trace = kmemtrace_print_alloc_user,
.binary = kmemtrace_print_alloc_user_bin,
.trace = kmemtrace_print_alloc,
.binary = kmemtrace_print_alloc_user,
};

static struct trace_event kmem_trace_free = {
.type = TRACE_KMEM_FREE,
.trace = kmemtrace_print_free_user,
.binary = kmemtrace_print_free_user_bin,
.trace = kmemtrace_print_free,
.binary = kmemtrace_print_free_user,
};

static struct tracer kmem_tracer __read_mostly = {
Expand Down
1 change: 1 addition & 0 deletions trunk/kernel/trace/trace.h
Original file line number Diff line number Diff line change
Expand Up @@ -757,6 +757,7 @@ struct event_subsystem {
const char *name;
struct dentry *entry;
void *filter;
int nr_events;
};

struct filter_pred;
Expand Down
32 changes: 31 additions & 1 deletion trunk/kernel/trace/trace_events.c
Original file line number Diff line number Diff line change
Expand Up @@ -851,8 +851,10 @@ event_subsystem_dir(const char *name, struct dentry *d_events)

/* First see if we did not already create this dir */
list_for_each_entry(system, &event_subsystems, list) {
if (strcmp(system->name, name) == 0)
if (strcmp(system->name, name) == 0) {
system->nr_events++;
return system->entry;
}
}

/* need to create new entry */
Expand All @@ -871,6 +873,7 @@ event_subsystem_dir(const char *name, struct dentry *d_events)
return d_events;
}

system->nr_events = 1;
system->name = kstrdup(name, GFP_KERNEL);
if (!system->name) {
debugfs_remove(system->entry);
Expand Down Expand Up @@ -905,6 +908,32 @@ event_subsystem_dir(const char *name, struct dentry *d_events)
return system->entry;
}

static void remove_subsystem_dir(const char *name)
{
struct event_subsystem *system;

if (strcmp(name, TRACE_SYSTEM) == 0)
return;

list_for_each_entry(system, &event_subsystems, list) {
if (strcmp(system->name, name) == 0) {
if (!--system->nr_events) {
struct event_filter *filter = system->filter;

debugfs_remove_recursive(system->entry);
list_del(&system->list);
if (filter) {
kfree(filter->filter_string);
kfree(filter);
}
kfree(system->name);
kfree(system);
}
break;
}
}
}

static int
event_create_dir(struct ftrace_event_call *call, struct dentry *d_events,
const struct file_operations *id,
Expand Down Expand Up @@ -1079,6 +1108,7 @@ static void trace_module_remove_events(struct module *mod)
list_del(&call->list);
trace_destroy_fields(call);
destroy_preds(call);
remove_subsystem_dir(call->system);
}
}

Expand Down
39 changes: 6 additions & 33 deletions trunk/kernel/trace/trace_events_filter.c
Original file line number Diff line number Diff line change
Expand Up @@ -420,17 +420,7 @@ EXPORT_SYMBOL_GPL(init_preds);

static void filter_free_subsystem_preds(struct event_subsystem *system)
{
struct event_filter *filter = system->filter;
struct ftrace_event_call *call;
int i;

if (filter->n_preds) {
for (i = 0; i < filter->n_preds; i++)
filter_free_pred(filter->preds[i]);
kfree(filter->preds);
filter->preds = NULL;
filter->n_preds = 0;
}

list_for_each_entry(call, &ftrace_events, list) {
if (!call->define_fields)
Expand Down Expand Up @@ -607,26 +597,9 @@ static int filter_add_subsystem_pred(struct filter_parse_state *ps,
struct filter_pred *pred,
char *filter_string)
{
struct event_filter *filter = system->filter;
struct ftrace_event_call *call;
int err = 0;

if (!filter->preds) {
filter->preds = kzalloc(MAX_FILTER_PRED * sizeof(pred),
GFP_KERNEL);

if (!filter->preds)
return -ENOMEM;
}

if (filter->n_preds == MAX_FILTER_PRED) {
parse_error(ps, FILT_ERR_TOO_MANY_PREDS, 0);
return -ENOSPC;
}

filter->preds[filter->n_preds] = pred;
filter->n_preds++;

list_for_each_entry(call, &ftrace_events, list) {

if (!call->define_fields)
Expand Down Expand Up @@ -1029,12 +1002,12 @@ static int replace_preds(struct event_subsystem *system,

if (elt->op == OP_AND || elt->op == OP_OR) {
pred = create_logical_pred(elt->op);
if (call) {
if (call)
err = filter_add_pred(ps, call, pred);
filter_free_pred(pred);
} else
else
err = filter_add_subsystem_pred(ps, system,
pred, filter_string);
filter_free_pred(pred);
if (err)
return err;

Expand All @@ -1048,12 +1021,12 @@ static int replace_preds(struct event_subsystem *system,
}

pred = create_pred(elt->op, operand1, operand2);
if (call) {
if (call)
err = filter_add_pred(ps, call, pred);
filter_free_pred(pred);
} else
else
err = filter_add_subsystem_pred(ps, system, pred,
filter_string);
filter_free_pred(pred);
if (err)
return err;

Expand Down
12 changes: 2 additions & 10 deletions trunk/kernel/trace/trace_functions_graph.c
Original file line number Diff line number Diff line change
Expand Up @@ -565,11 +565,7 @@ print_graph_entry_leaf(struct trace_iterator *iter,
return TRACE_TYPE_PARTIAL_LINE;
}

ret = seq_print_ip_sym(s, call->func, 0);
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;

ret = trace_seq_printf(s, "();\n");
ret = trace_seq_printf(s, "%pf();\n", (void *)call->func);
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;

Expand Down Expand Up @@ -612,11 +608,7 @@ print_graph_entry_nested(struct trace_iterator *iter,
return TRACE_TYPE_PARTIAL_LINE;
}

ret = seq_print_ip_sym(s, call->func, 0);
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;

ret = trace_seq_printf(s, "() {\n");
ret = trace_seq_printf(s, "%pf() {\n", (void *)call->func);
if (!ret)
return TRACE_TYPE_PARTIAL_LINE;

Expand Down
7 changes: 5 additions & 2 deletions trunk/kernel/trace/trace_stat.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ static struct dentry *stat_dir;
* but it will at least advance closer to the next one
* to be released.
*/
static struct rb_node *release_next(struct rb_node *node)
static struct rb_node *release_next(struct tracer_stat *ts,
struct rb_node *node)
{
struct stat_node *snode;
struct rb_node *parent = rb_parent(node);
Expand All @@ -67,6 +68,8 @@ static struct rb_node *release_next(struct rb_node *node)
parent->rb_right = NULL;

snode = container_of(node, struct stat_node, node);
if (ts->stat_release)
ts->stat_release(snode->stat);
kfree(snode);

return parent;
Expand All @@ -78,7 +81,7 @@ static void reset_stat_session(struct stat_session *session)
struct rb_node *node = session->stat_root.rb_node;

while (node)
node = release_next(node);
node = release_next(session->ts, node);

session->stat_root = RB_ROOT;
}
Expand Down
2 changes: 2 additions & 0 deletions trunk/kernel/trace/trace_stat.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ struct tracer_stat {
int (*stat_cmp)(void *p1, void *p2);
/* Print a stat entry */
int (*stat_show)(struct seq_file *s, void *p);
/* Release an entry */
void (*stat_release)(void *stat);
/* Print the headers of your stat entries */
int (*stat_headers)(struct seq_file *s);
};
Expand Down
Loading

0 comments on commit 48f0504

Please sign in to comment.