mirror-linux/include/uapi
Brendan Jackman 5ffa25502b bpf: Add instructions for atomic_[cmp]xchg
This adds two atomic opcodes, both of which include the BPF_FETCH
flag. XCHG without the BPF_FETCH flag would naturally encode
atomic_set. This is not supported because it would be of limited
value to userspace (it doesn't imply any barriers). CMPXCHG without
BPF_FETCH woulud be an atomic compare-and-write. We don't have such
an operation in the kernel so it isn't provided to BPF either.

There are two significant design decisions made for the CMPXCHG
instruction:

 - To solve the issue that this operation fundamentally has 3
   operands, but we only have two register fields. Therefore the
   operand we compare against (the kernel's API calls it 'old') is
   hard-coded to be R0. x86 has similar design (and A64 doesn't
   have this problem).

   A potential alternative might be to encode the other operand's
   register number in the immediate field.

 - The kernel's atomic_cmpxchg returns the old value, while the C11
   userspace APIs return a boolean indicating the comparison
   result. Which should BPF do? A64 returns the old value. x86 returns
   the old value in the hard-coded register (and also sets a
   flag). That means return-old-value is easier to JIT, so that's
   what we use.

Signed-off-by: Brendan Jackman <jackmanb@google.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Yonghong Song <yhs@fb.com>
Link: https://lore.kernel.org/bpf/20210114181751.768687-8-jackmanb@google.com
2021-01-14 18:34:29 -08:00
..
asm-generic epoll: wire up syscall epoll_pwait2 2020-12-19 11:18:38 -08:00
drm drm-misc-next for 5.11: 2020-12-15 10:21:48 +01:00
linux bpf: Add instructions for atomic_[cmp]xchg 2021-01-14 18:34:29 -08:00
misc habanalabs: Add CB IOCTL opcode to retrieve CB information 2020-11-30 10:47:38 +02:00
mtd MTD: mtd-abi.h: drop a duplicated word 2020-08-02 23:00:10 +02:00
rdma RDMA/rxe: Use acquire/release for memory ordering 2020-12-11 19:57:48 -04:00
scsi scsi: fc: Update formal FPIN descriptor definitions 2020-10-26 18:06:45 -04:00
sound Auxiliary Bus support tag for 5.11-rc1 2020-12-04 20:39:45 +00:00
video
xen xen/gntdev: gntdev.h: drop a duplicated word 2020-08-03 07:46:42 +02:00
Kbuild