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.com

Acked-by: Namhyung Kim <namhyung@kernel.org>
Reviewed-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
This commit is contained in:
Tom Zanussi 2018-12-19 13:09:16 -06:00 committed by Steven Rostedt (VMware)
parent 2f31ed9308
commit e4f6d24503
1 changed files with 11 additions and 57 deletions

View File

@ -1297,75 +1297,29 @@ check_field_for_var_ref(struct hist_field *hist_field,
struct hist_trigger_data *var_data,
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;
}
}
if (hist_field && hist_field->var.idx == var_idx &&
hist_field->var.hist_data == var_data)
return 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];
found = check_field_for_var_refs(hist_data, operand, var_data,
var_idx, level + 1);
if (found)
return found;
}
return found;
return NULL;
}
static struct hist_field *find_var_ref(struct hist_trigger_data *hist_data,
struct hist_trigger_data *var_data,
unsigned int var_idx)
{
struct hist_field *hist_field, *found = NULL;
struct hist_field *hist_field;
unsigned int i;
for_each_hist_field(i, hist_data) {
hist_field = hist_data->fields[i];
found = check_field_for_var_refs(hist_data, hist_field,
var_data, var_idx, 0);
if (found)
return found;
for (i = 0; i < hist_data->n_var_refs; i++) {
hist_field = hist_data->var_refs[i];
if (check_field_for_var_ref(hist_field, var_data, var_idx))
return hist_field;
}
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,