MAINTAINERS | 8 + configure | 8 +- docs/devel/ebpf_rss.rst | 125 +++++++++ docs/devel/index.rst | 1 + ebpf/ebpf_rss-stub.c | 40 +++ ebpf/ebpf_rss.c | 165 ++++++++++++ ebpf/ebpf_rss.h | 44 ++++ ebpf/meson.build | 1 + ebpf/rss.bpf.skeleton.h | 431 +++++++++++++++++++++++++++++++ ebpf/trace-events | 4 + ebpf/trace.h | 1 + hw/net/vhost_net.c | 3 + hw/net/virtio-net.c | 116 ++++++++- include/hw/virtio/virtio-net.h | 4 + include/net/net.h | 2 + meson.build | 23 ++ meson_options.txt | 2 + net/tap-bsd.c | 5 + net/tap-linux.c | 13 + net/tap-linux.h | 1 + net/tap-solaris.c | 5 + net/tap-stub.c | 5 + net/tap.c | 9 + net/tap_int.h | 1 + net/vhost-vdpa.c | 2 + tools/ebpf/Makefile.ebpf | 21 ++ tools/ebpf/rss.bpf.c | 571 +++++++++++++++++++++++++++++++++++++++++ 27 files changed, 1607 insertions(+), 4 deletions(-) create mode 100644 docs/devel/ebpf_rss.rst create mode 100644 ebpf/ebpf_rss-stub.c create mode 100644 ebpf/ebpf_rss.c create mode 100644 ebpf/ebpf_rss.h create mode 100644 ebpf/meson.build create mode 100644 ebpf/rss.bpf.skeleton.h create mode 100644 ebpf/trace-events create mode 100644 ebpf/trace.h create mode 100755 tools/ebpf/Makefile.ebpf create mode 100644 tools/ebpf/rss.bpf.c
The following changes since commit 92f8c6fef13b31ba222c4d20ad8afd2b79c4c28e: Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20210525' into staging (2021-05-25 16:17:06 +0100) are available in the git repository at: https://github.com/jasowang/qemu.git tags/net-pull-request for you to fetch changes up to 90322e646e87c1440661cb3ddbc0cc94309d8a4f: MAINTAINERS: Added eBPF maintainers information. (2021-06-04 15:25:46 +0800) ---------------------------------------------------------------- ---------------------------------------------------------------- Andrew Melnychenko (7): net/tap: Added TUNSETSTEERINGEBPF code. net: Added SetSteeringEBPF method for NetClientState. ebpf: Added eBPF RSS program. ebpf: Added eBPF RSS loader. virtio-net: Added eBPF RSS to virtio-net. docs: Added eBPF documentation. MAINTAINERS: Added eBPF maintainers information. MAINTAINERS | 8 + configure | 8 +- docs/devel/ebpf_rss.rst | 125 +++++++++ docs/devel/index.rst | 1 + ebpf/ebpf_rss-stub.c | 40 +++ ebpf/ebpf_rss.c | 165 ++++++++++++ ebpf/ebpf_rss.h | 44 ++++ ebpf/meson.build | 1 + ebpf/rss.bpf.skeleton.h | 431 +++++++++++++++++++++++++++++++ ebpf/trace-events | 4 + ebpf/trace.h | 1 + hw/net/vhost_net.c | 3 + hw/net/virtio-net.c | 116 ++++++++- include/hw/virtio/virtio-net.h | 4 + include/net/net.h | 2 + meson.build | 23 ++ meson_options.txt | 2 + net/tap-bsd.c | 5 + net/tap-linux.c | 13 + net/tap-linux.h | 1 + net/tap-solaris.c | 5 + net/tap-stub.c | 5 + net/tap.c | 9 + net/tap_int.h | 1 + net/vhost-vdpa.c | 2 + tools/ebpf/Makefile.ebpf | 21 ++ tools/ebpf/rss.bpf.c | 571 +++++++++++++++++++++++++++++++++++++++++ 27 files changed, 1607 insertions(+), 4 deletions(-) create mode 100644 docs/devel/ebpf_rss.rst create mode 100644 ebpf/ebpf_rss-stub.c create mode 100644 ebpf/ebpf_rss.c create mode 100644 ebpf/ebpf_rss.h create mode 100644 ebpf/meson.build create mode 100644 ebpf/rss.bpf.skeleton.h create mode 100644 ebpf/trace-events create mode 100644 ebpf/trace.h create mode 100755 tools/ebpf/Makefile.ebpf create mode 100644 tools/ebpf/rss.bpf.c
On Fri, 4 Jun 2021 at 08:36, Jason Wang <jasowang@redhat.com> wrote: > > The following changes since commit 92f8c6fef13b31ba222c4d20ad8afd2b79c4c28e: > > Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20210525' into staging (2021-05-25 16:17:06 +0100) > > are available in the git repository at: > > https://github.com/jasowang/qemu.git tags/net-pull-request > > for you to fetch changes up to 90322e646e87c1440661cb3ddbc0cc94309d8a4f: > > MAINTAINERS: Added eBPF maintainers information. (2021-06-04 15:25:46 +0800) > > ---------------------------------------------------------------- > > ---------------------------------------------------------------- > Andrew Melnychenko (7): > net/tap: Added TUNSETSTEERINGEBPF code. > net: Added SetSteeringEBPF method for NetClientState. > ebpf: Added eBPF RSS program. > ebpf: Added eBPF RSS loader. > virtio-net: Added eBPF RSS to virtio-net. > docs: Added eBPF documentation. > MAINTAINERS: Added eBPF maintainers information. > Applied, thanks. Please update the changelog at https://wiki.qemu.org/ChangeLog/6.1 for any user-visible changes. -- PMM
Patchew URL: https://patchew.org/QEMU/20210604073617.69622-1-jasowang@redhat.com/ Hi, This series seems to have some coding style problems. See output below for more information: Type: series Message-id: 20210604073617.69622-1-jasowang@redhat.com Subject: [PULL 0/7] Net patches === TEST SCRIPT BEGIN === #!/bin/bash git rev-parse base > /dev/null || exit 0 git config --local diff.renamelimit 0 git config --local diff.renames True git config --local diff.algorithm histogram ./scripts/checkpatch.pl --mailback base.. === TEST SCRIPT END === Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384 From https://github.com/patchew-project/qemu * [new tag] patchew/20210604073617.69622-1-jasowang@redhat.com -> patchew/20210604073617.69622-1-jasowang@redhat.com Switched to a new branch 'test' f6bfae4 MAINTAINERS: Added eBPF maintainers information. 05cdd37 docs: Added eBPF documentation. 7441daa virtio-net: Added eBPF RSS to virtio-net. 9bde40e ebpf: Added eBPF RSS loader. 25747ec ebpf: Added eBPF RSS program. 7ca188e net: Added SetSteeringEBPF method for NetClientState. efa2976 net/tap: Added TUNSETSTEERINGEBPF code. === OUTPUT BEGIN === 1/7 Checking commit efa2976a1c3a (net/tap: Added TUNSETSTEERINGEBPF code.) 2/7 Checking commit 7ca188ef6a85 (net: Added SetSteeringEBPF method for NetClientState.) 3/7 Checking commit 25747ec23b55 (ebpf: Added eBPF RSS program.) WARNING: added, moved or deleted file(s), does MAINTAINERS need updating? #23: new file mode 100755 total: 0 errors, 1 warnings, 592 lines checked Patch 3/7 has style problems, please review. If any of these errors are false positives report them to the maintainer, see CHECKPATCH in MAINTAINERS. 4/7 Checking commit 9bde40ef15a4 (ebpf: Added eBPF RSS loader.) WARNING: added, moved or deleted file(s), does MAINTAINERS need updating? #72: new file mode 100644 WARNING: architecture specific defines should be avoided #354: FILE: ebpf/rss.bpf.skeleton.h:4: +#ifndef __RSS_BPF_SKEL_H__ ERROR: code indent should never use tabs #361: FILE: ebpf/rss.bpf.skeleton.h:11: +^Istruct bpf_object_skeleton *skeleton;$ ERROR: code indent should never use tabs #362: FILE: ebpf/rss.bpf.skeleton.h:12: +^Istruct bpf_object *obj;$ ERROR: code indent should never use tabs #363: FILE: ebpf/rss.bpf.skeleton.h:13: +^Istruct {$ ERROR: code indent should never use tabs #364: FILE: ebpf/rss.bpf.skeleton.h:14: +^I^Istruct bpf_map *tap_rss_map_configurations;$ ERROR: code indent should never use tabs #365: FILE: ebpf/rss.bpf.skeleton.h:15: +^I^Istruct bpf_map *tap_rss_map_indirection_table;$ ERROR: code indent should never use tabs #366: FILE: ebpf/rss.bpf.skeleton.h:16: +^I^Istruct bpf_map *tap_rss_map_toeplitz_key;$ ERROR: code indent should never use tabs #367: FILE: ebpf/rss.bpf.skeleton.h:17: +^I} maps;$ ERROR: code indent should never use tabs #368: FILE: ebpf/rss.bpf.skeleton.h:18: +^Istruct {$ ERROR: code indent should never use tabs #369: FILE: ebpf/rss.bpf.skeleton.h:19: +^I^Istruct bpf_program *tun_rss_steering_prog;$ ERROR: code indent should never use tabs #370: FILE: ebpf/rss.bpf.skeleton.h:20: +^I} progs;$ ERROR: code indent should never use tabs #371: FILE: ebpf/rss.bpf.skeleton.h:21: +^Istruct {$ ERROR: code indent should never use tabs #372: FILE: ebpf/rss.bpf.skeleton.h:22: +^I^Istruct bpf_link *tun_rss_steering_prog;$ ERROR: code indent should never use tabs #373: FILE: ebpf/rss.bpf.skeleton.h:23: +^I} links;$ ERROR: code indent should never use tabs #379: FILE: ebpf/rss.bpf.skeleton.h:29: +^Iif (!obj)$ ERROR: braces {} are necessary for all arms of this statement #379: FILE: ebpf/rss.bpf.skeleton.h:29: + if (!obj) [...] ERROR: code indent should never use tabs #380: FILE: ebpf/rss.bpf.skeleton.h:30: +^I^Ireturn;$ ERROR: code indent should never use tabs #381: FILE: ebpf/rss.bpf.skeleton.h:31: +^Iif (obj->skeleton)$ ERROR: braces {} are necessary for all arms of this statement #381: FILE: ebpf/rss.bpf.skeleton.h:31: + if (obj->skeleton) [...] ERROR: code indent should never use tabs #382: FILE: ebpf/rss.bpf.skeleton.h:32: +^I^Ibpf_object__destroy_skeleton(obj->skeleton);$ ERROR: code indent should never use tabs #383: FILE: ebpf/rss.bpf.skeleton.h:33: +^Ifree(obj);$ ERROR: code indent should never use tabs #392: FILE: ebpf/rss.bpf.skeleton.h:42: +^Istruct rss_bpf *obj;$ ERROR: code indent should never use tabs #394: FILE: ebpf/rss.bpf.skeleton.h:44: +^Iobj = (struct rss_bpf *)calloc(1, sizeof(*obj));$ ERROR: code indent should never use tabs #395: FILE: ebpf/rss.bpf.skeleton.h:45: +^Iif (!obj)$ ERROR: braces {} are necessary for all arms of this statement #395: FILE: ebpf/rss.bpf.skeleton.h:45: + if (!obj) [...] ERROR: code indent should never use tabs #396: FILE: ebpf/rss.bpf.skeleton.h:46: +^I^Ireturn NULL;$ ERROR: code indent should never use tabs #397: FILE: ebpf/rss.bpf.skeleton.h:47: +^Iif (rss_bpf__create_skeleton(obj))$ ERROR: braces {} are necessary for all arms of this statement #397: FILE: ebpf/rss.bpf.skeleton.h:47: + if (rss_bpf__create_skeleton(obj)) [...] ERROR: code indent should never use tabs #398: FILE: ebpf/rss.bpf.skeleton.h:48: +^I^Igoto err;$ ERROR: code indent should never use tabs #399: FILE: ebpf/rss.bpf.skeleton.h:49: +^Iif (bpf_object__open_skeleton(obj->skeleton, opts))$ ERROR: braces {} are necessary for all arms of this statement #399: FILE: ebpf/rss.bpf.skeleton.h:49: + if (bpf_object__open_skeleton(obj->skeleton, opts)) [...] ERROR: code indent should never use tabs #400: FILE: ebpf/rss.bpf.skeleton.h:50: +^I^Igoto err;$ ERROR: code indent should never use tabs #402: FILE: ebpf/rss.bpf.skeleton.h:52: +^Ireturn obj;$ ERROR: code indent should never use tabs #404: FILE: ebpf/rss.bpf.skeleton.h:54: +^Irss_bpf__destroy(obj);$ ERROR: code indent should never use tabs #405: FILE: ebpf/rss.bpf.skeleton.h:55: +^Ireturn NULL;$ ERROR: code indent should never use tabs #411: FILE: ebpf/rss.bpf.skeleton.h:61: +^Ireturn rss_bpf__open_opts(NULL);$ ERROR: code indent should never use tabs #417: FILE: ebpf/rss.bpf.skeleton.h:67: +^Ireturn bpf_object__load_skeleton(obj->skeleton);$ ERROR: code indent should never use tabs #423: FILE: ebpf/rss.bpf.skeleton.h:73: +^Istruct rss_bpf *obj;$ ERROR: code indent should never use tabs #425: FILE: ebpf/rss.bpf.skeleton.h:75: +^Iobj = rss_bpf__open();$ ERROR: code indent should never use tabs #426: FILE: ebpf/rss.bpf.skeleton.h:76: +^Iif (!obj)$ ERROR: braces {} are necessary for all arms of this statement #426: FILE: ebpf/rss.bpf.skeleton.h:76: + if (!obj) [...] ERROR: code indent should never use tabs #427: FILE: ebpf/rss.bpf.skeleton.h:77: +^I^Ireturn NULL;$ ERROR: code indent should never use tabs #428: FILE: ebpf/rss.bpf.skeleton.h:78: +^Iif (rss_bpf__load(obj)) {$ ERROR: code indent should never use tabs #429: FILE: ebpf/rss.bpf.skeleton.h:79: +^I^Irss_bpf__destroy(obj);$ ERROR: code indent should never use tabs #430: FILE: ebpf/rss.bpf.skeleton.h:80: +^I^Ireturn NULL;$ ERROR: code indent should never use tabs #431: FILE: ebpf/rss.bpf.skeleton.h:81: +^I}$ ERROR: code indent should never use tabs #432: FILE: ebpf/rss.bpf.skeleton.h:82: +^Ireturn obj;$ ERROR: code indent should never use tabs #438: FILE: ebpf/rss.bpf.skeleton.h:88: +^Ireturn bpf_object__attach_skeleton(obj->skeleton);$ ERROR: code indent should never use tabs #444: FILE: ebpf/rss.bpf.skeleton.h:94: +^Ireturn bpf_object__detach_skeleton(obj->skeleton);$ ERROR: code indent should never use tabs #450: FILE: ebpf/rss.bpf.skeleton.h:100: +^Istruct bpf_object_skeleton *s;$ ERROR: code indent should never use tabs #452: FILE: ebpf/rss.bpf.skeleton.h:102: +^Is = (struct bpf_object_skeleton *)calloc(1, sizeof(*s));$ ERROR: code indent should never use tabs #453: FILE: ebpf/rss.bpf.skeleton.h:103: +^Iif (!s)$ ERROR: braces {} are necessary for all arms of this statement #453: FILE: ebpf/rss.bpf.skeleton.h:103: + if (!s) [...] ERROR: code indent should never use tabs #454: FILE: ebpf/rss.bpf.skeleton.h:104: +^I^Ireturn -1;$ ERROR: code indent should never use tabs #455: FILE: ebpf/rss.bpf.skeleton.h:105: +^Iobj->skeleton = s;$ ERROR: code indent should never use tabs #457: FILE: ebpf/rss.bpf.skeleton.h:107: +^Is->sz = sizeof(*s);$ ERROR: code indent should never use tabs #458: FILE: ebpf/rss.bpf.skeleton.h:108: +^Is->name = "rss_bpf";$ ERROR: code indent should never use tabs #459: FILE: ebpf/rss.bpf.skeleton.h:109: +^Is->obj = &obj->obj;$ ERROR: code indent should never use tabs #461: FILE: ebpf/rss.bpf.skeleton.h:111: +^I/* maps */$ ERROR: code indent should never use tabs #462: FILE: ebpf/rss.bpf.skeleton.h:112: +^Is->map_cnt = 3;$ ERROR: code indent should never use tabs #463: FILE: ebpf/rss.bpf.skeleton.h:113: +^Is->map_skel_sz = sizeof(*s->maps);$ ERROR: code indent should never use tabs #464: FILE: ebpf/rss.bpf.skeleton.h:114: +^Is->maps = (struct bpf_map_skeleton *)calloc(s->map_cnt, s->map_skel_sz);$ ERROR: code indent should never use tabs #465: FILE: ebpf/rss.bpf.skeleton.h:115: +^Iif (!s->maps)$ ERROR: braces {} are necessary for all arms of this statement #465: FILE: ebpf/rss.bpf.skeleton.h:115: + if (!s->maps) [...] ERROR: code indent should never use tabs #466: FILE: ebpf/rss.bpf.skeleton.h:116: +^I^Igoto err;$ ERROR: code indent should never use tabs #468: FILE: ebpf/rss.bpf.skeleton.h:118: +^Is->maps[0].name = "tap_rss_map_configurations";$ ERROR: code indent should never use tabs #469: FILE: ebpf/rss.bpf.skeleton.h:119: +^Is->maps[0].map = &obj->maps.tap_rss_map_configurations;$ ERROR: code indent should never use tabs #471: FILE: ebpf/rss.bpf.skeleton.h:121: +^Is->maps[1].name = "tap_rss_map_indirection_table";$ ERROR: code indent should never use tabs #472: FILE: ebpf/rss.bpf.skeleton.h:122: +^Is->maps[1].map = &obj->maps.tap_rss_map_indirection_table;$ ERROR: code indent should never use tabs #474: FILE: ebpf/rss.bpf.skeleton.h:124: +^Is->maps[2].name = "tap_rss_map_toeplitz_key";$ ERROR: code indent should never use tabs #475: FILE: ebpf/rss.bpf.skeleton.h:125: +^Is->maps[2].map = &obj->maps.tap_rss_map_toeplitz_key;$ ERROR: code indent should never use tabs #477: FILE: ebpf/rss.bpf.skeleton.h:127: +^I/* programs */$ ERROR: code indent should never use tabs #478: FILE: ebpf/rss.bpf.skeleton.h:128: +^Is->prog_cnt = 1;$ ERROR: code indent should never use tabs #479: FILE: ebpf/rss.bpf.skeleton.h:129: +^Is->prog_skel_sz = sizeof(*s->progs);$ WARNING: line over 80 characters #480: FILE: ebpf/rss.bpf.skeleton.h:130: + s->progs = (struct bpf_prog_skeleton *)calloc(s->prog_cnt, s->prog_skel_sz); ERROR: code indent should never use tabs #480: FILE: ebpf/rss.bpf.skeleton.h:130: +^Is->progs = (struct bpf_prog_skeleton *)calloc(s->prog_cnt, s->prog_skel_sz);$ ERROR: code indent should never use tabs #481: FILE: ebpf/rss.bpf.skeleton.h:131: +^Iif (!s->progs)$ ERROR: braces {} are necessary for all arms of this statement #481: FILE: ebpf/rss.bpf.skeleton.h:131: + if (!s->progs) [...] ERROR: code indent should never use tabs #482: FILE: ebpf/rss.bpf.skeleton.h:132: +^I^Igoto err;$ ERROR: code indent should never use tabs #484: FILE: ebpf/rss.bpf.skeleton.h:134: +^Is->progs[0].name = "tun_rss_steering_prog";$ ERROR: code indent should never use tabs #485: FILE: ebpf/rss.bpf.skeleton.h:135: +^Is->progs[0].prog = &obj->progs.tun_rss_steering_prog;$ ERROR: code indent should never use tabs #486: FILE: ebpf/rss.bpf.skeleton.h:136: +^Is->progs[0].link = &obj->links.tun_rss_steering_prog;$ ERROR: code indent should never use tabs #488: FILE: ebpf/rss.bpf.skeleton.h:138: +^Is->data_sz = 8088;$ ERROR: code indent should never use tabs #489: FILE: ebpf/rss.bpf.skeleton.h:139: +^Is->data = (void *)"\$ ERROR: code indent should never use tabs #775: FILE: ebpf/rss.bpf.skeleton.h:425: +^Ireturn 0;$ ERROR: code indent should never use tabs #777: FILE: ebpf/rss.bpf.skeleton.h:427: +^Ibpf_object__destroy_skeleton(s);$ ERROR: code indent should never use tabs #778: FILE: ebpf/rss.bpf.skeleton.h:428: +^Ireturn -1;$ total: 85 errors, 3 warnings, 779 lines checked Patch 4/7 has style problems, please review. If any of these errors are false positives report them to the maintainer, see CHECKPATCH in MAINTAINERS. 5/7 Checking commit 7441daa44379 (virtio-net: Added eBPF RSS to virtio-net.) 6/7 Checking commit 05cdd37c62f5 (docs: Added eBPF documentation.) WARNING: added, moved or deleted file(s), does MAINTAINERS need updating? #17: new file mode 100644 total: 0 errors, 1 warnings, 129 lines checked Patch 6/7 has style problems, please review. If any of these errors are false positives report them to the maintainer, see CHECKPATCH in MAINTAINERS. 7/7 Checking commit f6bfae44009e (MAINTAINERS: Added eBPF maintainers information.) === OUTPUT END === Test command exited with code: 1 The full log is available at http://patchew.org/logs/20210604073617.69622-1-jasowang@redhat.com/testing.checkpatch/?type=message. --- Email generated automatically by Patchew [https://patchew.org/]. Please send your feedback to patchew-devel@redhat.com
On Fri, 4 Jun 2021 at 08:36, Jason Wang <jasowang@redhat.com> wrote: > > The following changes since commit 92f8c6fef13b31ba222c4d20ad8afd2b79c4c28e: > > Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20210525' into staging (2021-05-25 16:17:06 +0100) > > are available in the git repository at: > > https://github.com/jasowang/qemu.git tags/net-pull-request > > for you to fetch changes up to 90322e646e87c1440661cb3ddbc0cc94309d8a4f: > > MAINTAINERS: Added eBPF maintainers information. (2021-06-04 15:25:46 +0800) > > ---------------------------------------------------------------- > > ---------------------------------------------------------------- > Andrew Melnychenko (7): > net/tap: Added TUNSETSTEERINGEBPF code. > net: Added SetSteeringEBPF method for NetClientState. > ebpf: Added eBPF RSS program. > ebpf: Added eBPF RSS loader. > virtio-net: Added eBPF RSS to virtio-net. > docs: Added eBPF documentation. > MAINTAINERS: Added eBPF maintainers information. Checkpatch reports a lot of hardcoded tabs -- can you fix those, please, or are they deliberate? thanks -- PMM
在 2021/6/4 下午6:37, Peter Maydell 写道: > On Fri, 4 Jun 2021 at 08:36, Jason Wang <jasowang@redhat.com> wrote: >> The following changes since commit 92f8c6fef13b31ba222c4d20ad8afd2b79c4c28e: >> >> Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20210525' into staging (2021-05-25 16:17:06 +0100) >> >> are available in the git repository at: >> >> https://github.com/jasowang/qemu.git tags/net-pull-request >> >> for you to fetch changes up to 90322e646e87c1440661cb3ddbc0cc94309d8a4f: >> >> MAINTAINERS: Added eBPF maintainers information. (2021-06-04 15:25:46 +0800) >> >> ---------------------------------------------------------------- >> >> ---------------------------------------------------------------- >> Andrew Melnychenko (7): >> net/tap: Added TUNSETSTEERINGEBPF code. >> net: Added SetSteeringEBPF method for NetClientState. >> ebpf: Added eBPF RSS program. >> ebpf: Added eBPF RSS loader. >> virtio-net: Added eBPF RSS to virtio-net. >> docs: Added eBPF documentation. >> MAINTAINERS: Added eBPF maintainers information. > > Checkpatch reports a lot of hardcoded tabs -- can you fix those, > please, or are they deliberate? It's the automated generated bpf skeleton header. So I think we can just leave it as is. Thanks > > thanks > -- PMM >
© 2016 - 2024 Red Hat, Inc.