All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masami Hiramatsu <mhiramat@kernel.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: linux-kernel@vger.kernel.org, Ingo Molnar <mingo@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Al Viro <viro@ZenIV.linux.org.uk>,
	Tom Zanussi <tom.zanussi@linux.intel.com>,
	Namhyung Kim <namhyung@kernel.org>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Jiri Olsa <jolsa@kernel.org>
Subject: Re: [PATCH 2/3] tracing: Clean up and document pred_funcs_##type creation and use
Date: Mon, 12 Mar 2018 22:42:22 +0900	[thread overview]
Message-ID: <20180312224222.da7bd18944b1e4649e53c247@kernel.org> (raw)
In-Reply-To: <20180310023907.664302683@goodmis.org>

On Fri, 09 Mar 2018 21:34:44 -0500
Steven Rostedt <rostedt@goodmis.org> wrote:

> From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
> 
> The pred_funcs_##type arrays consist of five functions that are assigned
> based on the ops. The array must be in the same order of the ops each
> function represents. The PRED_FUNC_START macro denotes the op enum that
> starts the op that maps to the pred_funcs_##type arrays. This is all very
> subtle and prone to bugs if the code is changed.
> 
> Add comments describing how PRED_FUNC_START and pred_funcs_##type array is
> used, and also a PRED_FUNC_MAX that is the maximum number of functions in
> the arrays.
> 
> Clean up select_comparison_fn() that assigns the predicates to the
> pred_funcs_##type array function as well as add protection in case an op is
> passed in that does not map correctly to the array.
> 

This looks good to me.

Reviewed-by: Masami Hiramatsu <mhiramat@kernel.org>

Thanks,

> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
> ---
>  kernel/trace/trace_events_filter.c | 46 ++++++++++++++++++++++++++------------
>  1 file changed, 32 insertions(+), 14 deletions(-)
> 
> diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
> index a2ef393b3bb2..9d383f4383dc 100644
> --- a/kernel/trace/trace_events_filter.c
> +++ b/kernel/trace/trace_events_filter.c
> @@ -65,6 +65,13 @@ struct filter_op {
>  
>  static struct filter_op filter_ops[] = { OPS };
>  
> +/*
> + * pred functions are OP_LT, OP_LE, OP_GT, OP_GE, and OP_BAND
> + * pred_funcs_##type below must match the order of them above.
> + */
> +#define PRED_FUNC_START			OP_LT
> +#define PRED_FUNC_MAX			(OP_BAND - PRED_FUNC_START)
> +
>  #define ERRORS								\
>  	C( NONE,	 	"No error"),				\
>  	C( INVALID_OP,		"Invalid operator"),			\
> @@ -172,8 +179,6 @@ static const filter_pred_fn_t pred_funcs_##type[] = {			\
>  	filter_pred_BAND_##type,					\
>  };
>  
> -#define PRED_FUNC_START			OP_LT
> -
>  #define DEFINE_EQUALITY_PRED(size)					\
>  static int filter_pred_##size(struct filter_pred *pred, void *event)	\
>  {									\
> @@ -946,39 +951,52 @@ static filter_pred_fn_t select_comparison_fn(enum filter_op_ids op,
>  					    int field_size, int field_is_signed)
>  {
>  	filter_pred_fn_t fn = NULL;
> +	int pred_func_index = -1;
> +
> +	switch (op) {
> +	case OP_EQ:
> +	case OP_NE:
> +		break;
> +	default:
> +		if (WARN_ON_ONCE(op < PRED_FUNC_START))
> +			return NULL;
> +		pred_func_index = op - PRED_FUNC_START;
> +		if (WARN_ON_ONCE(pred_func_index > PRED_FUNC_MAX))
> +			return NULL;
> +	}
>  
>  	switch (field_size) {
>  	case 8:
> -		if (op == OP_EQ || op == OP_NE)
> +		if (pred_func_index < 0)
>  			fn = filter_pred_64;
>  		else if (field_is_signed)
> -			fn = pred_funcs_s64[op - PRED_FUNC_START];
> +			fn = pred_funcs_s64[pred_func_index];
>  		else
> -			fn = pred_funcs_u64[op - PRED_FUNC_START];
> +			fn = pred_funcs_u64[pred_func_index];
>  		break;
>  	case 4:
> -		if (op == OP_EQ || op == OP_NE)
> +		if (pred_func_index < 0)
>  			fn = filter_pred_32;
>  		else if (field_is_signed)
> -			fn = pred_funcs_s32[op - PRED_FUNC_START];
> +			fn = pred_funcs_s32[pred_func_index];
>  		else
> -			fn = pred_funcs_u32[op - PRED_FUNC_START];
> +			fn = pred_funcs_u32[pred_func_index];
>  		break;
>  	case 2:
> -		if (op == OP_EQ || op == OP_NE)
> +		if (pred_func_index < 0)
>  			fn = filter_pred_16;
>  		else if (field_is_signed)
> -			fn = pred_funcs_s16[op - PRED_FUNC_START];
> +			fn = pred_funcs_s16[pred_func_index];
>  		else
> -			fn = pred_funcs_u16[op - PRED_FUNC_START];
> +			fn = pred_funcs_u16[pred_func_index];
>  		break;
>  	case 1:
> -		if (op == OP_EQ || op == OP_NE)
> +		if (pred_func_index < 0)
>  			fn = filter_pred_8;
>  		else if (field_is_signed)
> -			fn = pred_funcs_s8[op - PRED_FUNC_START];
> +			fn = pred_funcs_s8[pred_func_index];
>  		else
> -			fn = pred_funcs_u8[op - PRED_FUNC_START];
> +			fn = pred_funcs_u8[pred_func_index];
>  		break;
>  	}
>  
> -- 
> 2.15.1
> 
> 


-- 
Masami Hiramatsu <mhiramat@kernel.org>

  reply	other threads:[~2018-03-12 13:42 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-10  2:34 [PATCH 0/3] tracing: Rewrite the function filter code Steven Rostedt
2018-03-10  2:34 ` [PATCH 1/3] tracing: Combine enum and arrays into single macro in " Steven Rostedt
2018-03-12 10:31   ` Masami Hiramatsu
2018-03-10  2:34 ` [PATCH 2/3] tracing: Clean up and document pred_funcs_##type creation and use Steven Rostedt
2018-03-12 13:42   ` Masami Hiramatsu [this message]
2018-03-10  2:34 ` [PATCH 3/3] tracing: Rewrite filter logic to be simpler and faster Steven Rostedt
2018-03-10  3:10   ` Steven Rostedt
2018-03-10  3:10     ` Steven Rostedt
2018-03-10  3:15     ` Steven Rostedt
2018-03-10  3:15       ` Steven Rostedt
2018-03-10  3:22       ` Steven Rostedt
2018-03-10  3:22         ` Steven Rostedt
2018-03-10  3:18   ` Steven Rostedt
2018-03-12 12:42   ` Jiri Olsa
2018-03-12 18:38     ` Steven Rostedt
2018-03-12 15:10   ` Jiri Olsa
2018-03-12 18:40     ` Steven Rostedt
2018-03-12 18:54       ` Jiri Olsa
2018-03-12 19:10         ` Steven Rostedt
2018-03-12 23:52         ` Steven Rostedt
2018-03-13 10:14           ` Jiri Olsa
2018-03-13 14:12             ` Steven Rostedt
2018-03-13 14:27               ` Jiri Olsa
2018-03-11 19:54 ` [PATCH 0/3] tracing: Rewrite the function filter code Jiri Olsa
  -- strict thread matches above, loose matches on Subject: below --
2018-03-09 20:05 [PATCH v3] kernel.h: Skip single-eval logic on literals in min()/max() Kees Cook
2018-03-09 20:05 ` Kees Cook
2018-03-09 21:10 ` Linus Torvalds
2018-03-09 21:10   ` Linus Torvalds
2018-03-09 21:47   ` Kees Cook
2018-03-09 21:47     ` Kees Cook
2018-03-11 22:46   ` Tobin C. Harding
2018-03-11 22:46     ` Tobin C. Harding
2018-03-11 22:46     ` Tobin C. Harding
2018-03-13 13:31   ` David Laight
2018-03-13 13:31     ` David Laight
2018-03-10  0:07 ` Andrew Morton
2018-03-10  0:07   ` Andrew Morton
2018-03-10  0:28   ` Linus Torvalds
2018-03-10  0:28     ` Linus Torvalds
2018-03-10  0:32     ` Andrew Morton
2018-03-10  0:32       ` Andrew Morton
2018-03-10  0:38       ` Linus Torvalds
2018-03-10  0:38         ` Linus Torvalds
2018-03-10  1:30         ` Kees Cook
2018-03-10  1:30           ` Kees Cook
2018-03-10  1:31           ` Kees Cook
2018-03-10  1:31             ` Kees Cook
2018-03-10  2:37             ` Linus Torvalds
2018-03-10  2:37               ` Linus Torvalds
2018-03-12 22:55           ` Andrew Morton
2018-03-12 22:55             ` Andrew Morton
2018-03-12 23:57             ` Linus Torvalds
2018-03-12 23:57               ` Linus Torvalds
2018-03-13  4:28               ` Kees Cook
2018-03-13  4:28                 ` Kees Cook
2018-03-13 21:02                 ` Andrew Morton
2018-03-13 21:02                   ` Andrew Morton
2018-03-13 22:14                   ` Kees Cook
2018-03-13 22:14                     ` Kees Cook
2018-03-14 11:35                     ` David Laight
2018-03-14 11:35                       ` David Laight
2018-03-10  3:11   ` Randy Dunlap
2018-03-10  3:11     ` Randy Dunlap
2018-03-10  6:10     ` Miguel Ojeda
2018-03-10  6:10       ` Miguel Ojeda
2018-03-10  7:03       ` Miguel Ojeda
2018-03-10  7:03         ` Miguel Ojeda
2018-03-10 16:04         ` Linus Torvalds
2018-03-10 16:04           ` Linus Torvalds
2018-03-10 15:33       ` Kees Cook
2018-03-10 15:33         ` Kees Cook
2018-03-10 16:11         ` Linus Torvalds
2018-03-10 16:11           ` Linus Torvalds
2018-03-10 16:30         ` Linus Torvalds
2018-03-10 16:30           ` Linus Torvalds
2018-03-10 17:34           ` Miguel Ojeda
2018-03-10 17:34             ` Miguel Ojeda
2018-03-10 17:51             ` Linus Torvalds
2018-03-10 17:51               ` Linus Torvalds
2018-03-10 19:08               ` Miguel Ojeda
2018-03-10 19:08                 ` Miguel Ojeda
2018-03-11 11:05               ` Ingo Molnar
2018-03-11 11:05                 ` Ingo Molnar
2018-03-11 18:23                 ` Linus Torvalds
2018-03-11 18:23                   ` Linus Torvalds

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180312224222.da7bd18944b1e4649e53c247@kernel.org \
    --to=mhiramat@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=tom.zanussi@linux.intel.com \
    --cc=viro@ZenIV.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.