[dpdk-dev] [PATCH] ethdev: fix VXLAN mask initialization value
Gregory Etelson
getelson at nvidia.com
Thu Apr 8 08:48:22 CEST 2021
In GCC compiler, __builtin_constant_p(exp) is a function.
The function returns the integer 1 if the argument is known to be
a compile-time constant.
Therefore, __builtin_constant_p(0xffffff << 8) returned 1.
As the result, rte_flow_item_vxlan_mask was initiated to
{{
{flags = 0x0, rsvd0 = {0x0, 0x0, 0x0},
vni = {0x0, 0x0, 0x0}, rsvd1 = 0x1},
hdr = {vx_flags = 0x0, vx_vni = 0x1000000}}}
}}
GCC fails initialization
rte_flow_item_vxlan_mask.hdr.vni = (0xffffff << 8)
with "initializer element is not a constant expression" error.
Use immediate 0xffffff00 value instead.
Cc: stable at dpdk.org
Fixes: 43af98e687cf ("ethdev: reuse VXLAN header definition in flow item")
Signed-off-by: Gregory Etelson <getelson at nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo at nvidia.com>
---
lib/librte_ethdev/rte_flow.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h
index 6cc57136ac..c476a0f59d 100644
--- a/lib/librte_ethdev/rte_flow.h
+++ b/lib/librte_ethdev/rte_flow.h
@@ -976,7 +976,7 @@ struct rte_flow_item_vxlan {
/** Default mask for RTE_FLOW_ITEM_TYPE_VXLAN. */
#ifndef __cplusplus
static const struct rte_flow_item_vxlan rte_flow_item_vxlan_mask = {
- .hdr.vx_vni = RTE_BE32(__builtin_constant_p(0xffffff << 8)),
+ .hdr.vx_vni = RTE_BE32(0xffffff00), /* (0xffffff << 8) */
};
#endif
--
2.25.1
More information about the dev
mailing list