From f5bf02df3145f95b1ee8ed9dee67f4222ac42c8c Mon Sep 17 00:00:00 2001 From: Ori Kam Date: Thu, 30 Apr 2020 14:22:14 +0000 Subject: [PATCH] eal/ppc: fix bool type after altivec include The AltiVec header file breaks boolean type. [1] [2] Currently the workaround was located only in mlx5 device. Adding the trace module caused this issue to appear again, due to order of includes, it keeps overriding the local fix. This patch solves this issue by resetting the bool type, immediately after it is being changed. [1] https://mails.dpdk.org/archives/dev/2018-August/110281.html [2] In file included from dpdk/ppc_64-power8-linux-gcc/include/rte_mempool_trace_fp.h:18:0, from dpdk/ppc_64-power8-linux-gcc/include/rte_mempool.h:54, from dpdk/drivers/common/mlx5/mlx5_common_mr.c:7: dpdk/ppc_64-power8-linux-gcc/include/rte_trace_point.h: In function '__rte_trace_point_fp_is_enabled': dpdk/ppc_64-power8-linux-gcc/include/rte_trace_point.h:226:2: error: incompatible types when returning type 'int' but '__vector __bool int' was expected return false; ^ In file included from dpdk/ppc_64-power8-linux-gcc/include/rte_trace_point.h:281:0, from dpdk/ppc_64-power8-linux-gcc/include/rte_mempool_trace_fp.h:18, from dpdk/ppc_64-power8-linux-gcc/include/rte_mempool.h:54, from dpdk/drivers/common/mlx5/mlx5_common_mr.c:7: dpdk/ppc_64-power8-linux-gcc/include/rte_mempool_trace_fp.h: In function 'rte_mempool_trace_ops_dequeue_bulk': dpdk/ppc_64-power8-linux-gcc/include/rte_trace_point_provider.h:104:6: error: wrong type argument to unary exclamation mark if (!__rte_trace_point_fp_is_enabled()) \ ^ dpdk/ppc_64-power8-linux-gcc/include/rte_trace_point.h:49:2: note: in expansion of macro '__rte_trace_point_emit_header_fp' __rte_trace_point_emit_header_##_mode(&__##_tp); \ ^ dpdk/ppc_64-power8-linux-gcc/include/rte_trace_point.h:99:2: note: in expansion of macro '__RTE_TRACE_POINT' __RTE_TRACE_POINT(fp, tp, args, __VA_ARGS__) ^ dpdk/ppc_64-power8-linux-gcc/include/rte_mempool_trace_fp.h:20:1: note: in expansion of macro 'RTE_TRACE_POINT_FP' RTE_TRACE_POINT_FP( ^ dpdk/ppc_64-power8-linux-gcc/include/rte_mempool_trace_fp.h: In function 'rte_mempool_trace_ops_dequeue_contig_blocks': dpdk/ppc_64-power8-linux-gcc/include/rte_trace_point_provider.h:104:6: error: wrong type argument to unary exclamation mark if (!__rte_trace_point_fp_is_enabled()) \ ^ dpdk/ppc_64-power8-linux-gcc/include/rte_trace_point.h:49:2: note: in expansion of macro '__rte_trace_point_emit_header_fp' __rte_trace_point_emit_header_##_mode(&__##_tp); \ ^ dpdk/ppc_64-power8-linux-gcc/include/rte_trace_point.h:99:2: note: in expansion of macro '__RTE_TRACE_POINT' __RTE_TRACE_POINT(fp, tp, args, __VA_ARGS__) ^ dpdk/ppc_64-power8-linux-gcc/include/rte_mempool_trace_fp.h:29:1: note: in expansion of macro 'RTE_TRACE_POINT_FP' RTE_TRACE_POINT_FP( ^ dpdk/ppc_64-power8-linux-gcc/include/rte_mempool_trace_fp.h: In function 'rte_mempool_trace_ops_enqueue_bulk': dpdk/ppc_64-power8-linux-gcc/include/rte_trace_point_provider.h:104:6: error: wrong type argument to unary exclamation mark if (!__rte_trace_point_fp_is_enabled()) \ Fixes: 725f5dd0bfb5 ("net/mlx5: fix build on PPC64") Signed-off-by: Ori Kam Signed-off-by: David Christensen Tested-by: David Christensen Tested-by: Raslan Darawsheh Acked-by: Matan Azrad --- drivers/common/mlx5/mlx5_common.h | 10 --------- drivers/net/i40e/i40e_rxtx_vec_altivec.c | 2 +- drivers/net/mlx5/mlx5_rxtx_vec_altivec.h | 2 +- drivers/net/mlx5/mlx5_utils.h | 10 --------- .../net/virtio/virtio_rxtx_simple_altivec.c | 3 +-- lib/librte_eal/ppc/include/meson.build | 1 + lib/librte_eal/ppc/include/rte_altivec.h | 22 +++++++++++++++++++ lib/librte_eal/ppc/include/rte_memcpy.h | 4 ++-- lib/librte_eal/ppc/include/rte_vect.h | 2 +- 9 files changed, 29 insertions(+), 27 deletions(-) create mode 100644 lib/librte_eal/ppc/include/rte_altivec.h diff --git a/drivers/common/mlx5/mlx5_common.h b/drivers/common/mlx5/mlx5_common.h index 16de1b3973..c2d688a9b3 100644 --- a/drivers/common/mlx5/mlx5_common.h +++ b/drivers/common/mlx5/mlx5_common.h @@ -17,16 +17,6 @@ #include "mlx5_prm.h" -/* - * Compilation workaround for PPC64 when AltiVec is fully enabled, e.g. std=c11. - * Otherwise there would be a type conflict between stdbool and altivec. - */ -#if defined(__PPC64__) && !defined(__APPLE_ALTIVEC__) -#undef bool -/* redefine as in stdbool.h */ -#define bool _Bool -#endif - /* Bit-field manipulation. */ #define BITFIELD_DECLARE(bf, type, size) \ type bf[(((size_t)(size) / (sizeof(type) * CHAR_BIT)) + \ diff --git a/drivers/net/i40e/i40e_rxtx_vec_altivec.c b/drivers/net/i40e/i40e_rxtx_vec_altivec.c index 5fa92bf924..6862a017e1 100644 --- a/drivers/net/i40e/i40e_rxtx_vec_altivec.c +++ b/drivers/net/i40e/i40e_rxtx_vec_altivec.c @@ -13,7 +13,7 @@ #include "i40e_rxtx.h" #include "i40e_rxtx_vec_common.h" -#include +#include #pragma GCC diagnostic ignored "-Wcast-qual" diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h b/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h index 45ff8e65b6..69b934707c 100644 --- a/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h +++ b/drivers/net/mlx5/mlx5_rxtx_vec_altivec.h @@ -10,7 +10,7 @@ #include #include -#include +#include #include #include diff --git a/drivers/net/mlx5/mlx5_utils.h b/drivers/net/mlx5/mlx5_utils.h index d81ace394e..0e016f87c3 100644 --- a/drivers/net/mlx5/mlx5_utils.h +++ b/drivers/net/mlx5/mlx5_utils.h @@ -21,16 +21,6 @@ #include "mlx5_defs.h" -/* - * Compilation workaround for PPC64 when AltiVec is fully enabled, e.g. std=c11. - * Otherwise there would be a type conflict between stdbool and altivec. - */ -#if defined(__PPC64__) && !defined(__APPLE_ALTIVEC__) -#undef bool -/* redefine as in stdbool.h */ -#define bool _Bool -#endif - /* Convert a bit number to the corresponding 64-bit mask */ #define MLX5_BITSHIFT(v) (UINT64_C(1) << (v)) diff --git a/drivers/net/virtio/virtio_rxtx_simple_altivec.c b/drivers/net/virtio/virtio_rxtx_simple_altivec.c index 47225f4121..003b6ec3f6 100644 --- a/drivers/net/virtio/virtio_rxtx_simple_altivec.c +++ b/drivers/net/virtio/virtio_rxtx_simple_altivec.c @@ -9,8 +9,7 @@ #include #include -#include - +#include #include #include #include diff --git a/lib/librte_eal/ppc/include/meson.build b/lib/librte_eal/ppc/include/meson.build index 3a91c984c4..3ee38f6940 100644 --- a/lib/librte_eal/ppc/include/meson.build +++ b/lib/librte_eal/ppc/include/meson.build @@ -4,6 +4,7 @@ includes += include_directories('.') arch_headers = files( + 'rte_altivec.h', 'rte_atomic.h', 'rte_byteorder.h', 'rte_cpuflags.h', diff --git a/lib/librte_eal/ppc/include/rte_altivec.h b/lib/librte_eal/ppc/include/rte_altivec.h new file mode 100644 index 0000000000..1551a94544 --- /dev/null +++ b/lib/librte_eal/ppc/include/rte_altivec.h @@ -0,0 +1,22 @@ +/* + * SPDX-License-Identifier: BSD-3-Clause + * Copyright (C) Mellanox 2020. + */ + +#ifndef _RTE_ALTIVEC_H_ +#define _RTE_ALTIVEC_H_ + +/* To include altivec.h, GCC version must be >= 4.8 */ +#include + +/* + * Compilation workaround for PPC64 when AltiVec is fully enabled, e.g. std=c11. + * Otherwise there would be a type conflict between stdbool and altivec. + */ +#if defined(__PPC64__) && !defined(__APPLE_ALTIVEC__) +#undef bool +/* redefine as in stdbool.h */ +#define bool _Bool +#endif + +#endif /* _RTE_ALTIVEC_H_ */ diff --git a/lib/librte_eal/ppc/include/rte_memcpy.h b/lib/librte_eal/ppc/include/rte_memcpy.h index 25311ba1d7..d685b7b15b 100644 --- a/lib/librte_eal/ppc/include/rte_memcpy.h +++ b/lib/librte_eal/ppc/include/rte_memcpy.h @@ -8,8 +8,8 @@ #include #include -/*To include altivec.h, GCC version must >= 4.8 */ -#include + +#include "rte_altivec.h" #ifdef __cplusplus extern "C" { diff --git a/lib/librte_eal/ppc/include/rte_vect.h b/lib/librte_eal/ppc/include/rte_vect.h index 1d6c29be02..b0545c878c 100644 --- a/lib/librte_eal/ppc/include/rte_vect.h +++ b/lib/librte_eal/ppc/include/rte_vect.h @@ -6,7 +6,7 @@ #ifndef _RTE_VECT_PPC_64_H_ #define _RTE_VECT_PPC_64_H_ -#include +#include "rte_altivec.h" #include "generic/rte_vect.h" #include "rte_common.h" -- 2.20.1