DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] The testpmd failed to parse RSS queue rules on fedora30
@ 2019-06-24 17:55 Wang, Haiyue
  2019-06-24 18:05 ` Wang, Haiyue
  0 siblings, 1 reply; 2+ messages in thread
From: Wang, Haiyue @ 2019-06-24 17:55 UTC (permalink / raw)
  To: dev

Hi,

After upgrading the Fedora29 to 30, then met the flow cmdline parse issue, like

testpmd> flow create 0 ingress pattern end actions rss queues 1 4 7 end / end
Bad arguments

After debug by adding bellow checking code:

diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index 201bd9de5..ea387d2ff 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -3398,8 +3398,10 @@ parse_vc_action_rss_queue(struct context *ctx, const struct token *token,
                                     i * sizeof(action_rss_data->queue[i]),
                                     sizeof(action_rss_data->queue[i]))))
                return -1;
+       printf("push_arg = %p\n", ctx->args[ctx->args_num - 1]);
        ret = parse_int(ctx, token, str, len, NULL, 0);
        if (ret < 0) {
+               printf("RSS queue: <%.*s> failed\n", len, str);
                pop_args(ctx);
                return -1;
        }
@@ -4349,6 +4351,10 @@ parse_int(struct context *ctx, const struct token *token,
        /* Argument is expected. */
        if (!arg)
                return -1;
+
+       printf("pop_arg = %p, arg->offset = %u, arg->size = %u\n",
+              arg, arg->offset, arg->size);
+


The output is:
pop_arg = 0x97b1c0, arg->offset = 4, arg->size = 2
push_arg = 0x7fffffff8080
pop_arg = 0x7fffffff8080, arg->offset = 5912737, arg->size = 0
RSS queue: <1> failed
Bad arguments

It indicates that queue number parsing failed. I wanted to dump the 'arg->offset'
in 'parse_vc_action_rss_queue' like:

static void dump_push_args(struct context *ctx)
{
        const struct arg *arg = pop_args(ctx);

        ctx->args_num++; /* recover */

        printf("push_arg = %p, arg->offset = %u, arg->size = %u\n", arg, arg->offset, arg->size);
}

or

static void dump_push_args(struct context *ctx)
{
	const struct arg *arg = (const struct arg *)ctx->args[ctx->args_num - 1];

	printf("push_arg = %p, arg->offset = %u, arg->size = %u\n", arg, arg->offset, arg->size);
}

Both of them failed to compile:

/root/dpdk/app/test-pmd/cmdline_flow.c: In function 'parse_vc_action_rss_queue':
/root/dpdk/app/test-pmd/cmdline_flow.c:3373:2: error: '<U6120>.size' may be used uninitialized in this function [-Werror=maybe-uninitialized]
 3373 |  printf("push_arg = %p, arg->offset = %u, arg->size = %u\n", arg, arg->offset, arg->size);
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/dpdk/app/test-pmd/cmdline_flow.c:3373:2: error: '<U6120>.offset' may be used uninitialized in this function [-Werror=maybe-uninitialized]
cc1: all warnings being treated as errors

So I only can dump the 'arg' pointer address, it looks OK, the same value, but the 'offset' and 'size' are wrong.

Does anyone suffer from this on fedora 30??

BR,
Haiyue


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [dpdk-dev] The testpmd failed to parse RSS queue rules on fedora30
  2019-06-24 17:55 [dpdk-dev] The testpmd failed to parse RSS queue rules on fedora30 Wang, Haiyue
@ 2019-06-24 18:05 ` Wang, Haiyue
  0 siblings, 0 replies; 2+ messages in thread
From: Wang, Haiyue @ 2019-06-24 18:05 UTC (permalink / raw)
  To: dev

More information is provided:

Fedora30 GCC: 
gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/9/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 9.1.1 20190503 (Red Hat 9.1.1-1) (GCC)

---

On Ubuntu 16.04, I can dump the arg's value like, no problem for compiling:

diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
index 201bd9d..cc1d41c 100644
--- a/app/test-pmd/cmdline_flow.c
+++ b/app/test-pmd/cmdline_flow.c
@@ -3378,6 +3378,7 @@ parse_vc_action_rss_queue(struct context *ctx, const struct token *token,
 {
        static const enum index next[] = NEXT_ENTRY(ACTION_RSS_QUEUE);
        struct action_rss_data *action_rss_data;
+       const struct arg *arg;
        int ret;
        int i;

@@ -3398,6 +3399,8 @@ parse_vc_action_rss_queue(struct context *ctx, const struct token *token,
                                     i * sizeof(action_rss_data->queue[i]),
                                     sizeof(action_rss_data->queue[i]))))
                return -1;
