mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 22:51:35 +00:00
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:
parent
2f31ed9308
commit
e4f6d24503
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user