diff options
author | Ingo Molnar <mingo@kernel.org> | 2019-06-03 05:50:18 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2019-06-03 05:50:18 -0400 |
commit | 26b73da3604cc1a6596406d136b14d1a01c3676f (patch) | |
tree | c7839809e35fce4868910742157e8ef96782b378 /kernel/trace/trace_events_hist.c | |
parent | 5ca584d935c32906d114924dc0e1dbfcbb13fdb2 (diff) | |
parent | f2c7c76c5d0a443053e94adb9f0918fa2fb85c3a (diff) |
Merge tag 'v5.2-rc3' into locking/core, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/trace/trace_events_hist.c')
-rw-r--r-- | kernel/trace/trace_events_hist.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c index 7fca3457c705..ca6b0dff60c5 100644 --- a/kernel/trace/trace_events_hist.c +++ b/kernel/trace/trace_events_hist.c | |||
@@ -59,7 +59,7 @@ | |||
59 | C(NO_CLOSING_PAREN, "No closing paren found"), \ | 59 | C(NO_CLOSING_PAREN, "No closing paren found"), \ |
60 | C(SUBSYS_NOT_FOUND, "Missing subsystem"), \ | 60 | C(SUBSYS_NOT_FOUND, "Missing subsystem"), \ |
61 | C(INVALID_SUBSYS_EVENT, "Invalid subsystem or event name"), \ | 61 | C(INVALID_SUBSYS_EVENT, "Invalid subsystem or event name"), \ |
62 | C(INVALID_REF_KEY, "Using variable references as keys not supported"), \ | 62 | C(INVALID_REF_KEY, "Using variable references in keys not supported"), \ |
63 | C(VAR_NOT_FOUND, "Couldn't find variable"), \ | 63 | C(VAR_NOT_FOUND, "Couldn't find variable"), \ |
64 | C(FIELD_NOT_FOUND, "Couldn't find field"), | 64 | C(FIELD_NOT_FOUND, "Couldn't find field"), |
65 | 65 | ||
@@ -1854,6 +1854,9 @@ static u64 hist_field_var_ref(struct hist_field *hist_field, | |||
1854 | struct hist_elt_data *elt_data; | 1854 | struct hist_elt_data *elt_data; |
1855 | u64 var_val = 0; | 1855 | u64 var_val = 0; |
1856 | 1856 | ||
1857 | if (WARN_ON_ONCE(!elt)) | ||
1858 | return var_val; | ||
1859 | |||
1857 | elt_data = elt->private_data; | 1860 | elt_data = elt->private_data; |
1858 | var_val = elt_data->var_ref_vals[hist_field->var_ref_idx]; | 1861 | var_val = elt_data->var_ref_vals[hist_field->var_ref_idx]; |
1859 | 1862 | ||
@@ -3582,14 +3585,20 @@ static bool cond_snapshot_update(struct trace_array *tr, void *cond_data) | |||
3582 | struct track_data *track_data = tr->cond_snapshot->cond_data; | 3585 | struct track_data *track_data = tr->cond_snapshot->cond_data; |
3583 | struct hist_elt_data *elt_data, *track_elt_data; | 3586 | struct hist_elt_data *elt_data, *track_elt_data; |
3584 | struct snapshot_context *context = cond_data; | 3587 | struct snapshot_context *context = cond_data; |
3588 | struct action_data *action; | ||
3585 | u64 track_val; | 3589 | u64 track_val; |
3586 | 3590 | ||
3587 | if (!track_data) | 3591 | if (!track_data) |
3588 | return false; | 3592 | return false; |
3589 | 3593 | ||
3594 | action = track_data->action_data; | ||
3595 | |||
3590 | track_val = get_track_val(track_data->hist_data, context->elt, | 3596 | track_val = get_track_val(track_data->hist_data, context->elt, |
3591 | track_data->action_data); | 3597 | track_data->action_data); |
3592 | 3598 | ||
3599 | if (!action->track_data.check_val(track_data->track_val, track_val)) | ||
3600 | return false; | ||
3601 | |||
3593 | track_data->track_val = track_val; | 3602 | track_data->track_val = track_val; |
3594 | memcpy(track_data->key, context->key, track_data->key_len); | 3603 | memcpy(track_data->key, context->key, track_data->key_len); |
3595 | 3604 | ||
@@ -4503,7 +4512,7 @@ static int create_key_field(struct hist_trigger_data *hist_data, | |||
4503 | goto out; | 4512 | goto out; |
4504 | } | 4513 | } |
4505 | 4514 | ||
4506 | if (hist_field->flags & HIST_FIELD_FL_VAR_REF) { | 4515 | if (field_has_hist_vars(hist_field, 0)) { |
4507 | hist_err(tr, HIST_ERR_INVALID_REF_KEY, errpos(field_str)); | 4516 | hist_err(tr, HIST_ERR_INVALID_REF_KEY, errpos(field_str)); |
4508 | destroy_hist_field(hist_field, 0); | 4517 | destroy_hist_field(hist_field, 0); |
4509 | ret = -EINVAL; | 4518 | ret = -EINVAL; |