From patchwork Fri Apr 27 02:43:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Monjalon X-Patchwork-Id: 39078 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 93B607EEF; Fri, 27 Apr 2018 04:43:56 +0200 (CEST) Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) by dpdk.org (Postfix) with ESMTP id 763837CDA for ; Fri, 27 Apr 2018 04:43:50 +0200 (CEST) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 24F8821CAF; Thu, 26 Apr 2018 22:43:50 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute1.internal (MEProxy); Thu, 26 Apr 2018 22:43:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h= cc:date:from:in-reply-to:message-id:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=mesmtp; bh=FTIL8XrgYT49zh X9xU3ozPqcS9hHyAY3YzzR+tFZPd0=; b=XfKbnbHzLIPzST32kIT6qShWa963dR huCIfubzb2yJnb0MgNi8FuBFYYsBSMX1ayd2LN9I3M7ALXANq4yz+27tjNqT5X/E wp1EVes+iG19Q6fRnxlgJ3GXeYb3OvMuIVY7ciac662sb13l32WWKaHyPCgCOgrn 48RU98qxQaBe4= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=FTIL8XrgYT49zhX9xU3ozPqcS9hHyAY3YzzR+tFZPd0=; b=PF3EGheR CnfUghWqw0dlOl0BRsoUav6jWr0IidR0vQAEgPEytkgn+kflnQPHcpawMMOlpaB0 JUqeC2wCfjrC/Zlig+bLFi8lOmF65a0A3f+8MzAemtpBxZOAESq/RdfFJgS5C2mk AAnG+zyc07VKxjR6YQeOR9RnbKrEtAt3jLcoY+B0lS1/2/fyLkJXI2mCbbKu2zjS zPtp2Dha38extDW4eEnMiaB894wOIhA9TJDJywheJgPOBPYUmJkw5FOErlspzqT3 pcl3POYyqRYSzeQbmqyswXgHHd9rO58deCbFOb0dMn/R0X4fDflBOLX0PItYg0sE eVVyuIRRzZfSuQ== X-ME-Sender: Received: from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184]) by mail.messagingengine.com (Postfix) with ESMTPA id 6A5BAE4488; Thu, 26 Apr 2018 22:43:49 -0400 (EDT) From: Thomas Monjalon To: dev@dpdk.org Cc: aconole@redhat.com, tredaelli@redhat.com Date: Fri, 27 Apr 2018 04:43:42 +0200 Message-Id: <20180427024342.24054-3-thomas@monjalon.net> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180427024342.24054-1-thomas@monjalon.net> References: <20180427024342.24054-1-thomas@monjalon.net> Subject: [dpdk-dev] [PATCH 2/2] eal: fix build on FreeBSD X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 Acked-by: Aaron Conole --- 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 +#include + +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 -#include #include -#include -#include -#include -#include - -#if defined(__GLIBC__) && defined(__GLIBC_PREREQ) -#if __GLIBC_PREREQ(2, 16) -#include -#define HAS_AUXV 1 -#endif -#endif #include #include -#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 #include -#include #include #include #include @@ -17,7 +16,6 @@ #endif #endif -#include #include #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',