qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Andrew Melnichenko <andrew@daynix.com>
To: qemu-devel@nongnu.org
Cc: Yan Vugenfirer <yan@daynix.com>,
	Yuri Benditovich <yuri.benditovich@daynix.com>,
	Jason Wang <jasowang@redhat.com>,
	berrange@redhat.com, "Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [PATCH v5 0/7] eBPF RSS support for virtio-net
Date: Thu, 1 Apr 2021 10:22:37 +0300	[thread overview]
Message-ID: <CABcq3pECgKYk34_pSZHcyGJLYpcXXPXTE6er2dpSOgCj+4+qOQ@mail.gmail.com> (raw)
In-Reply-To: <161668791685.4923.12339857183621777474@72b6d80f974b>

[-- Attachment #1: Type: text/plain, Size: 16839 bytes --]

The skeleton is generated file. Style issues with rss.bpf.c would be fixed
in upcoming patches.

On Thu, Mar 25, 2021 at 5:58 PM <no-reply@patchew.org> wrote:

> Patchew URL:
> https://patchew.org/QEMU/20210325153529.75831-1-andrew@daynix.com/
>
>
>
> Hi,
>
> This series seems to have some coding style problems. See output below for
> more information:
>
> Type: series
> Message-id: 20210325153529.75831-1-andrew@daynix.com
> Subject: [PATCH v5 0/7] eBPF RSS support for virtio-net
>
> === 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
> Switched to a new branch 'test'
> ad293ca MAINTAINERS: Added eBPF maintainers information.
> 57b0f9a docs: Added eBPF documentation.
> 043dbde virtio-net: Added eBPF RSS to virtio-net.
> aa652c0 ebpf: Added eBPF RSS loader.
> 9f24275 ebpf: Added eBPF RSS program.
> 6a33681 net: Added SetSteeringEBPF method for NetClientState.
> ad82041 net/tap: Added TUNSETSTEERINGEBPF code.
>
> === OUTPUT BEGIN ===
> 1/7 Checking commit ad820417b22d (net/tap: Added TUNSETSTEERINGEBPF code.)
> 2/7 Checking commit 6a33681ca4bf (net: Added SetSteeringEBPF method for
> NetClientState.)
> 3/7 Checking commit 9f24275a1eef (ebpf: Added eBPF RSS program.)
> Use of uninitialized value $acpi_testexpected in string eq at ./scripts/
> checkpatch.pl line 1529.
> WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
> #22:
> new file mode 100755
>
> WARNING: line over 80 characters
> #210: FILE: tools/ebpf/rss.bpf.c:156:
> + * According to
> https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml
>
> WARNING: line over 80 characters
> #213: FILE: tools/ebpf/rss.bpf.c:159:
> + * Need to choose reasonable amount of maximum extensions/options we may
> check to find
>
> ERROR: braces {} are necessary for all arms of this statement
> #235: FILE: tools/ebpf/rss.bpf.c:181:
> +        if (err)
> [...]
>
> ERROR: braces {} are necessary for all arms of this statement
> #243: FILE: tools/ebpf/rss.bpf.c:189:
> +            if (err)
> [...]
>
> ERROR: braces {} are necessary for all arms of this statement
> #254: FILE: tools/ebpf/rss.bpf.c:200:
> +                if (err)
> [...]
>
> ERROR: braces {} are necessary for all arms of this statement
> #271: FILE: tools/ebpf/rss.bpf.c:217:
> +                if (err)
> [...]
>
> WARNING: line over 80 characters
> #283: FILE: tools/ebpf/rss.bpf.c:229:
> +                        *l4_offset + opt_offset + offsetof(struct
> ipv6_destopt_hao, addr),
>
> ERROR: braces {} are necessary for all arms of this statement
> #286: FILE: tools/ebpf/rss.bpf.c:232:
> +                    if (err)
> [...]
>
> ERROR: braces {} are necessary for all arms of this statement
> #316: FILE: tools/ebpf/rss.bpf.c:262:
> +    if (err)
> [...]
>
> ERROR: braces {} are necessary for all arms of this statement
> #330: FILE: tools/ebpf/rss.bpf.c:276:
> +    if (err)
> [...]
>
> ERROR: braces {} are necessary for all arms of this statement
> #359: FILE: tools/ebpf/rss.bpf.c:305:
> +        if (err)
> [...]
>
> ERROR: braces {} are necessary for all arms of this statement
> #373: FILE: tools/ebpf/rss.bpf.c:319:
> +        if (err)
> [...]
>
> ERROR: braces {} are necessary for all arms of this statement
> #383: FILE: tools/ebpf/rss.bpf.c:329:
> +        if (err)
> [...]
>
> ERROR: braces {} are necessary for all arms of this statement
> #394: FILE: tools/ebpf/rss.bpf.c:340:
> +            if (err)
> [...]
>
> ERROR: braces {} are necessary for all arms of this statement
> #405: FILE: tools/ebpf/rss.bpf.c:351:
> +            if (err)
> [...]
>
> ERROR: braces {} are necessary for all arms of this statement
> #429: FILE: tools/ebpf/rss.bpf.c:375:
> +    if (err)
> [...]
>
> total: 13 errors, 4 warnings, 574 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 aa652c04e4a0 (ebpf: Added eBPF RSS loader.)
> Use of uninitialized value $acpi_testexpected in string eq at ./scripts/
> checkpatch.pl line 1529.
> WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
> #71:
> new file mode 100644
>
> WARNING: architecture specific defines should be avoided
> #353: FILE: ebpf/rss.bpf.skeleton.h:4:
> +#ifndef __RSS_BPF_SKEL_H__
>
> ERROR: code indent should never use tabs
> #360: FILE: ebpf/rss.bpf.skeleton.h:11:
> +^Istruct bpf_object_skeleton *skeleton;$
>
> ERROR: code indent should never use tabs
> #361: FILE: ebpf/rss.bpf.skeleton.h:12:
> +^Istruct bpf_object *obj;$
>
> ERROR: code indent should never use tabs
> #362: FILE: ebpf/rss.bpf.skeleton.h:13:
> +^Istruct {$
>
> ERROR: code indent should never use tabs
> #363: FILE: ebpf/rss.bpf.skeleton.h:14:
> +^I^Istruct bpf_map *tap_rss_map_configurations;$
>
> ERROR: code indent should never use tabs
> #364: FILE: ebpf/rss.bpf.skeleton.h:15:
> +^I^Istruct bpf_map *tap_rss_map_indirection_table;$
>
> ERROR: code indent should never use tabs
> #365: FILE: ebpf/rss.bpf.skeleton.h:16:
> +^I^Istruct bpf_map *tap_rss_map_toeplitz_key;$
>
> ERROR: code indent should never use tabs
> #366: FILE: ebpf/rss.bpf.skeleton.h:17:
> +^I} maps;$
>
> ERROR: code indent should never use tabs
> #367: FILE: ebpf/rss.bpf.skeleton.h:18:
> +^Istruct {$
>
> ERROR: code indent should never use tabs
> #368: FILE: ebpf/rss.bpf.skeleton.h:19:
> +^I^Istruct bpf_program *tun_rss_steering_prog;$
>
> ERROR: code indent should never use tabs
> #369: FILE: ebpf/rss.bpf.skeleton.h:20:
> +^I} progs;$
>
> ERROR: code indent should never use tabs
> #370: FILE: ebpf/rss.bpf.skeleton.h:21:
> +^Istruct {$
>
> ERROR: code indent should never use tabs
> #371: FILE: ebpf/rss.bpf.skeleton.h:22:
> +^I^Istruct bpf_link *tun_rss_steering_prog;$
>
> ERROR: code indent should never use tabs
> #372: FILE: ebpf/rss.bpf.skeleton.h:23:
> +^I} links;$
>
> ERROR: code indent should never use tabs
> #378: FILE: ebpf/rss.bpf.skeleton.h:29:
> +^Iif (!obj)$
>
> ERROR: braces {} are necessary for all arms of this statement
> #378: FILE: ebpf/rss.bpf.skeleton.h:29:
> +       if (!obj)
> [...]
>
> ERROR: code indent should never use tabs
> #379: FILE: ebpf/rss.bpf.skeleton.h:30:
> +^I^Ireturn;$
>
> ERROR: code indent should never use tabs
> #380: FILE: ebpf/rss.bpf.skeleton.h:31:
> +^Iif (obj->skeleton)$
>
> ERROR: braces {} are necessary for all arms of this statement
> #380: FILE: ebpf/rss.bpf.skeleton.h:31:
> +       if (obj->skeleton)
> [...]
>
> ERROR: code indent should never use tabs
> #381: FILE: ebpf/rss.bpf.skeleton.h:32:
> +^I^Ibpf_object__destroy_skeleton(obj->skeleton);$
>
> ERROR: code indent should never use tabs
> #382: FILE: ebpf/rss.bpf.skeleton.h:33:
> +^Ifree(obj);$
>
> ERROR: code indent should never use tabs
> #391: FILE: ebpf/rss.bpf.skeleton.h:42:
> +^Istruct rss_bpf *obj;$
>
> ERROR: code indent should never use tabs
> #393: FILE: ebpf/rss.bpf.skeleton.h:44:
> +^Iobj = (struct rss_bpf *)calloc(1, sizeof(*obj));$
>
> ERROR: code indent should never use tabs
> #394: FILE: ebpf/rss.bpf.skeleton.h:45:
> +^Iif (!obj)$
>
> ERROR: braces {} are necessary for all arms of this statement
> #394: FILE: ebpf/rss.bpf.skeleton.h:45:
> +       if (!obj)
> [...]
>
> ERROR: code indent should never use tabs
> #395: FILE: ebpf/rss.bpf.skeleton.h:46:
> +^I^Ireturn NULL;$
>
> ERROR: code indent should never use tabs
> #396: FILE: ebpf/rss.bpf.skeleton.h:47:
> +^Iif (rss_bpf__create_skeleton(obj))$
>
> ERROR: braces {} are necessary for all arms of this statement
> #396: FILE: ebpf/rss.bpf.skeleton.h:47:
> +       if (rss_bpf__create_skeleton(obj))
> [...]
>
> ERROR: code indent should never use tabs
> #397: FILE: ebpf/rss.bpf.skeleton.h:48:
> +^I^Igoto err;$
>
> ERROR: code indent should never use tabs
> #398: 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
> #398: FILE: ebpf/rss.bpf.skeleton.h:49:
> +       if (bpf_object__open_skeleton(obj->skeleton, opts))
> [...]
>
> ERROR: code indent should never use tabs
> #399: FILE: ebpf/rss.bpf.skeleton.h:50:
> +^I^Igoto err;$
>
> ERROR: code indent should never use tabs
> #401: FILE: ebpf/rss.bpf.skeleton.h:52:
> +^Ireturn obj;$
>
> ERROR: code indent should never use tabs
> #403: FILE: ebpf/rss.bpf.skeleton.h:54:
> +^Irss_bpf__destroy(obj);$
>
> ERROR: code indent should never use tabs
> #404: FILE: ebpf/rss.bpf.skeleton.h:55:
> +^Ireturn NULL;$
>
> ERROR: code indent should never use tabs
> #410: FILE: ebpf/rss.bpf.skeleton.h:61:
> +^Ireturn rss_bpf__open_opts(NULL);$
>
> ERROR: code indent should never use tabs
> #416: FILE: ebpf/rss.bpf.skeleton.h:67:
> +^Ireturn bpf_object__load_skeleton(obj->skeleton);$
>
> ERROR: code indent should never use tabs
> #422: FILE: ebpf/rss.bpf.skeleton.h:73:
> +^Istruct rss_bpf *obj;$
>
> ERROR: code indent should never use tabs
> #424: FILE: ebpf/rss.bpf.skeleton.h:75:
> +^Iobj = rss_bpf__open();$
>
> ERROR: code indent should never use tabs
> #425: FILE: ebpf/rss.bpf.skeleton.h:76:
> +^Iif (!obj)$
>
> ERROR: braces {} are necessary for all arms of this statement
> #425: FILE: ebpf/rss.bpf.skeleton.h:76:
> +       if (!obj)
> [...]
>
> ERROR: code indent should never use tabs
> #426: FILE: ebpf/rss.bpf.skeleton.h:77:
> +^I^Ireturn NULL;$
>
> ERROR: code indent should never use tabs
> #427: FILE: ebpf/rss.bpf.skeleton.h:78:
> +^Iif (rss_bpf__load(obj)) {$
>
> ERROR: code indent should never use tabs
> #428: FILE: ebpf/rss.bpf.skeleton.h:79:
> +^I^Irss_bpf__destroy(obj);$
>
> ERROR: code indent should never use tabs
> #429: FILE: ebpf/rss.bpf.skeleton.h:80:
> +^I^Ireturn NULL;$
>
> ERROR: code indent should never use tabs
> #430: FILE: ebpf/rss.bpf.skeleton.h:81:
> +^I}$
>
> ERROR: code indent should never use tabs
> #431: FILE: ebpf/rss.bpf.skeleton.h:82:
> +^Ireturn obj;$
>
> ERROR: code indent should never use tabs
> #437: FILE: ebpf/rss.bpf.skeleton.h:88:
> +^Ireturn bpf_object__attach_skeleton(obj->skeleton);$
>
> ERROR: code indent should never use tabs
> #443: FILE: ebpf/rss.bpf.skeleton.h:94:
> +^Ireturn bpf_object__detach_skeleton(obj->skeleton);$
>
> ERROR: code indent should never use tabs
> #449: FILE: ebpf/rss.bpf.skeleton.h:100:
> +^Istruct bpf_object_skeleton *s;$
>
> ERROR: code indent should never use tabs
> #451: FILE: ebpf/rss.bpf.skeleton.h:102:
> +^Is = (struct bpf_object_skeleton *)calloc(1, sizeof(*s));$
>
> ERROR: code indent should never use tabs
> #452: FILE: ebpf/rss.bpf.skeleton.h:103:
> +^Iif (!s)$
>
> ERROR: braces {} are necessary for all arms of this statement
> #452: FILE: ebpf/rss.bpf.skeleton.h:103:
> +       if (!s)
> [...]
>
> ERROR: code indent should never use tabs
> #453: FILE: ebpf/rss.bpf.skeleton.h:104:
> +^I^Ireturn -1;$
>
> ERROR: code indent should never use tabs
> #454: FILE: ebpf/rss.bpf.skeleton.h:105:
> +^Iobj->skeleton = s;$
>
> ERROR: code indent should never use tabs
> #456: FILE: ebpf/rss.bpf.skeleton.h:107:
> +^Is->sz = sizeof(*s);$
>
> ERROR: code indent should never use tabs
> #457: FILE: ebpf/rss.bpf.skeleton.h:108:
> +^Is->name = "rss_bpf";$
>
> ERROR: code indent should never use tabs
> #458: FILE: ebpf/rss.bpf.skeleton.h:109:
> +^Is->obj = &obj->obj;$
>
> ERROR: code indent should never use tabs
> #460: FILE: ebpf/rss.bpf.skeleton.h:111:
> +^I/* maps */$
>
> ERROR: code indent should never use tabs
> #461: FILE: ebpf/rss.bpf.skeleton.h:112:
> +^Is->map_cnt = 3;$
>
> ERROR: code indent should never use tabs
> #462: FILE: ebpf/rss.bpf.skeleton.h:113:
> +^Is->map_skel_sz = sizeof(*s->maps);$
>
> ERROR: code indent should never use tabs
> #463: 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
> #464: FILE: ebpf/rss.bpf.skeleton.h:115:
> +^Iif (!s->maps)$
>
> ERROR: braces {} are necessary for all arms of this statement
> #464: FILE: ebpf/rss.bpf.skeleton.h:115:
> +       if (!s->maps)
> [...]
>
> ERROR: code indent should never use tabs
> #465: FILE: ebpf/rss.bpf.skeleton.h:116:
> +^I^Igoto err;$
>
> ERROR: code indent should never use tabs
> #467: FILE: ebpf/rss.bpf.skeleton.h:118:
> +^Is->maps[0].name = "tap_rss_map_configurations";$
>
> ERROR: code indent should never use tabs
> #468: FILE: ebpf/rss.bpf.skeleton.h:119:
> +^Is->maps[0].map = &obj->maps.tap_rss_map_configurations;$
>
> ERROR: code indent should never use tabs
> #470: FILE: ebpf/rss.bpf.skeleton.h:121:
> +^Is->maps[1].name = "tap_rss_map_indirection_table";$
>
> ERROR: code indent should never use tabs
> #471: 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
> #473: FILE: ebpf/rss.bpf.skeleton.h:124:
> +^Is->maps[2].name = "tap_rss_map_toeplitz_key";$
>
> ERROR: code indent should never use tabs
> #474: 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
> #476: FILE: ebpf/rss.bpf.skeleton.h:127:
> +^I/* programs */$
>
> ERROR: code indent should never use tabs
> #477: FILE: ebpf/rss.bpf.skeleton.h:128:
> +^Is->prog_cnt = 1;$
>
> ERROR: code indent should never use tabs
> #478: FILE: ebpf/rss.bpf.skeleton.h:129:
> +^Is->prog_skel_sz = sizeof(*s->progs);$
>
> WARNING: line over 80 characters
> #479: 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
> #479: 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
> #480: FILE: ebpf/rss.bpf.skeleton.h:131:
> +^Iif (!s->progs)$
>
> ERROR: braces {} are necessary for all arms of this statement
> #480: FILE: ebpf/rss.bpf.skeleton.h:131:
> +       if (!s->progs)
> [...]
>
> ERROR: code indent should never use tabs
> #481: FILE: ebpf/rss.bpf.skeleton.h:132:
> +^I^Igoto err;$
>
> ERROR: code indent should never use tabs
> #483: FILE: ebpf/rss.bpf.skeleton.h:134:
> +^Is->progs[0].name = "tun_rss_steering_prog";$
>
> ERROR: code indent should never use tabs
> #484: FILE: ebpf/rss.bpf.skeleton.h:135:
> +^Is->progs[0].prog = &obj->progs.tun_rss_steering_prog;$
>
> ERROR: code indent should never use tabs
> #485: FILE: ebpf/rss.bpf.skeleton.h:136:
> +^Is->progs[0].link = &obj->links.tun_rss_steering_prog;$
>
> ERROR: code indent should never use tabs
> #487: FILE: ebpf/rss.bpf.skeleton.h:138:
> +^Is->data_sz = 7864;$
>
> ERROR: code indent should never use tabs
> #488: FILE: ebpf/rss.bpf.skeleton.h:139:
> +^Is->data = (void *)"\$
>
> ERROR: code indent should never use tabs
> #766: FILE: ebpf/rss.bpf.skeleton.h:417:
> +^Ireturn 0;$
>
> ERROR: code indent should never use tabs
> #768: FILE: ebpf/rss.bpf.skeleton.h:419:
> +^Ibpf_object__destroy_skeleton(s);$
>
> ERROR: code indent should never use tabs
> #769: FILE: ebpf/rss.bpf.skeleton.h:420:
> +^Ireturn -1;$
>
> total: 85 errors, 3 warnings, 758 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 043dbde56379 (virtio-net: Added eBPF RSS to
> virtio-net.)
> WARNING: line over 80 characters
> #185: FILE: hw/net/virtio-net.c:2868:
> +                    warn_report("Can't post-load eBPF RSS - fallback to
> software RSS");
>
> total: 0 errors, 1 warnings, 214 lines checked
>
> Patch 5/7 has style problems, please review.  If any of these errors
> are false positives report them to the maintainer, see
> CHECKPATCH in MAINTAINERS.
> 6/7 Checking commit 57b0f9a94036 (docs: Added eBPF documentation.)
> Use of uninitialized value $acpi_testexpected in string eq at ./scripts/
> checkpatch.pl line 1529.
> WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
> #16:
> 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 ad293ca1c684 (MAINTAINERS: Added eBPF maintainers
> information.)
> === OUTPUT END ===
>
> Test command exited with code: 1
>
>
> The full log is available at
>
> http://patchew.org/logs/20210325153529.75831-1-andrew@daynix.com/testing.checkpatch/?type=message
> .
> ---
> Email generated automatically by Patchew [https://patchew.org/].
> Please send your feedback to patchew-devel@redhat.com

[-- Attachment #2: Type: text/html, Size: 20016 bytes --]

  reply	other threads:[~2021-04-01  7:25 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-25 15:35 [PATCH v5 0/7] eBPF RSS support for virtio-net Andrew Melnychenko
2021-03-25 15:35 ` [PATCH v5 1/7] net/tap: Added TUNSETSTEERINGEBPF code Andrew Melnychenko
2021-03-25 15:35 ` [PATCH v5 2/7] net: Added SetSteeringEBPF method for NetClientState Andrew Melnychenko
2021-03-25 15:35 ` [PATCH v5 3/7] ebpf: Added eBPF RSS program Andrew Melnychenko
2021-03-25 15:35 ` [PATCH v5 4/7] ebpf: Added eBPF RSS loader Andrew Melnychenko
2021-03-25 15:35 ` [PATCH v5 5/7] virtio-net: Added eBPF RSS to virtio-net Andrew Melnychenko
2021-03-25 15:35 ` [PATCH v5 6/7] docs: Added eBPF documentation Andrew Melnychenko
2021-03-25 15:35 ` [PATCH v5 7/7] MAINTAINERS: Added eBPF maintainers information Andrew Melnychenko
2021-03-25 15:58 ` [PATCH v5 0/7] eBPF RSS support for virtio-net no-reply
2021-04-01  7:22   ` Andrew Melnichenko [this message]
2021-04-02  2:56 ` Jason Wang
2021-04-02  5:21   ` Yuri Benditovich
2021-04-02  5:25     ` Yuri Benditovich
2021-05-14 13:43 ` Michael S. Tsirkin
2021-05-17 15:30   ` Yuri Benditovich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CABcq3pECgKYk34_pSZHcyGJLYpcXXPXTE6er2dpSOgCj+4+qOQ@mail.gmail.com \
    --to=andrew@daynix.com \
    --cc=berrange@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=mst@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=yan@daynix.com \
    --cc=yuri.benditovich@daynix.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).