Add barrier() and barrier_var() macros into bpf_helpers.h to be used by end users. While a bit advanced and specialized instruments, they are sometimes indispensable. Instead of requiring each user to figure out exact asm volatile incantations for themselves, provide them from bpf_helpers.h. Also remove conflicting definitions from selftests. Some tests rely on barrier_var() definition being nothing, those will still work as libbpf does the #ifndef/#endif guarding for barrier() and barrier_var(), allowing users to redefine them, if necessary. Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Link: https://lore.kernel.org/bpf/20220509004148.1801791-8-andrii@kernel.org
32 lines
449 B
C
32 lines
449 B
C
// SPDX-License-Identifier: GPL-2.0
|
|
// Copyright (c) 2019 Facebook
|
|
#include <linux/bpf.h>
|
|
#include <bpf/bpf_helpers.h>
|
|
|
|
char _license[] SEC("license") = "GPL";
|
|
|
|
SEC("socket")
|
|
int while_true(volatile struct __sk_buff* skb)
|
|
{
|
|
int i = 0;
|
|
|
|
while (1) {
|
|
if (skb->len)
|
|
i += 3;
|
|
else
|
|
i += 7;
|
|
if (i == 9)
|
|
break;
|
|
barrier();
|
|
if (i == 10)
|
|
break;
|
|
barrier();
|
|
if (i == 13)
|
|
break;
|
|
barrier();
|
|
if (i == 14)
|
|
break;
|
|
}
|
|
return i;
|
|
}
|