[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC 1/6] Add bpf support to qemu
From: |
Sameeh Jubran |
Subject: |
[Qemu-devel] [RFC 1/6] Add bpf support to qemu |
Date: |
Thu, 30 Aug 2018 17:27:03 +0300 |
From: Sameeh Jubran <address@hidden>
This commit adds the bpf header provided by Linux to Qemu.
Signed-off-by: Sameeh Jubran <address@hidden>
---
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 <address@hidden>
+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
- [Qemu-devel] [RFC 0/6] Virtio-net: Support RSS, Sameeh Jubran, 2018/08/30
- [Qemu-devel] [RFC 4/6] virtio-net: implement steering mode feature, Sameeh Jubran, 2018/08/30
- [Qemu-devel] [RFC 3/6] vhost-net: Expose vhost_net_get_fd, Sameeh Jubran, 2018/08/30
- [Qemu-devel] [RFC 2/6] tap: Add support for bpf ioctls, Sameeh Jubran, 2018/08/30
- [Qemu-devel] [RFC 5/6] virtio-net: steering mode: Implement rss support, Sameeh Jubran, 2018/08/30
- [Qemu-devel] [RFC 1/6] Add bpf support to qemu,
Sameeh Jubran <=
- [Qemu-devel] [RFC 6/6] virtio-net: rss: Add bpf filter, Sameeh Jubran, 2018/08/30