diff mbox series

[ovs-dev,v10,2/4] mfex_avx512: Calculate miniflow_bits at compile time.

Message ID 20220531140130.2235821-3-kumar.amber@intel.com
State Superseded
Headers show
Series MFEX Optimizations IPv6 + Hashing Optimizations | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test success github build: passed
ovsrobot/intel-ovs-compilation success test: success

Commit Message

Kumar Amber May 31, 2022, 2:01 p.m. UTC
The patch removes magic numbers from miniflow_bits
and calculates the bits at compile time. This also
makes it easier to handle any ABI changes.

Signed-off-by: Kumar Amber <kumar.amber@intel.com>
---
 lib/dpif-netdev-extract-avx512.c | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

Comments

Van Haaren, Harry May 31, 2022, 3 p.m. UTC | #1
> -----Original Message-----
> From: Amber, Kumar <kumar.amber@intel.com>
> Sent: Tuesday, May 31, 2022 3:01 PM
> To: ovs-dev@openvswitch.org
> Cc: echaudro@redhat.com; i.maximets@ovn.org; Ferriter, Cian
> <cian.ferriter@intel.com>; Stokes, Ian <ian.stokes@intel.com>;
> david.marchand@redhat.com; fbl@sysclose.org; Van Haaren, Harry
> <harry.van.haaren@intel.com>; Amber, Kumar <kumar.amber@intel.com>
> Subject: [PATCH v10 2/4] mfex_avx512: Calculate miniflow_bits at compile time.
> 
> The patch removes magic numbers from miniflow_bits
> and calculates the bits at compile time. This also
> makes it easier to handle any ABI changes.
> 
> Signed-off-by: Kumar Amber <kumar.amber@intel.com>

<snip>

> -        .mf_bits = { 0x18a0000000000000, 0x0000000000040401},
> +        .mf_bits = { MF_ETH, MF_IPV4_UDP},
>          .dp_pkt_offs = {
>              0, UINT16_MAX, PKT_OFFSET_L3, PKT_OFFSET_IPV4_L4,
>          },

New #define names are much clearer here, and reflect the dp-packet
variable names that they're written into, good improvement.

Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
diff mbox series

Patch

diff --git a/lib/dpif-netdev-extract-avx512.c b/lib/dpif-netdev-extract-avx512.c
index a740e0e27..7c897eab3 100644
--- a/lib/dpif-netdev-extract-avx512.c
+++ b/lib/dpif-netdev-extract-avx512.c
@@ -285,6 +285,19 @@  _mm512_maskz_permutexvar_epi8_selector(__mmask64 k_shuf, __m512i v_shuf,
 #define PKT_MIN_ETH_IPV4_TCP      (PKT_OFFSET_IPV4_L4 + TCP_HEADER_LEN)
 #define PKT_MIN_ETH_VLAN_IPV4_TCP (PKT_OFFSET_VLAN_IPV4_L4 + TCP_HEADER_LEN)
 
+/* MF bits. */
+#define MF_BIT(field) (MAP_1 << ((offsetof(struct flow, field) / 8) %         \
+                       MAP_T_BITS))
+
+#define MF_ETH        (MF_BIT(dp_hash) | MF_BIT(in_port) | MF_BIT(packet_type)\
+                       | MF_BIT(dl_dst) | MF_BIT(dl_src)| MF_BIT(dl_type))
+
+#define MF_ETH_VLAN   (MF_ETH | MF_BIT(vlans))
+#define MF_IPV4_UDP   (MF_BIT(nw_src) | MF_BIT(ipv6_label) | MF_BIT(tp_src) | \
+                       MF_BIT(tp_dst))
+
+#define MF_IPV4_TCP   (MF_IPV4_UDP | MF_BIT(tcp_flags) | MF_BIT(arp_tha.ea[2]))
+
 /* This union allows initializing static data as u8, but easily loading it
  * into AVX512 registers too. The union ensures proper alignment for the zmm.
  */
@@ -382,7 +395,7 @@  static const struct mfex_profile mfex_profiles[PROFILE_COUNT] =
         .strip_mask.u8_data = { PATTERN_STRIP_IPV4_MASK },
         .store_kmsk = PATTERN_IPV4_UDP_KMASK,
 
-        .mf_bits = { 0x18a0000000000000, 0x0000000000040401},
+        .mf_bits = { MF_ETH, MF_IPV4_UDP},
         .dp_pkt_offs = {
             0, UINT16_MAX, PKT_OFFSET_L3, PKT_OFFSET_IPV4_L4,
         },
@@ -405,7 +418,7 @@  static const struct mfex_profile mfex_profiles[PROFILE_COUNT] =
         .strip_mask.u8_data = { PATTERN_STRIP_IPV4_MASK },
         .store_kmsk = PATTERN_IPV4_TCP_KMASK,
 
-        .mf_bits = { 0x18a0000000000000, 0x0000000000044401},
+        .mf_bits = { MF_ETH, MF_IPV4_TCP},
         .dp_pkt_offs = {
             0, UINT16_MAX, PKT_OFFSET_L3, PKT_OFFSET_IPV4_L4,
         },
@@ -424,7 +437,7 @@  static const struct mfex_profile mfex_profiles[PROFILE_COUNT] =
         .strip_mask.u8_data = { PATTERN_STRIP_DOT1Q_IPV4_MASK },
         .store_kmsk = PATTERN_DT1Q_IPV4_UDP_KMASK,
 
-        .mf_bits = { 0x38a0000000000000, 0x0000000000040401},
+        .mf_bits = { MF_ETH_VLAN, MF_IPV4_UDP},
         .dp_pkt_offs = {
             PKT_OFFSET_L2_PAD_SIZE, UINT16_MAX, PKT_OFFSET_VLAN_L3,
             PKT_OFFSET_VLAN_IPV4_L4,
@@ -450,7 +463,7 @@  static const struct mfex_profile mfex_profiles[PROFILE_COUNT] =
         .strip_mask.u8_data = { PATTERN_STRIP_DOT1Q_IPV4_MASK },
         .store_kmsk = PATTERN_DT1Q_IPV4_TCP_KMASK,
 
-        .mf_bits = { 0x38a0000000000000, 0x0000000000044401},
+        .mf_bits = { MF_ETH_VLAN, MF_IPV4_TCP},
         .dp_pkt_offs = {
             PKT_OFFSET_L2_PAD_SIZE, UINT16_MAX, PKT_OFFSET_VLAN_L3,
             PKT_OFFSET_VLAN_IPV4_L4,