> +
> +static inline bool virtio_net_hash_rss(const struct sk_buff *skb,
> +                                    u32 types, const __be32 *key,
> +                                    struct virtio_net_hash *hash)

Based on the guidelines, this function seems imperative rather than
predicate and should return an error-code integer.

https://www.kernel.org/doc/html/latest/process/coding-style.html#function-return-values-and-names

> +{
> +     u16 report;
> +     struct virtio_net_toeplitz_state toeplitz_state = {
> +             .key_buffer = be32_to_cpu(*key),
> +             .key = key
> +     };
> +     struct flow_keys flow;
> +
> +     if (!skb_flow_dissect_flow_keys(skb, &flow, 0))
> +             return false;
> +
> +     report = virtio_net_hash_report(types, flow.basic);
> +
> +     switch (report) {
> +     case VIRTIO_NET_HASH_REPORT_IPv4:
> +             virtio_net_toeplitz(&toeplitz_state,
> +                                 (__be32 *)&flow.addrs.v4addrs,
> +                                 sizeof(flow.addrs.v4addrs) / 4);
> +             break;
> +
> +     case VIRTIO_NET_HASH_REPORT_TCPv4:
> +             virtio_net_toeplitz(&toeplitz_state,
> +                                 (__be32 *)&flow.addrs.v4addrs,
> +                                 sizeof(flow.addrs.v4addrs) / 4);
> +             virtio_net_toeplitz(&toeplitz_state, &flow.ports.ports,
> +                                 1);
> +             break;
> +
> +     case VIRTIO_NET_HASH_REPORT_UDPv4:
> +             virtio_net_toeplitz(&toeplitz_state,
> +                                 (__be32 *)&flow.addrs.v4addrs,
> +                                 sizeof(flow.addrs.v4addrs) / 4);
> +             virtio_net_toeplitz(&toeplitz_state, &flow.ports.ports,
> +                                 1);
> +             break;
> +
> +     case VIRTIO_NET_HASH_REPORT_IPv6:
> +             virtio_net_toeplitz(&toeplitz_state,
> +                                 (__be32 *)&flow.addrs.v6addrs,
> +                                 sizeof(flow.addrs.v6addrs) / 4);
> +             break;
> +
> +     case VIRTIO_NET_HASH_REPORT_TCPv6:
> +             virtio_net_toeplitz(&toeplitz_state,
> +                                 (__be32 *)&flow.addrs.v6addrs,
> +                                 sizeof(flow.addrs.v6addrs) / 4);
> +             virtio_net_toeplitz(&toeplitz_state, &flow.ports.ports,
> +                                 1);
> +             break;
> +
> +     case VIRTIO_NET_HASH_REPORT_UDPv6:
> +             virtio_net_toeplitz(&toeplitz_state,
> +                                 (__be32 *)&flow.addrs.v6addrs,
> +                                 sizeof(flow.addrs.v6addrs) / 4);
> +             virtio_net_toeplitz(&toeplitz_state, &flow.ports.ports,
> +                                 1);
> +             break;
> +
> +     default:
> +             return false;
> +     }
> +
> +     hash->value = toeplitz_state.hash;
> +     hash->report = report;
> +
> +     return true;
> +}
> +

Reply via email to