All of lore.kernel.org
 help / color / mirror / Atom feed
From: Aaron Conole <aconole@redhat.com>
To: Thomas Monjalon <thomas@monjalon.net>
Cc: dev@dpdk.org,  tredaelli@redhat.com
Subject: Re: [PATCH 2/2] eal: fix build on FreeBSD
Date: Mon, 30 Apr 2018 09:17:10 -0400	[thread overview]
Message-ID: <f7tlgd47s15.fsf@dhcp-25.97.bos.redhat.com> (raw)
In-Reply-To: <20180427024342.24054-3-thomas@monjalon.net> (Thomas Monjalon's message of "Fri, 27 Apr 2018 04:43:42 +0200")

Thomas Monjalon <thomas@monjalon.net> writes:

> The auxiliary vector read is implemented only for Linux.
> It could be done with procstat_getauxv() for FreeBSD.
>
> Since the commit below, the auxiliary vector functions
> are compiled for every architectures, including x86
> which is tested with FreeBSD.
>
> This patch is only adding a fake/empty implementation
> of auxiliary vector read, for compilation on FreeBSD.
>
> Fixes: 2ed9bf330709 ("eal: abstract away the auxiliary vector")
> Cc: aconole@redhat.com
> Cc: tredaelli@redhat.com
>
> Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
> ---

Makes sense to me.  Thanks for fixing this up, Thomas.  Sorry for
turning it sideways.  I'll make sure to test on freebsd next time.

Acked-by: Aaron Conole <aconole@redhat.com>

>  lib/librte_eal/bsdapp/eal/Makefile                 |  1 +
>  lib/librte_eal/bsdapp/eal/eal_cpuflags.c           | 21 ++++++
>  lib/librte_eal/bsdapp/eal/meson.build              |  1 +
>  lib/librte_eal/common/eal_common_cpuflags.c        | 79 ----------------------
>  lib/librte_eal/linuxapp/eal/Makefile               |  1 +
>  .../eal/eal_cpuflags.c}                            | 47 +------------
>  lib/librte_eal/linuxapp/eal/meson.build            |  1 +
>  7 files changed, 26 insertions(+), 125 deletions(-)
>  create mode 100644 lib/librte_eal/bsdapp/eal/eal_cpuflags.c
>  copy lib/librte_eal/{common/eal_common_cpuflags.c => linuxapp/eal/eal_cpuflags.c} (61%)
>
> diff --git a/lib/librte_eal/bsdapp/eal/Makefile b/lib/librte_eal/bsdapp/eal/Makefile
> index 200285e01..3fd33f1e4 100644
> --- a/lib/librte_eal/bsdapp/eal/Makefile
> +++ b/lib/librte_eal/bsdapp/eal/Makefile
> @@ -25,6 +25,7 @@ LIBABIVER := 7
>  
>  # specific to bsdapp exec-env
>  SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) := eal.c
> +SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_cpuflags.c
>  SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_memory.c
>  SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_hugepage_info.c
>  SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += eal_thread.c
> diff --git a/lib/librte_eal/bsdapp/eal/eal_cpuflags.c b/lib/librte_eal/bsdapp/eal/eal_cpuflags.c
> new file mode 100644
> index 000000000..69b161ea6
> --- /dev/null
> +++ b/lib/librte_eal/bsdapp/eal/eal_cpuflags.c
> @@ -0,0 +1,21 @@
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * Copyright 2018 Mellanox Technologies, Ltd
> + */
> +
> +#include <rte_common.h>
> +#include <rte_cpuflags.h>
> +
> +unsigned long
> +rte_cpu_getauxval(unsigned long type __rte_unused)
> +{
> +	/* not implemented */
> +	return 0;
> +}
> +
> +int
> +rte_cpu_strcmp_auxval(unsigned long type __rte_unused,
> +		const char *str __rte_unused)
> +{
> +	/* not implemented */
> +	return -1;
> +}
> diff --git a/lib/librte_eal/bsdapp/eal/meson.build b/lib/librte_eal/bsdapp/eal/meson.build
> index 4c5611879..47e16a649 100644
> --- a/lib/librte_eal/bsdapp/eal/meson.build
> +++ b/lib/librte_eal/bsdapp/eal/meson.build
> @@ -4,6 +4,7 @@
>  env_objs = []
>  env_headers = []
>  env_sources = files('eal_alarm.c',
> +		'eal_cpuflags.c',
>  		'eal_debug.c',
>  		'eal_hugepage_info.c',
>  		'eal_interrupts.c',
> diff --git a/lib/librte_eal/common/eal_common_cpuflags.c b/lib/librte_eal/common/eal_common_cpuflags.c
> index 6a9dbaeb1..3a055f7c7 100644
> --- a/lib/librte_eal/common/eal_common_cpuflags.c
> +++ b/lib/librte_eal/common/eal_common_cpuflags.c
> @@ -2,90 +2,11 @@
>   * Copyright(c) 2010-2014 Intel Corporation
>   */
>  
> -#include <elf.h>
> -#include <fcntl.h>
>  #include <stdio.h>
> -#include <string.h>
> -#include <sys/stat.h>
> -#include <sys/types.h>
> -#include <unistd.h>
> -
> -#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)
> -#if __GLIBC_PREREQ(2, 16)
> -#include <sys/auxv.h>
> -#define HAS_AUXV 1
> -#endif
> -#endif
>  
>  #include <rte_common.h>
>  #include <rte_cpuflags.h>
>  
> -#ifndef HAS_AUXV
> -static unsigned long
> -getauxval(unsigned long type __rte_unused)
> -{
> -	errno = ENOTSUP;
> -	return 0;
> -}
> -#endif
> -
> -#ifdef RTE_ARCH_64
> -typedef Elf64_auxv_t Internal_Elfx_auxv_t;
> -#else
> -typedef Elf32_auxv_t Internal_Elfx_auxv_t;
> -#endif
> -
> -
> -/**
> - * Provides a method for retrieving values from the auxiliary vector and
> - * possibly running a string comparison.
> - *
> - * @return Always returns a result.  When the result is 0, check errno
> - * to see if an error occurred during processing.
> - */
> -static unsigned long
> -_rte_cpu_getauxval(unsigned long type, const char *str)
> -{
> -	unsigned long val;
> -
> -	errno = 0;
> -	val = getauxval(type);
> -
> -	if (!val && (errno == ENOTSUP || errno == ENOENT)) {
> -		int auxv_fd = open("/proc/self/auxv", O_RDONLY);
> -		Internal_Elfx_auxv_t auxv;
> -
> -		if (auxv_fd == -1)
> -			return 0;
> -
> -		errno = ENOENT;
> -		while (read(auxv_fd, &auxv, sizeof(auxv)) == sizeof(auxv)) {
> -			if (auxv.a_type == type) {
> -				errno = 0;
> -				val = auxv.a_un.a_val;
> -				if (str)
> -					val = strcmp((const char *)val, str);
> -				break;
> -			}
> -		}
> -		close(auxv_fd);
> -	}
> -
> -	return val;
> -}
> -
> -unsigned long
> -rte_cpu_getauxval(unsigned long type)
> -{
> -	return _rte_cpu_getauxval(type, NULL);
> -}
> -
> -int
> -rte_cpu_strcmp_auxval(unsigned long type, const char *str)
> -{
> -	return _rte_cpu_getauxval(type, str);
> -}
> -
>  /**
>   * Checks if the machine is adequate for running the binary. If it is not, the
>   * program exits with status 1.
> diff --git a/lib/librte_eal/linuxapp/eal/Makefile b/lib/librte_eal/linuxapp/eal/Makefile
> index 45517a27b..3719ec9d7 100644
> --- a/lib/librte_eal/linuxapp/eal/Makefile
> +++ b/lib/librte_eal/linuxapp/eal/Makefile
> @@ -30,6 +30,7 @@ endif
>  
>  # specific to linuxapp exec-env
>  SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) := eal.c
> +SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_cpuflags.c
>  SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_hugepage_info.c
>  SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_memory.c
>  SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += eal_thread.c
> diff --git a/lib/librte_eal/common/eal_common_cpuflags.c b/lib/librte_eal/linuxapp/eal/eal_cpuflags.c
> similarity index 61%
> copy from lib/librte_eal/common/eal_common_cpuflags.c
> copy to lib/librte_eal/linuxapp/eal/eal_cpuflags.c
> index 6a9dbaeb1..d38296e1e 100644
> --- a/lib/librte_eal/common/eal_common_cpuflags.c
> +++ b/lib/librte_eal/linuxapp/eal/eal_cpuflags.c
> @@ -1,10 +1,9 @@
>  /* SPDX-License-Identifier: BSD-3-Clause
> - * Copyright(c) 2010-2014 Intel Corporation
> + * Copyright 2018 Red Hat, Inc.
>   */
>  
>  #include <elf.h>
>  #include <fcntl.h>
> -#include <stdio.h>
>  #include <string.h>
>  #include <sys/stat.h>
>  #include <sys/types.h>
> @@ -17,7 +16,6 @@
>  #endif
>  #endif
>  
> -#include <rte_common.h>
>  #include <rte_cpuflags.h>
>  
>  #ifndef HAS_AUXV
> @@ -35,7 +33,6 @@ typedef Elf64_auxv_t Internal_Elfx_auxv_t;
>  typedef Elf32_auxv_t Internal_Elfx_auxv_t;
>  #endif
>  
> -
>  /**
>   * Provides a method for retrieving values from the auxiliary vector and
>   * possibly running a string comparison.
> @@ -85,45 +82,3 @@ rte_cpu_strcmp_auxval(unsigned long type, const char *str)
>  {
>  	return _rte_cpu_getauxval(type, str);
>  }
> -
> -/**
> - * Checks if the machine is adequate for running the binary. If it is not, the
> - * program exits with status 1.
> - */
> -void
> -rte_cpu_check_supported(void)
> -{
> -	if (!rte_cpu_is_supported())
> -		exit(1);
> -}
> -
> -int
> -rte_cpu_is_supported(void)
> -{
> -	/* This is generated at compile-time by the build system */
> -	static const enum rte_cpu_flag_t compile_time_flags[] = {
> -			RTE_COMPILE_TIME_CPUFLAGS
> -	};
> -	unsigned count = RTE_DIM(compile_time_flags), i;
> -	int ret;
> -
> -	for (i = 0; i < count; i++) {
> -		ret = rte_cpu_get_flag_enabled(compile_time_flags[i]);
> -
> -		if (ret < 0) {
> -			fprintf(stderr,
> -				"ERROR: CPU feature flag lookup failed with error %d\n",
> -				ret);
> -			return 0;
> -		}
> -		if (!ret) {
> -			fprintf(stderr,
> -			        "ERROR: This system does not support \"%s\".\n"
> -			        "Please check that RTE_MACHINE is set correctly.\n",
> -			        rte_cpu_get_flag_name(compile_time_flags[i]));
> -			return 0;
> -		}
> -	}
> -
> -	return 1;
> -}
> diff --git a/lib/librte_eal/linuxapp/eal/meson.build b/lib/librte_eal/linuxapp/eal/meson.build
> index 9c0193105..cce377122 100644
> --- a/lib/librte_eal/linuxapp/eal/meson.build
> +++ b/lib/librte_eal/linuxapp/eal/meson.build
> @@ -7,6 +7,7 @@ install_subdir('include/exec-env', install_dir: get_option('includedir'))
>  env_objs = []
>  env_headers = []
>  env_sources = files('eal_alarm.c',
> +		'eal_cpuflags.c',
>  		'eal_debug.c',
>  		'eal_hugepage_info.c',
>  		'eal_interrupts.c',

  reply	other threads:[~2018-04-30 13:17 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-27  2:43 [PATCH 0/2] fix compilation on FreeBSD Thomas Monjalon
2018-04-27  2:43 ` [PATCH 1/2] eal: fix build with glibc < 2.16 Thomas Monjalon
2018-04-30 13:13   ` Aaron Conole
2018-04-27  2:43 ` [PATCH 2/2] eal: fix build on FreeBSD Thomas Monjalon
2018-04-30 13:17   ` Aaron Conole [this message]
2018-04-27  9:03 ` [PATCH 0/2] fix compilation " Maxime Coquelin
2018-04-27  9:16   ` 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=f7tlgd47s15.fsf@dhcp-25.97.bos.redhat.com \
    --to=aconole@redhat.com \
    --cc=dev@dpdk.org \
    --cc=thomas@monjalon.net \
    --cc=tredaelli@redhat.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.