All of lore.kernel.org
 help / color / mirror / Atom feed
From: Aaron Conole <aconole@redhat.com>
To: Bruce Richardson <bruce.richardson@intel.com>
Cc: konstantin.ananyev@intel.com,  dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH 1/2] acl: remove use of weak functions
Date: Wed, 10 Apr 2019 09:54:02 -0400	[thread overview]
Message-ID: <f7ttvf6ezk5.fsf@dhcp-25.97.bos.redhat.com> (raw)
In-Reply-To: <20190410134517.63896-2-bruce.richardson@intel.com> (Bruce Richardson's message of "Wed, 10 Apr 2019 14:45:16 +0100")

Bruce Richardson <bruce.richardson@intel.com> writes:

> Weak functions don't work well with static libraries and require the use of
> "whole-archive" flag to ensure that the correct function is used when
> linking. Since the weak functions are only used as placeholders within
> this library alone, we can replace them with non-weak functions using
> preprocessor ifdefs.
>
> Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
> ---
>  lib/librte_acl/meson.build |  7 ++++++-
>  lib/librte_acl/rte_acl.c   | 18 ++++++++++++++----
>  mk/rte.app.mk              |  3 ---
>  3 files changed, 20 insertions(+), 8 deletions(-)
>
> diff --git a/lib/librte_acl/meson.build b/lib/librte_acl/meson.build
> index 2207dbafe..98ece7d85 100644
> --- a/lib/librte_acl/meson.build
> +++ b/lib/librte_acl/meson.build
> @@ -6,7 +6,7 @@ sources = files('acl_bld.c', 'acl_gen.c', 'acl_run_scalar.c',
>  		'rte_acl.c', 'tb_mem.c')
>  headers = files('rte_acl.h', 'rte_acl_osdep.h')
>  
> -if arch_subdir == 'x86'
> +if dpdk_conf.has('RTE_ARCH_X86')
>  	sources += files('acl_run_sse.c')
>  
>  	# compile AVX2 version if either:
> @@ -28,4 +28,9 @@ if arch_subdir == 'x86'
>  		cflags += '-DCC_AVX2_SUPPORT'
>  	endif
>  
> +elif dpdk_conf.has('RTE_ARCH_ARM') or dpdk_conf.has('RTE_ARCH_ARM64')
> +	cflags += '-flax-vector-conversions'
> +	sources += files('acl_run_neon.c')

This will also need -Wno-uninitialized (otherwise it will generate
warnings about the search_neon_4 and search_neon_8 functions).

But I don't like papering over these conversions.  I'd prefer instead
the patches I posted at:

http://mails.dpdk.org/archives/dev/2019-April/129540.html
and
http://mails.dpdk.org/archives/dev/2019-April/129541.html

Are you opposed to merging those?

> +elif dpdk_conf.has('RTE_ARCH_PPC_64')
> +	sources += files('acl_run_altivec.c')
>  endif
> diff --git a/lib/librte_acl/rte_acl.c b/lib/librte_acl/rte_acl.c
> index c436a9bfd..fd5bd5e4e 100644
> --- a/lib/librte_acl/rte_acl.c
> +++ b/lib/librte_acl/rte_acl.c
> @@ -13,11 +13,13 @@ static struct rte_tailq_elem rte_acl_tailq = {
>  };
>  EAL_REGISTER_TAILQ(rte_acl_tailq)
>  
> +#ifndef RTE_ARCH_X86
> +#ifndef CC_AVX2_SUPPORT
>  /*
>   * If the compiler doesn't support AVX2 instructions,
>   * then the dummy one would be used instead for AVX2 classify method.
>   */
> -__rte_weak int
> +int
>  rte_acl_classify_avx2(__rte_unused const struct rte_acl_ctx *ctx,
>  	__rte_unused const uint8_t **data,
>  	__rte_unused uint32_t *results,
> @@ -26,8 +28,9 @@ rte_acl_classify_avx2(__rte_unused const struct rte_acl_ctx *ctx,
>  {
>  	return -ENOTSUP;
>  }
> +#endif
>  
> -__rte_weak int
> +int
>  rte_acl_classify_sse(__rte_unused const struct rte_acl_ctx *ctx,
>  	__rte_unused const uint8_t **data,
>  	__rte_unused uint32_t *results,
> @@ -36,8 +39,11 @@ rte_acl_classify_sse(__rte_unused const struct rte_acl_ctx *ctx,
>  {
>  	return -ENOTSUP;
>  }
> +#endif
>  
> -__rte_weak int
> +#ifndef RTE_ARCH_ARM
> +#ifndef RTE_ARCH_ARM64
> +int
>  rte_acl_classify_neon(__rte_unused const struct rte_acl_ctx *ctx,
>  	__rte_unused const uint8_t **data,
>  	__rte_unused uint32_t *results,
> @@ -46,8 +52,11 @@ rte_acl_classify_neon(__rte_unused const struct rte_acl_ctx *ctx,
>  {
>  	return -ENOTSUP;
>  }
> +#endif
> +#endif
>  
> -__rte_weak int
> +#ifndef RTE_ARCH_PPC_64
> +int
>  rte_acl_classify_altivec(__rte_unused const struct rte_acl_ctx *ctx,
>  	__rte_unused const uint8_t **data,
>  	__rte_unused uint32_t *results,
> @@ -56,6 +65,7 @@ rte_acl_classify_altivec(__rte_unused const struct rte_acl_ctx *ctx,
>  {
>  	return -ENOTSUP;
>  }
> +#endif
>  
>  static const rte_acl_classify_t classify_fns[] = {
>  	[RTE_ACL_CLASSIFY_DEFAULT] = rte_acl_classify_scalar,
> diff --git a/mk/rte.app.mk b/mk/rte.app.mk
> index 7d994bece..fdec636b4 100644
> --- a/mk/rte.app.mk
> +++ b/mk/rte.app.mk
> @@ -46,10 +46,7 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_DISTRIBUTOR)    += -lrte_distributor
>  _LDLIBS-$(CONFIG_RTE_LIBRTE_IP_FRAG)        += -lrte_ip_frag
>  _LDLIBS-$(CONFIG_RTE_LIBRTE_METER)          += -lrte_meter
>  _LDLIBS-$(CONFIG_RTE_LIBRTE_LPM)            += -lrte_lpm
> -# librte_acl needs --whole-archive because of weak functions
> -_LDLIBS-$(CONFIG_RTE_LIBRTE_ACL)            += --whole-archive
>  _LDLIBS-$(CONFIG_RTE_LIBRTE_ACL)            += -lrte_acl
> -_LDLIBS-$(CONFIG_RTE_LIBRTE_ACL)            += --no-whole-archive
>  _LDLIBS-$(CONFIG_RTE_LIBRTE_TELEMETRY)      += --no-as-needed
>  _LDLIBS-$(CONFIG_RTE_LIBRTE_TELEMETRY)      += --whole-archive
>  _LDLIBS-$(CONFIG_RTE_LIBRTE_TELEMETRY)      += -lrte_telemetry -ljansson

I think I have a solution for this that can use the weak aliasing and
not require the use of the whole-archive flag.  Would you prefer that?

  reply	other threads:[~2019-04-10 13:54 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-10 13:45 [dpdk-dev] [PATCH 0/2] remove use of weak functions from libraries Bruce Richardson
2019-04-10 13:45 ` [dpdk-dev] [PATCH 1/2] acl: remove use of weak functions Bruce Richardson
2019-04-10 13:54   ` Aaron Conole [this message]
2019-04-10 14:02     ` Bruce Richardson
2019-04-10 14:08       ` Aaron Conole
2019-04-10 14:57   ` Ananyev, Konstantin
2019-04-10 13:45 ` [dpdk-dev] [PATCH 2/2] bpf: " Bruce Richardson
2019-04-10 14:07   ` Aaron Conole
2019-04-10 14:27     ` Bruce Richardson
2019-04-10 14:57   ` Ananyev, Konstantin
2019-05-27 14:13 ` [dpdk-dev] [PATCH 0/2] remove use of weak functions from libraries David Marchand
2019-05-27 15:41   ` Bruce Richardson
2019-05-27 20:57     ` Aaron Conole
2019-05-28  8:06       ` Bruce Richardson
2019-06-05 14:41 ` Thomas Monjalon

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=f7ttvf6ezk5.fsf@dhcp-25.97.bos.redhat.com \
    --to=aconole@redhat.com \
    --cc=bruce.richardson@intel.com \
    --cc=dev@dpdk.org \
    --cc=konstantin.ananyev@intel.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.