Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'libbpf/xsk cleanups'

Björn Töpel says:

====================

This series removes a header dependency from xsk.h, and moves
libbpf_util.h into xsk.h.

More details in each commit!

Thank you,
Björn
====================

Signed-off-by: Andrii Nakryiko <andrii@kernel.org>

+68 -78
-1
tools/lib/bpf/Makefile
··· 228 228 $(call do_install,bpf.h,$(prefix)/include/bpf,644); \ 229 229 $(call do_install,libbpf.h,$(prefix)/include/bpf,644); \ 230 230 $(call do_install,btf.h,$(prefix)/include/bpf,644); \ 231 - $(call do_install,libbpf_util.h,$(prefix)/include/bpf,644); \ 232 231 $(call do_install,libbpf_common.h,$(prefix)/include/bpf,644); \ 233 232 $(call do_install,xsk.h,$(prefix)/include/bpf,644); \ 234 233 $(call do_install,bpf_helpers.h,$(prefix)/include/bpf,644); \
-75
tools/lib/bpf/libbpf_util.h
··· 1 - /* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ 2 - /* Copyright (c) 2019 Facebook */ 3 - 4 - #ifndef __LIBBPF_LIBBPF_UTIL_H 5 - #define __LIBBPF_LIBBPF_UTIL_H 6 - 7 - #include <stdbool.h> 8 - #include <linux/compiler.h> 9 - 10 - #ifdef __cplusplus 11 - extern "C" { 12 - #endif 13 - 14 - /* Use these barrier functions instead of smp_[rw]mb() when they are 15 - * used in a libbpf header file. That way they can be built into the 16 - * application that uses libbpf. 17 - */ 18 - #if defined(__i386__) || defined(__x86_64__) 19 - # define libbpf_smp_store_release(p, v) \ 20 - do { \ 21 - asm volatile("" : : : "memory"); \ 22 - WRITE_ONCE(*p, v); \ 23 - } while (0) 24 - # define libbpf_smp_load_acquire(p) \ 25 - ({ \ 26 - typeof(*p) ___p1 = READ_ONCE(*p); \ 27 - asm volatile("" : : : "memory"); \ 28 - ___p1; \ 29 - }) 30 - #elif defined(__aarch64__) 31 - # define libbpf_smp_store_release(p, v) \ 32 - asm volatile ("stlr %w1, %0" : "=Q" (*p) : "r" (v) : "memory") 33 - # define libbpf_smp_load_acquire(p) \ 34 - ({ \ 35 - typeof(*p) ___p1; \ 36 - asm volatile ("ldar %w0, %1" \ 37 - : "=r" (___p1) : "Q" (*p) : "memory"); \ 38 - ___p1; \ 39 - }) 40 - #elif defined(__riscv) 41 - # define libbpf_smp_store_release(p, v) \ 42 - do { \ 43 - asm volatile ("fence rw,w" : : : "memory"); \ 44 - WRITE_ONCE(*p, v); \ 45 - } while (0) 46 - # define libbpf_smp_load_acquire(p) \ 47 - ({ \ 48 - typeof(*p) ___p1 = READ_ONCE(*p); \ 49 - asm volatile ("fence r,rw" : : : "memory"); \ 50 - ___p1; \ 51 - }) 52 - #endif 53 - 54 - #ifndef libbpf_smp_store_release 55 - #define libbpf_smp_store_release(p, v) \ 56 - do { \ 57 - __sync_synchronize(); \ 58 - WRITE_ONCE(*p, v); \ 59 - } while (0) 60 - #endif 61 - 62 - #ifndef libbpf_smp_load_acquire 63 - #define libbpf_smp_load_acquire(p) \ 64 - ({ \ 65 - typeof(*p) ___p1 = READ_ONCE(*p); \ 66 - __sync_synchronize(); \ 67 - ___p1; \ 68 - }) 69 - #endif 70 - 71 - #ifdef __cplusplus 72 - } /* extern "C" */ 73 - #endif 74 - 75 - #endif
+68 -2
tools/lib/bpf/xsk.h
··· 3 3 /* 4 4 * AF_XDP user-space access library. 5 5 * 6 - * Copyright(c) 2018 - 2019 Intel Corporation. 6 + * Copyright (c) 2018 - 2019 Intel Corporation. 7 + * Copyright (c) 2019 Facebook 7 8 * 8 9 * Author(s): Magnus Karlsson <magnus.karlsson@intel.com> 9 10 */ ··· 14 13 15 14 #include <stdio.h> 16 15 #include <stdint.h> 16 + #include <stdbool.h> 17 17 #include <linux/if_xdp.h> 18 18 19 19 #include "libbpf.h" 20 - #include "libbpf_util.h" 21 20 22 21 #ifdef __cplusplus 23 22 extern "C" { 24 23 #endif 24 + 25 + /* Load-Acquire Store-Release barriers used by the XDP socket 26 + * library. The following macros should *NOT* be considered part of 27 + * the xsk.h API, and is subject to change anytime. 28 + * 29 + * LIBRARY INTERNAL 30 + */ 31 + 32 + #define __XSK_READ_ONCE(x) (*(volatile typeof(x) *)&x) 33 + #define __XSK_WRITE_ONCE(x, v) (*(volatile typeof(x) *)&x) = (v) 34 + 35 + #if defined(__i386__) || defined(__x86_64__) 36 + # define libbpf_smp_store_release(p, v) \ 37 + do { \ 38 + asm volatile("" : : : "memory"); \ 39 + __XSK_WRITE_ONCE(*p, v); \ 40 + } while (0) 41 + # define libbpf_smp_load_acquire(p) \ 42 + ({ \ 43 + typeof(*p) ___p1 = __XSK_READ_ONCE(*p); \ 44 + asm volatile("" : : : "memory"); \ 45 + ___p1; \ 46 + }) 47 + #elif defined(__aarch64__) 48 + # define libbpf_smp_store_release(p, v) \ 49 + asm volatile ("stlr %w1, %0" : "=Q" (*p) : "r" (v) : "memory") 50 + # define libbpf_smp_load_acquire(p) \ 51 + ({ \ 52 + typeof(*p) ___p1; \ 53 + asm volatile ("ldar %w0, %1" \ 54 + : "=r" (___p1) : "Q" (*p) : "memory"); \ 55 + ___p1; \ 56 + }) 57 + #elif defined(__riscv) 58 + # define libbpf_smp_store_release(p, v) \ 59 + do { \ 60 + asm volatile ("fence rw,w" : : : "memory"); \ 61 + __XSK_WRITE_ONCE(*p, v); \ 62 + } while (0) 63 + # define libbpf_smp_load_acquire(p) \ 64 + ({ \ 65 + typeof(*p) ___p1 = __XSK_READ_ONCE(*p); \ 66 + asm volatile ("fence r,rw" : : : "memory"); \ 67 + ___p1; \ 68 + }) 69 + #endif 70 + 71 + #ifndef libbpf_smp_store_release 72 + #define libbpf_smp_store_release(p, v) \ 73 + do { \ 74 + __sync_synchronize(); \ 75 + __XSK_WRITE_ONCE(*p, v); \ 76 + } while (0) 77 + #endif 78 + 79 + #ifndef libbpf_smp_load_acquire 80 + #define libbpf_smp_load_acquire(p) \ 81 + ({ \ 82 + typeof(*p) ___p1 = __XSK_READ_ONCE(*p); \ 83 + __sync_synchronize(); \ 84 + ___p1; \ 85 + }) 86 + #endif 87 + 88 + /* LIBRARY INTERNAL -- END */ 25 89 26 90 /* Do not access these members directly. Use the functions below. */ 27 91 #define DEFINE_XSK_RING(name) \