Hi Daniel/Steven,
On 30 August 2016 at 20:32, Daniel Wagner daniel.wagner@bmw-carit.de wrote:
On 08/30/2016 04:20 PM, Daniel Wagner wrote:
Just setting the size of the type is not enough. The hist_field_* getter function want to know the offset too:
With this hack here it should work. The COMM generic field is handled via the tracing_map_ops. We could do it also there but than we need to a condition in the trace_map_ops if it is COMM or CPU. This shortcut here avoids it:
diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index f3a960e..77073b7 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -556,6 +567,11 @@ static int create_key_field(struct hist_trigger_data *hist_data, key_size = MAX_FILTER_STR_VAL; else key_size = field->size;
// strcmp(field_name, "cpu") would also work to figure
// out if this is a one of the generic fields.
if (field->filter_type == FILTER_CPU)
flags |= HIST_FIELD_FL_CPU; } hist_data->fields[key_idx] = create_hist_field(field, flags);
I applied Daniel's fix and it seems to work. Can we use the following instead on top of your patch? Like how the other keys are compared against respective fields?
diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index 46203b7..963a121 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c @@ -537,6 +537,12 @@ static int create_key_field(struct hist_trigger_data *hist_data, } else { char *field_name = strsep(&field_str, ".");
+ /* Cannot keep these 2 lines in side the if() below + * as field_str would be NULL for the key 'cpu' + */ + if (strcmp(field_name, "cpu") == 0) + flags |= HIST_FIELD_FL_CPU; + if (field_str) { if (strcmp(field_str, "hex") == 0) flags |= HIST_FIELD_FL_HEX; @@ -568,11 +574,6 @@ static int create_key_field(struct hist_trigger_data *hist_data, else key_size = field->size;
- // strcmp(field_name, "cpu") would also work to figure - // out if this is a one of the generic fields. - if (field->filter_type == FILTER_CPU) - flags |= HIST_FIELD_FL_CPU; - }
hist_data->fields[key_idx] = create_hist_field(field, flags);
- Binoy