]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
selftests/bpf: Fix cold_lru producing zero batch_hash in XDP LB benchmark
authorPuranjay Mohan <puranjay@kernel.org>
Wed, 20 May 2026 13:33:30 +0000 (06:33 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Wed, 20 May 2026 16:25:46 +0000 (09:25 -0700)
batch_hash = (batch_gen ^ cpu_id) * KNUTH_HASH_MULT;

When batch_gen == cpu_id the XOR produces zero, batch_hash is zero,
and *saddr ^= 0 is a no-op.  Every iteration hits the warm LRU entry.

During validation batch_gen is 2, so running on CPU 2 triggers:

    [udp-v4-lru-miss] COUNTER FAIL: LRU misses=0, expected 1

Replace XOR with addition so the multiplier input is always >= 1.
This also preserves the per-CPU salt for multi-producer runs.

Fixes: 4b4f2229104c ("selftests/bpf: Add XDP load-balancer BPF program")
Signed-off-by: Puranjay Mohan <puranjay@kernel.org>
Link: https://lore.kernel.org/r/20260520133338.3392667-2-puranjay@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/progs/xdp_lb_bench.c

index b9fd848c035d08dca67db3e2d32afb218d35184a..13777b3dcac8ca59350e5641c16a228ae51f458e 100644 (file)
@@ -618,7 +618,7 @@ int xdp_lb_bench(struct xdp_md *xdp)
                __u32 *saddr = data + saddr_off;
 
                batch_gen++;
-               batch_hash = (batch_gen ^ bpf_get_smp_processor_id()) * KNUTH_HASH_MULT;
+               batch_hash = (batch_gen + bpf_get_smp_processor_id()) * KNUTH_HASH_MULT;
                if ((void *)(saddr + 1) <= data_end)
                        *saddr ^= batch_hash;
        }