All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konstantin Ananyev <konstantin.v.ananyev@yandex.ru>
To: Stanislaw Kardach <kda@semihalf.com>,
	Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Cc: dev@dpdk.org, Frank Zhao <Frank.Zhao@starfivetech.com>,
	Sam Grove <sam.grove@sifive.com>,
	mw@semihalf.com, upstream@semihalf.com
Subject: Re: [PATCH v2 1/1] test/ring: remove excessive inlining
Date: Thu, 19 May 2022 23:50:48 +0100	[thread overview]
Message-ID: <80ec6716-a94d-0146-cbad-63081386f5b4@yandex.ru> (raw)
In-Reply-To: <20220511150725.744021-1-kda@semihalf.com>

11/05/2022 16:07, Stanislaw Kardach пишет:
> Forcing inlining in test_ring_enqueue and test_ring_dequeue can cause
> the compiled code to grow extensively when compiled with no optimization
> (-O0 or -Og). This is default in the meson's debug configuration. This
> can collide with compiler bugs and cause issues during linking of unit
> tests where the api_type or esize are non-const variables causing
> inlining cascade. In perf tests this is not the case in perf-tests as
> esize and api_type are const values.
> 
> One such case was discovered when porting DPDK to RISC-V. GCC 11.2 (and
> no fix still in 12.1) is generating a short relative jump instruction
> (J <offset>) for goto and for loops. When loop body grows extensively in
> ring test, the target offset goes beyond supported offfset of +/- 1MB
> from PC. This is an obvious bug in the GCC as RISC-V has a
> two-instruction construct to jump to any absolute address (AUIPC+JALR).
> 
> However there is no reason to force inlining as the test code works
> perfectly fine without it.
> 
> GCC has a bug report for a similar case (with conditionals):
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93062
> 
> Fixes: a9fe152363 test/ring: add custom element size functional tests
> 
> Signed-off-by: Stanislaw Kardach <kda@semihalf.com>
> ---
>   app/test/test_ring.h | 6 +++---
>   1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/app/test/test_ring.h b/app/test/test_ring.h
> index c8bfec8399..45c263f3ff 100644
> --- a/app/test/test_ring.h
> +++ b/app/test/test_ring.h
> @@ -97,7 +97,7 @@ test_ring_copy_from(struct rte_ring_zc_data *zcd, void *dst, int esize,
>   	}
>   }
>   
> -static __rte_always_inline unsigned int
> +static inline unsigned int
>   test_ring_enqueue(struct rte_ring *r, void **obj, int esize, unsigned int n,
>   			unsigned int api_type)
>   {
> @@ -158,7 +158,7 @@ test_ring_enqueue(struct rte_ring *r, void **obj, int esize, unsigned int n,
>   		}
>   }
>   
> -static __rte_always_inline unsigned int
> +static inline unsigned int
>   test_ring_dequeue(struct rte_ring *r, void **obj, int esize, unsigned int n,
>   			unsigned int api_type)
>   {
> @@ -222,7 +222,7 @@ test_ring_dequeue(struct rte_ring *r, void **obj, int esize, unsigned int n,
>   /* This function is placed here as it is required for both
>    * performance and functional tests.
>    */
> -static __rte_always_inline void *
> +static inline void *
>   test_ring_calloc(unsigned int rsize, int esize)
>   {
>   	unsigned int sz;

Acked-by: Konstantin Ananyev <konstantin.v.ananyev@yandex.ru>


      parent reply	other threads:[~2022-05-19 22:52 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-10 11:57 [PATCH 1/1] test/ring: remove excessive inlining Stanislaw Kardach
2022-05-10 23:23 ` Honnappa Nagarahalli
2022-05-11  9:14   ` Bruce Richardson
2022-05-11 14:39   ` Stanisław Kardach
2022-05-11 15:07 ` [PATCH v2 " Stanislaw Kardach
2022-05-11 15:48   ` Bruce Richardson
2022-05-23 13:31     ` David Marchand
2022-05-11 16:51   ` Honnappa Nagarahalli
2022-05-19 22:50   ` Konstantin Ananyev [this message]

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=80ec6716-a94d-0146-cbad-63081386f5b4@yandex.ru \
    --to=konstantin.v.ananyev@yandex.ru \
    --cc=Frank.Zhao@starfivetech.com \
    --cc=dev@dpdk.org \
    --cc=honnappa.nagarahalli@arm.com \
    --cc=kda@semihalf.com \
    --cc=mw@semihalf.com \
    --cc=sam.grove@sifive.com \
    --cc=upstream@semihalf.com \
    /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.