Re: [PATCH] tracecmd: --poll option is not passed down to guest

Steven Rostedt <[email protected]> Thu, 4 Dec 2025 16:23:10 -0500
Newsgroups org.kernel.vger.linux-trace-devel
Message-ID <[email protected]>
On Fri, 24 Oct 2025 14:43:37 -0300
Marcelo Tosatti <[email protected]> wrote:

Hi Marcelo,

Sorry for the late reply. Unfortunately, trace-cmd updates is usually my
low priority task :-/

> --- a/tracecmd/trace-record.c
> +++ b/tracecmd/trace-record.c
> @@ -6220,9 +6220,16 @@ static void add_arg(struct buffer_instance *instance,
>  {
>  	char *ptr, *arg;
>  	int i, ret;
> +	int long_opt;
> +
> +	long_opt = 0;
> +	for (i = 0; long_options[i].name; i++) {
> +		if (long_options[i].val == c)
> +			long_opt = 1;
> +	}

I hate looking at every long option to determine if this is a long option
or not.

>  
>  	/* Short or long arg */
> -	if (!(c & 0x80)) {
> +	if (long_opt == 0) {
>  		ptr = strchr(opts, c);
>  		if (!ptr)
>  			return; /* Not found? */

What about this patch?

diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c
index 4e1157c99294..29938b1bb701 100644
--- a/tracecmd/trace-record.c
+++ b/tracecmd/trace-record.c
@@ -5932,36 +5932,39 @@ void init_top_instance(void)
 	init_instance(&top_instance);
 }
 
+#define LONG_OPT(opt)		(0x80 + ((opt) << 8))
+#define IS_LONG_OPT(opt)	((opt) & 0x80)
+
 enum {
-	OPT_compression		= 237,
-	OPT_file_ver		= 238,
-	OPT_verbose		= 239,
-	OPT_tsc2nsec		= 240,
-	OPT_fork		= 241,
-	OPT_tsyncinterval	= 242,
-	OPT_user		= 243,
-	OPT_procmap		= 244,
-	OPT_quiet		= 245,
-	OPT_debug		= 246,
-	OPT_no_filter		= 247,
-	OPT_max_graph_depth	= 248,
-	OPT_tsoffset		= 249,
-	OPT_bycomm		= 250,
-	OPT_stderr		= 251,
-	OPT_profile		= 252,
-	OPT_nosplice		= 253,
-	OPT_funcstack		= 254,
-	OPT_date		= 255,
-	OPT_module		= 256,
-	OPT_nofifos		= 257,
-	OPT_cmdlines_size	= 258,
-	OPT_poll		= 259,
-	OPT_name		= 260,
-	OPT_proxy		= 261,
-	OPT_temp		= 262,
-	OPT_notimeout		= 264,
-	OPT_daemonize		= 265,
-	OPT_subbuf		= 266,
+	OPT_compression		= LONG_OPT(0),
+	OPT_file_ver		= LONG_OPT(1),
+	OPT_verbose		= LONG_OPT(2),
+	OPT_tsc2nsec		= LONG_OPT(3),
+	OPT_fork		= LONG_OPT(4),
+	OPT_tsyncinterval	= LONG_OPT(5),
+	OPT_user		= LONG_OPT(6),
+	OPT_procmap		= LONG_OPT(7),
+	OPT_quiet		= LONG_OPT(8),
+	OPT_debug		= LONG_OPT(9),
+	OPT_no_filter		= LONG_OPT(10),
+	OPT_max_graph_depth	= LONG_OPT(11),
+	OPT_tsoffset		= LONG_OPT(12),
+	OPT_bycomm		= LONG_OPT(13),
+	OPT_stderr		= LONG_OPT(14),
+	OPT_profile		= LONG_OPT(15),
+	OPT_nosplice		= LONG_OPT(16),
+	OPT_funcstack		= LONG_OPT(17),
+	OPT_date		= LONG_OPT(18),
+	OPT_module		= LONG_OPT(19),
+	OPT_nofifos		= LONG_OPT(20),
+	OPT_cmdlines_size	= LONG_OPT(21),
+	OPT_poll		= LONG_OPT(22),
+	OPT_name		= LONG_OPT(23),
+	OPT_proxy		= LONG_OPT(24),
+	OPT_temp		= LONG_OPT(25),
+	OPT_notimeout		= LONG_OPT(26),
+	OPT_daemonize		= LONG_OPT(27),
+	OPT_subbuf		= LONG_OPT(28),
 };
 
 void trace_stop(int argc, char **argv)
@@ -6222,7 +6225,7 @@ static void add_arg(struct buffer_instance *instance,
 	int i, ret;
 
 	/* Short or long arg */
-	if (!(c & 0x80)) {
+	if (!IS_LONG_OPT(c)) {
 		ptr = strchr(opts, c);
 		if (!ptr)
 			return; /* Not found? */


-- Steve