Commit e4f6d245 authored by Tom Zanussi's avatar Tom Zanussi Committed by Steven Rostedt (VMware)

tracing: Use var_refs[] for hist trigger reference checking

Since all the variable reference hist_fields are collected into
hist_data->var_refs[] array, there's no need to go through all the
fields looking for them, or in separate arrays like synth_var_refs[],
which will be going away soon anyway.

This also allows us to get rid of some unnecessary code and functions
currently used for the same purpose.

Link: http://lkml.kernel.org/r/1545246556.4239.7.camel@gmail.comAcked-by: default avatarNamhyung Kim <namhyung@kernel.org>
Reviewed-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: default avatarTom Zanussi <tom.zanussi@linux.intel.com>
Signed-off-by: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
parent 2f31ed93
...@@ -1297,75 +1297,29 @@ check_field_for_var_ref(struct hist_field *hist_field, ...@@ -1297,75 +1297,29 @@ check_field_for_var_ref(struct hist_field *hist_field,
struct hist_trigger_data *var_data, struct hist_trigger_data *var_data,
unsigned int var_idx) unsigned int var_idx)
{ {
struct hist_field *found = NULL; WARN_ON(!(hist_field && hist_field->flags & HIST_FIELD_FL_VAR_REF));
if (hist_field && hist_field->flags & HIST_FIELD_FL_VAR_REF) {
if (hist_field->var.idx == var_idx &&
hist_field->var.hist_data == var_data) {
found = hist_field;
}
}
return found;
}
static struct hist_field *
check_field_for_var_refs(struct hist_trigger_data *hist_data,
struct hist_field *hist_field,
struct hist_trigger_data *var_data,
unsigned int var_idx,
unsigned int level)
{
struct hist_field *found = NULL;
unsigned int i;
if (level > 3)
return found;
if (!hist_field)
return found;
found = check_field_for_var_ref(hist_field, var_data, var_idx);
if (found)
return found;
for (i = 0; i < HIST_FIELD_OPERANDS_MAX; i++) {
struct hist_field *operand;
operand = hist_field->operands[i]; if (hist_field && hist_field->var.idx == var_idx &&
found = check_field_for_var_refs(hist_data, operand, var_data, hist_field->var.hist_data == var_data)
var_idx, level + 1); return hist_field;
if (found)
return found;
}
return found; return NULL;
} }
static struct hist_field *find_var_ref(struct hist_trigger_data *hist_data, static struct hist_field *find_var_ref(struct hist_trigger_data *hist_data,
struct hist_trigger_data *var_data, struct hist_trigger_data *var_data,
unsigned int var_idx) unsigned int var_idx)
{ {
struct hist_field *hist_field, *found = NULL; struct hist_field *hist_field;
unsigned int i; unsigned int i;
for_each_hist_field(i, hist_data) { for (i = 0; i < hist_data->n_var_refs; i++) {
hist_field = hist_data->fields[i]; hist_field = hist_data->var_refs[i];
found = check_field_for_var_refs(hist_data, hist_field, if (check_field_for_var_ref(hist_field, var_data, var_idx))
var_data, var_idx, 0); return hist_field;
if (found)
return found;
}
for (i = 0; i < hist_data->n_synth_var_refs; i++) {
hist_field = hist_data->synth_var_refs[i];
found = check_field_for_var_refs(hist_data, hist_field,
var_data, var_idx, 0);
if (found)
return found;
} }
return found; return NULL;
} }
static struct hist_field *find_any_var_ref(struct hist_trigger_data *hist_data, static struct hist_field *find_any_var_ref(struct hist_trigger_data *hist_data,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment