mirror of
				https://github.com/linuxkit/linuxkit.git
				synced 2025-10-31 01:08:46 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 4e6b8c51250139dc151df4e91c1925726b1bb969 Mon Sep 17 00:00:00 2001
 | |
| From: Tom Zanussi <tom.zanussi@linux.intel.com>
 | |
| Date: Wed, 28 Mar 2018 15:10:55 -0500
 | |
| Subject: [PATCH 122/418] tracing: Add action comparisons when testing matching
 | |
|  hist triggers
 | |
| 
 | |
| Actions also need to be considered when checking for matching triggers
 | |
| - triggers differing only by action should be allowed, but currently
 | |
| aren't because the matching check ignores the action and erroneously
 | |
| returns -EEXIST.
 | |
| 
 | |
| Add and call an actions_match() function to address that.
 | |
| 
 | |
| Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
 | |
| Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
 | |
| ---
 | |
|  kernel/trace/trace_events_hist.c | 50 ++++++++++++++++++++++++++++++++
 | |
|  1 file changed, 50 insertions(+)
 | |
| 
 | |
| diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
 | |
| index 9def33acb5eb..514ec0b31eed 100644
 | |
| --- a/kernel/trace/trace_events_hist.c
 | |
| +++ b/kernel/trace/trace_events_hist.c
 | |
| @@ -4363,6 +4363,53 @@ static void print_onmatch_spec(struct seq_file *m,
 | |
|  	seq_puts(m, ")");
 | |
|  }
 | |
|  
 | |
| +static bool actions_match(struct hist_trigger_data *hist_data,
 | |
| +			  struct hist_trigger_data *hist_data_test)
 | |
| +{
 | |
| +	unsigned int i, j;
 | |
| +
 | |
| +	if (hist_data->n_actions != hist_data_test->n_actions)
 | |
| +		return false;
 | |
| +
 | |
| +	for (i = 0; i < hist_data->n_actions; i++) {
 | |
| +		struct action_data *data = hist_data->actions[i];
 | |
| +		struct action_data *data_test = hist_data_test->actions[i];
 | |
| +
 | |
| +		if (data->fn != data_test->fn)
 | |
| +			return false;
 | |
| +
 | |
| +		if (data->n_params != data_test->n_params)
 | |
| +			return false;
 | |
| +
 | |
| +		for (j = 0; j < data->n_params; j++) {
 | |
| +			if (strcmp(data->params[j], data_test->params[j]) != 0)
 | |
| +				return false;
 | |
| +		}
 | |
| +
 | |
| +		if (data->fn == action_trace) {
 | |
| +			if (strcmp(data->onmatch.synth_event_name,
 | |
| +				   data_test->onmatch.synth_event_name) != 0)
 | |
| +				return false;
 | |
| +			if (strcmp(data->onmatch.match_event_system,
 | |
| +				   data_test->onmatch.match_event_system) != 0)
 | |
| +				return false;
 | |
| +			if (strcmp(data->onmatch.match_event,
 | |
| +				   data_test->onmatch.match_event) != 0)
 | |
| +				return false;
 | |
| +		} else if (data->fn == onmax_save) {
 | |
| +			if (strcmp(data->onmax.var_str,
 | |
| +				   data_test->onmax.var_str) != 0)
 | |
| +				return false;
 | |
| +			if (strcmp(data->onmax.fn_name,
 | |
| +				   data_test->onmax.fn_name) != 0)
 | |
| +				return false;
 | |
| +		}
 | |
| +	}
 | |
| +
 | |
| +	return true;
 | |
| +}
 | |
| +
 | |
| +
 | |
|  static void print_actions_spec(struct seq_file *m,
 | |
|  			       struct hist_trigger_data *hist_data)
 | |
|  {
 | |
| @@ -5175,6 +5222,9 @@ static bool hist_trigger_match(struct event_trigger_data *data,
 | |
|  	    (strcmp(data->filter_str, data_test->filter_str) != 0))
 | |
|  		return false;
 | |
|  
 | |
| +	if (!actions_match(hist_data, hist_data_test))
 | |
| +		return false;
 | |
| +
 | |
|  	return true;
 | |
|  }
 | |
|  
 | |
| -- 
 | |
| 2.17.1
 | |
| 
 |