|
59 | 59 | C(NO_CLOSING_PAREN, "No closing paren found"), \
|
60 | 60 | C(SUBSYS_NOT_FOUND, "Missing subsystem"), \
|
61 | 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 | 63 | C(VAR_NOT_FOUND, "Couldn't find variable"), \
|
64 | 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 | 1854 | struct hist_elt_data *elt_data;
|
1855 | 1855 | u64 var_val = 0;
|
1856 | 1856 |
|
| 1857 | + if (WARN_ON_ONCE(!elt)) |
| 1858 | + return var_val; |
| 1859 | + |
1857 | 1860 | elt_data = elt->private_data;
|
1858 | 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 | 3585 | struct track_data *track_data = tr->cond_snapshot->cond_data;
|
3583 | 3586 | struct hist_elt_data *elt_data, *track_elt_data;
|
3584 | 3587 | struct snapshot_context *context = cond_data;
|
| 3588 | + struct action_data *action; |
3585 | 3589 | u64 track_val;
|
3586 | 3590 |
|
3587 | 3591 | if (!track_data)
|
3588 | 3592 | return false;
|
3589 | 3593 |
|
| 3594 | + action = track_data->action_data; |
| 3595 | + |
3590 | 3596 | track_val = get_track_val(track_data->hist_data, context->elt,
|
3591 | 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 | 3602 | track_data->track_val = track_val;
|
3594 | 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 | 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 | 4516 | hist_err(tr, HIST_ERR_INVALID_REF_KEY, errpos(field_str));
|
4508 | 4517 | destroy_hist_field(hist_field, 0);
|
4509 | 4518 | ret = -EINVAL;
|
|
0 commit comments