+       arg = (const struct arg *)ctx->args[ctx->args_num - 1];
+       printf("push_arg = %p, arg->offset = %u, arg->size = %u\n", arg, arg->offset, arg->size);
        ret = parse_int(ctx, token, str, len, NULL, 0);
        if (ret < 0) {
                pop_args(ctx);
@@ -4349,6 +4352,9 @@ parse_int(struct context *ctx, const struct token *token,
        /* Argument is expected. */
        if (!arg)
                return -1;
+
+       printf("pop_arg = %p, arg->offset = %u, arg->size = %u\n", arg, arg->offset, arg->size);
+

The output is as expected:

flow create 0 ingress pattern end actions rss queues 1 4 7 end / end
pop_arg = 0xa4de40, arg->offset = 4, arg->size = 2
push_arg = 0x7ffd83c3e6e0, arg->offset = 104, arg->size = 2
pop_arg = 0x7ffd83c3e6e0, arg->offset = 104, arg->size = 2
push_arg = 0x7ffd83c3e6e0, arg->offset = 106, arg->size = 2
pop_arg = 0x7ffd83c3e6e0, arg->offset = 106, arg->size = 2
push_arg = 0x7ffd83c3e6e0, arg->offset = 108, arg->size = 2
pop_arg = 0x7ffd83c3e6e0, arg->offset = 108, arg->size = 2
Flow rule #0 created

BR,
Haiyue


> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Wang, Haiyue
> Sent: Tuesday, June 25, 2019 01:56
> To: dev@dpdk.org
> Subject: [dpdk-dev] The testpmd failed to parse RSS queue rules on fedora30
> 
> Hi,
> 
> After upgrading the Fedora29 to 30, then met the flow cmdline parse issue, like
> 
> testpmd> flow create 0 ingress pattern end actions rss queues 1 4 7 end / end
> Bad arguments
> 
> After debug by adding bellow checking code:
> 
> diff --git a/app/test-pmd/cmdline_flow.c b/app/test-pmd/cmdline_flow.c
> index 201bd9de5..ea387d2ff 100644
> --- a/app/test-pmd/cmdline_flow.c
> +++ b/app/test-pmd/cmdline_flow.c
> @@ -3398,8 +3398,10 @@ parse_vc_action_rss_queue(struct context *ctx, const struct token *token,
>                                      i * sizeof(action_rss_data->queue[i]),
>                                      sizeof(action_rss_data->queue[i]))))
>                 return -1;
> +       printf("push_arg = %p\n", ctx->args[ctx->args_num - 1]);
>         ret = parse_int(ctx, token, str, len, NULL, 0);
>         if (ret < 0) {
> +               printf("RSS queue: <%.*s> failed\n", len, str);
>                 pop_args(ctx);
>                 return -1;
>         }
> @@ -4349,6 +4351,10 @@ parse_int(struct context *ctx, const struct token *token,
>         /* Argument is expected. */
>         if (!arg)
>                 return -1;
> +
> +       printf("pop_arg = %p, arg->offset = %u, arg->size = %u\n",
> +              arg, arg->offset, arg->size);
> +
> 
> 
> The output is:
> pop_arg = 0x97b1c0, arg->offset = 4, arg->size = 2
> push_arg = 0x7fffffff8080
> pop_arg = 0x7fffffff8080, arg->offset = 5912737, arg->size = 0
> RSS queue: <1> failed
> Bad arguments
> 
> It indicates that queue number parsing failed. I wanted to dump the 'arg->offset'
> in 'parse_vc_action_rss_queue' like:
> 
> static void dump_push_args(struct context *ctx)
> {
>         const struct arg *arg = pop_args(ctx);
> 
>         ctx->args_num++; /* recover */
> 
>         printf("push_arg = %p, arg->offset = %u, arg->size = %u\n", arg, arg->offset, arg->size);
> }
> 
> or
> 
> static void dump_push_args(struct context *ctx)
> {
> 	const struct arg *arg = (const struct arg *)ctx->args[ctx->args_num - 1];
> 
> 	printf("push_arg = %p, arg->offset = %u, arg->size = %u\n", arg, arg->offset, arg->size);
> }
> 
> Both of them failed to compile:
> 
> /root/dpdk/app/test-pmd/cmdline_flow.c: In function 'parse_vc_action_rss_queue':
> /root/dpdk/app/test-pmd/cmdline_flow.c:3373:2: error: '<U6120>.size' may be used uninitialized in this
> function [-Werror=maybe-uninitialized]
>  3373 |  printf("push_arg = %p, arg->offset = %u, arg->size = %u\n", arg, arg->offset, arg->size);
>       |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /root/dpdk/app/test-pmd/cmdline_flow.c:3373:2: error: '<U6120>.offset' may be used uninitialized in
> this function [-Werror=maybe-uninitialized]
> cc1: all warnings being treated as errors
> 
> So I only can dump the 'arg' pointer address, it looks OK, the same value, but the 'offset' and 'size'
> are wrong.
> 
> Does anyone suffer from this on fedora 30??
> 
> BR,
> Haiyue


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-06-24 18:05 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-24 17:55 [dpdk-dev] The testpmd failed to parse RSS queue rules on fedora30 Wang, Haiyue
2019-06-24 18:05 ` Wang, Haiyue

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).