Hi Stephen, As part of hash calculation logic, the hash value is going beyond 32-bits and thus the eBPF verifier throws error with the 32-bit hash variable. So, I need to modify as 64-bit hash variable to resolve the BPF verifier error.
Here, in the code this rte_softrss_be() function is returning the hash variable, which is a 64-bit value, so modified the return type from 32-bit to 64-bit. ================== -static __u32 __attribute__((always_inline)) -rte_softrss_be(const __u32 *input_tuple, const uint8_t *rss_key, - __u8 input_len) +static __u64 __attribute__((always_inline)) +rte_softrss_be(const __u32 *input_tuple, __u8 input_len) { - __u32 i, j, hash = 0; -#pragma unroll + __u32 i, j; + __u64 hash = 0; +#pragma clang loop unroll(full) for (j = 0; j < input_len; j++) { -#pragma unroll +#pragma clang loop unroll(full) for (i = 0; i < 32; i++) { if (input_tuple[j] & (1U << (31 - i))) { hash ^= ((const __u32 *)def_rss_key)[j] << i | - (__u32)((uint64_t) + (__u32)((__u64) (((const __u32 *)def_rss_key)[j + 1]) >> (32 - i)); } @@ -119,137 +107,78 @@ rte_softrss_be(const __u32 *input_tuple, const uint8_t *rss_key, return hash; } ====================== Thanks, Madhuker. -----Original Message----- From: Stephen Hemminger <step...@networkplumber.org> Sent: 05 January 2024 02:09 To: Madhuker Mythri <madhuker.myt...@oracle.com> Cc: ferruh.yi...@amd.com; dev@dpdk.org Subject: [External] : Re: [PATCH] net/tap: Modified TAP BPF program as per the new Kernel-version upgrade requirements. On Thu, 4 Jan 2024 22:57:56 +0530 madhuker.myt...@oracle.com wrote: > -static __u32 __attribute__((always_inline)) -rte_softrss_be(const > __u32 *input_tuple, const uint8_t *rss_key, > - __u8 input_len) > +static __u64 __attribute__((always_inline)) rte_softrss_be(const > +__u32 *input_tuple, __u8 input_len) Why the change to u64? This is not part of the bug fix and not how RSS is defined.