+
+static inline void virtio_net_toeplitz(struct virtio_net_toeplitz_state *state,
+                                      const __be32 *input, size_t len)

The function calculates a hash value but its name does not make it
clear. Consider adding a 'calc'.

+{
+       u32 key;
+
+       while (len) {
+               state->key++;
+               key = be32_to_cpu(*state->key);

You perform be32_to_cpu to support both CPU endianities.
If you will follow with an unconditional swab32, you could run the
following loop on a more natural 0 to 31 always referring to bit 0
and avoiding !!(key & bit):

key = swab32(be32_to_cpu(*state->key));
for (i = 0; i < 32; i++, key >>= 1) {
        if (be32_to_cpu(*input) & 1)
                state->hash ^= state->key_buffer;
        state->key_buffer = (state->key_buffer << 1) | (key & 1);
}


+
+               for (u32 bit = BIT(31); bit; bit >>= 1) {
+                       if (be32_to_cpu(*input) & bit)
+                               state->hash ^= state->key_buffer;
+
+                       state->key_buffer =
+                               (state->key_buffer << 1) | !!(key & bit);
+               }
+
+               input++;
+               len--;
+       }
+}
+
+static inline u32 virtio_net_hash_report(u32 types,
+                                        struct flow_dissector_key_basic key)
+{
+       switch (key.n_proto) {
+       case htons(ETH_P_IP):

Other parts of the code use be_to_cpu and cpu_to_be, Why use legacy
htons here?

+               if (key.ip_proto == IPPROTO_TCP &&
+                   (types & VIRTIO_NET_RSS_HASH_TYPE_TCPv4))
+                       return VIRTIO_NET_HASH_REPORT_TCPv4;
+
+               if (key.ip_proto == IPPROTO_UDP &&
+                   (types & VIRTIO_NET_RSS_HASH_TYPE_UDPv4))
+                       return VIRTIO_NET_HASH_REPORT_UDPv4;
+
+               if (types & VIRTIO_NET_RSS_HASH_TYPE_IPv4)
+                       return VIRTIO_NET_HASH_REPORT_IPv4;
+
+               return VIRTIO_NET_HASH_REPORT_NONE;
+
+       case htons(ETH_P_IPV6):
+               if (key.ip_proto == IPPROTO_TCP &&
+                   (types & VIRTIO_NET_RSS_HASH_TYPE_TCPv6))
+                       return VIRTIO_NET_HASH_REPORT_TCPv6;
+
+               if (key.ip_proto == IPPROTO_UDP &&
+                   (types & VIRTIO_NET_RSS_HASH_TYPE_UDPv6))
+                       return VIRTIO_NET_HASH_REPORT_UDPv6;
+
+               if (types & VIRTIO_NET_RSS_HASH_TYPE_IPv6)
+                       return VIRTIO_NET_HASH_REPORT_IPv6;
+
+               return VIRTIO_NET_HASH_REPORT_NONE;
+
+       default:
+               return VIRTIO_NET_HASH_REPORT_NONE;
+       }
+}
 #endif /* _LINUX_VIRTIO_NET_H */

-- 
2.46.0


Reply via email to