From: Sameeh Jubran <sjub...@redhat.com> This commit adds the bpf header provided by Linux to Qemu.
Signed-off-by: Sameeh Jubran <sjub...@redhat.com> --- MAINTAINERS | 5 +++++ configure | 44 +++++++++++++++++++++++++++++++++++++++++ scripts/update-linux-headers.sh | 8 ++++++-- 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 0fb5f38f9f..bf2619239c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2126,6 +2126,11 @@ F: hw/rdma/* F: hw/rdma/vmw/* F: docs/pvrdma.txt +BPF +M: Sameeh Jubran <sam...@daynix.com> +S: Maintained +F: linux-headers/linux/bpf.h + Build and test automation ------------------------- Build and test automation diff --git a/configure b/configure index a8c4094c87..21edaf59aa 100755 --- a/configure +++ b/configure @@ -348,6 +348,7 @@ libattr="" xfs="" tcg="yes" membarrier="" +bpf="no" vhost_net="no" vhost_crypto="no" vhost_scsi="no" @@ -1173,6 +1174,10 @@ for opt do ;; --enable-membarrier) membarrier="yes" ;; + --disable-bpf) bpf="no" + ;; + --enable-bpf) bpf="yes" + ;; --disable-blobs) blobs="no" ;; --with-pkgversion=*) pkgversion="$optarg" @@ -1593,6 +1598,7 @@ disabled with --disable-FEATURE, default is enabled if available: brlapi BrlAPI (Braile) curl curl connectivity membarrier membarrier system call (for Linux 4.14+ or Windows) + bpf bpf system calls (for Linux 3.18+) fdt fdt device tree bluez bluez stack connectivity kvm KVM acceleration support @@ -5232,6 +5238,38 @@ else fi ########################################## +# check for usable bpf system call +if test "$bpf" = "yes"; then + have_bpf=no + if test "$linux" = "yes" ; then + cat > $TMPC << EOF + #include <sys/syscall.h> + #include "linux/bpf.h" + #include <unistd.h> + #include <stdlib.h> + #include <string.h> + int main(void) { + union bpf_attr * attr = NULL; + syscall(__NR_bpf, BPF_PROG_LOAD, attr, sizeof(attr)); + exit(0); + } +EOF + bpf_include="-Iinclude/standard-headers/linux" + bpf_cflags="" + bpf_libs="" + if compile_prog "$bpf_include" "$bpf_libs" ; then + have_bpf=yes + fi + fi + if test "$have_bpf" = "no"; then + feature_not_found "bpf" "libelf libs are not available or else \ +the bpf system call is not available" + fi +else + bpf=no +fi + +########################################## # check if rtnetlink.h exists and is useful have_rtnetlink=no cat > $TMPC << EOF @@ -5871,6 +5909,7 @@ echo "malloc trim support $malloc_trim" echo "RDMA support $rdma" echo "fdt support $fdt" echo "membarrier $membarrier" +echo "bpf $bpf" echo "preadv support $preadv" echo "fdatasync $fdatasync" echo "madvise $madvise" @@ -6365,6 +6404,11 @@ fi if test "$membarrier" = "yes" ; then echo "CONFIG_MEMBARRIER=y" >> $config_host_mak fi +if test "$bpf" = "yes" ; then + echo "CONFIG_BPF=y" >> $config_host_mak + echo "LIBS_BPF=$bpf_libs" >> $config_host_mak + echo "CFLAGS_BPF=$bpf_cflags" >> $config_host_mak +fi if test "$signalfd" = "yes" ; then echo "CONFIG_SIGNALFD=y" >> $config_host_mak fi diff --git a/scripts/update-linux-headers.sh b/scripts/update-linux-headers.sh index feb75390aa..57df8228af 100755 --- a/scripts/update-linux-headers.sh +++ b/scripts/update-linux-headers.sh @@ -35,6 +35,8 @@ cp_portable() { grep '#include' "$f" | grep -v -e 'linux/virtio' \ -e 'linux/types' \ -e 'stdint' \ + -e 'stdio' \ + -e 'stdbool' \ -e 'linux/if_ether' \ -e 'input-event-codes' \ -e 'sys/' \ @@ -44,6 +46,7 @@ cp_portable() { -e 'linux/kernel' \ -e 'linux/sysinfo' \ -e 'asm-generic/kvm_para' \ + -e 'linux/bpf' \ > /dev/null then echo "Unexpected #include in input file $f". @@ -58,7 +61,7 @@ cp_portable() { -e 's/__le\([0-9][0-9]*\)/uint\1_t/g' \ -e 's/__be\([0-9][0-9]*\)/uint\1_t/g' \ -e 's/"\(input-event-codes\.h\)"/"standard-headers\/linux\/\1"/' \ - -e 's/<linux\/\([^>]*\)>/"standard-headers\/linux\/\1"/' \ + -e 's/<linux\/\([^>]*(?!bpf)\)>/"standard-headers\/linux\/\1"/' \ -e 's/__bitwise//' \ -e 's/__attribute__((packed))/QEMU_PACKED/' \ -e 's/__inline__/inline/' \ @@ -126,7 +129,8 @@ done rm -rf "$output/linux-headers/linux" mkdir -p "$output/linux-headers/linux" for header in kvm.h vfio.h vfio_ccw.h vhost.h \ - psci.h psp-sev.h userfaultfd.h; do + psci.h psp-sev.h userfaultfd.h \ + bpf.h; do cp "$tmpdir/include/linux/$header" "$output/linux-headers/linux" done -- 2.13.6