From: Vinicius Costa Gomes <vinicius.gomes@intel.com>
To: Song Yoong Siang <yoong.siang.song@intel.com>,
Jesse Brandeburg <jesse.brandeburg@intel.com>,
Tony Nguyen <anthony.l.nguyen@intel.com>,
"David S . Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Richard Cochran <richardcochran@gmail.com>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Jesper Dangaard Brouer <hawk@kernel.org>,
John Fastabend <john.fastabend@gmail.com>,
Stanislav Fomichev <sdf@google.com>,
Florian Bezdeka <florian.bezdeka@siemens.com>,
Kurt Kanzenbach <kurt@linutronix.de>,
Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Cc: intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, bpf@vger.kernel.org,
xdp-hints@xdp-project.net
Subject: Re: [PATCH iwl-next,v4 1/1] igc: Add Tx hardware timestamp request for AF_XDP zero-copy packet
Date: Mon, 25 Mar 2024 19:29:04 -0700 [thread overview]
Message-ID: <87h6gtpvyn.fsf@intel.com> (raw)
In-Reply-To: <20240325020928.1987947-1-yoong.siang.song@intel.com>
Song Yoong Siang <yoong.siang.song@intel.com> writes:
> This patch adds support to per-packet Tx hardware timestamp request to
> AF_XDP zero-copy packet via XDP Tx metadata framework. Please note that
> user needs to enable Tx HW timestamp capability via igc_ioctl() with
> SIOCSHWTSTAMP cmd before sending xsk Tx hardware timestamp request.
>
> Same as implementation in RX timestamp XDP hints kfunc metadata, Timer 0
> (adjustable clock) is used in xsk Tx hardware timestamp. i225/i226 have
> four sets of timestamping registers. *skb and *xsk_tx_buffer pointers
> are used to indicate whether the timestamping register is already occupied.
>
> Furthermore, a boolean variable named xsk_pending_ts is used to hold the
> transmit completion until the tx hardware timestamp is ready. This is
> because, for i225/i226, the timestamp notification event comes some time
> after the transmit completion event. The driver will retrigger hardware irq
> to clean the packet after retrieve the tx hardware timestamp.
>
> Besides, xsk_meta is added into struct igc_tx_timestamp_request as a hook
> to the metadata location of the transmit packet. When the Tx timestamp
> interrupt is fired, the interrupt handler will copy the value of Tx hwts
> into metadata location via xsk_tx_metadata_complete().
>
> This patch is tested with tools/testing/selftests/bpf/xdp_hw_metadata
> on Intel ADL-S platform. Below are the test steps and results.
>
> Test Step 1: Run xdp_hw_metadata app
> ./xdp_hw_metadata <iface> > /dev/shm/result.log
>
> Test Step 2: Enable Tx hardware timestamp
> hwstamp_ctl -i <iface> -t 1 -r 1
>
> Test Step 3: Run ptp4l and phc2sys for time synchronization
>
> Test Step 4: Generate UDP packets with 1ms interval for 10s
> trafgen --dev <iface> '{eth(da=<addr>), udp(dp=9091)}' -t 1ms -n 10000
>
> Test Step 5: Rerun Step 1-3 with 10s iperf3 as background traffic
>
> Test Step 6: Rerun Step 1-4 with 10s iperf3 as background traffic
>
> Based on iperf3 results below, the impact of holding tx completion to
> throughput is not observable.
>
> Result of last UDP packet (no. 10000) in Step 4:
> poll: 1 (0) skip=99 fail=0 redir=10000
> xsk_ring_cons__peek: 1
> 0x5640a37972d0: rx_desc[9999]->addr=f2110 addr=f2110 comp_addr=f2110 EoP
> rx_hash: 0x2049BE1D with RSS type:0x1
> HW RX-time: 1679819246792971268 (sec:1679819246.7930) delta to User RX-time sec:0.0000 (14.990 usec)
> XDP RX-time: 1679819246792981987 (sec:1679819246.7930) delta to User RX-time sec:0.0000 (4.271 usec)
> No rx_vlan_tci or rx_vlan_proto, err=-95
> 0x5640a37972d0: ping-pong with csum=ab19 (want 315b) csum_start=34 csum_offset=6
> 0x5640a37972d0: complete tx idx=9999 addr=f010
> HW TX-complete-time: 1679819246793036971 (sec:1679819246.7930) delta to User TX-complete-time sec:0.0001 (77.656 usec)
> XDP RX-time: 1679819246792981987 (sec:1679819246.7930) delta to User TX-complete-time sec:0.0001 (132.640 usec)
> HW RX-time: 1679819246792971268 (sec:1679819246.7930) delta to HW TX-complete-time sec:0.0001 (65.703 usec)
> 0x5640a37972d0: complete rx idx=10127 addr=f2110
>
> Result of iperf3 without tx hwts request in step 5:
> [ ID] Interval Transfer Bitrate Retr
> [ 5] 0.00-10.00 sec 2.74 GBytes 2.36 Gbits/sec 0 sender
> [ 5] 0.00-10.05 sec 2.74 GBytes 2.34 Gbits/sec receiver
>
> Result of iperf3 running parallel with trafgen command in step 6:
> [ ID] Interval Transfer Bitrate Retr
> [ 5] 0.00-10.00 sec 2.74 GBytes 2.36 Gbits/sec 0 sender
> [ 5] 0.00-10.04 sec 2.74 GBytes 2.34 Gbits/sec receiver
>
> Co-developed-by: Lai Peter Jun Ann <jun.ann.lai@intel.com>
> Signed-off-by: Lai Peter Jun Ann <jun.ann.lai@intel.com>
> Signed-off-by: Song Yoong Siang <yoong.siang.song@intel.com>
> Acked-by: John Fastabend <john.fastabend@gmail.com>
> ---
> V1: https://patchwork.kernel.org/project/netdevbpf/patch/20231215162158.951925-1-yoong.siang.song@intel.com/
> V2: https://patchwork.kernel.org/project/netdevbpf/cover/20240301162348.898619-1-yoong.siang.song@intel.com/
> V3: https://patchwork.kernel.org/project/netdevbpf/cover/20240303083225.1184165-1-yoong.siang.song@intel.com/
>
> changelog:
> V1 -> V2
> - In struct igc_tx_timestamp_request, keep a pointer to igc_tx_buffer,
> instead of pointing xsk_pending_ts (Vinicius).
> - In struct igc_tx_timestamp_request, introduce buffer_type to indicate
> whether skb or igc_tx_buffer pointer should be use (Vinicius).
> - In struct igc_metadata_request, remove igc_adapter pointer (Vinicius).
> - When request tx hwts, copy the value of cmd_type, instead of using
> pointer (Vinicius).
> - For boolean variable, use true and false, instead of 1 and 0 (Vinicius).
> - In igc_xsk_request_timestamp(), make an early return if none of the 4 ts
> registers is available (Vinicius).
> - Create helper functions to clear tx buffer and skb for tstamp (John).
> - Perform throughput test with mix traffic (Vinicius & John).
> V2 -> V3
> - Improve tstamp reg searching loop for better readability (John).
> - In igc_ptp_free_tx_buffer(), add comment to inform user that
> tstamp->xsk_tx_buffer and tstamp->skb are in union (John).
> V3 -> V4
> - Add protection with xp_tx_metadata_enabled (Kurt & Maciej).
> ---
> ---
> drivers/net/ethernet/intel/igc/igc.h | 71 ++++++++------
> drivers/net/ethernet/intel/igc/igc_main.c | 113 ++++++++++++++++++++--
> drivers/net/ethernet/intel/igc/igc_ptp.c | 51 ++++++++--
> 3 files changed, 195 insertions(+), 40 deletions(-)
>
[...]
> diff --git a/drivers/net/ethernet/intel/igc/igc_ptp.c b/drivers/net/ethernet/intel/igc/igc_ptp.c
> index 885faaa7b9de..1bb026232efc 100644
> --- a/drivers/net/ethernet/intel/igc/igc_ptp.c
> +++ b/drivers/net/ethernet/intel/igc/igc_ptp.c
> @@ -11,6 +11,7 @@
> #include <linux/ktime.h>
> #include <linux/delay.h>
> #include <linux/iopoll.h>
> +#include <net/xdp_sock_drv.h>
>
> #define INCVALUE_MASK 0x7fffffff
> #define ISGN 0x80000000
> @@ -545,6 +546,30 @@ static void igc_ptp_enable_rx_timestamp(struct igc_adapter *adapter)
> wr32(IGC_TSYNCRXCTL, val);
> }
>
> +static void igc_ptp_free_tx_buffer(struct igc_adapter *adapter,
> + struct igc_tx_timestamp_request *tstamp)
> +{
> + if (tstamp->buffer_type == IGC_TX_BUFFER_TYPE_XSK) {
> + /* Release the transmit completion */
> + tstamp->xsk_tx_buffer->xsk_pending_ts = false;
> +
> + /* Note: tstamp->skb and tstamp->xsk_tx_buffer are in union.
> + * By setting tstamp->xsk_tx_buffer to NULL, tstamp->skb will
> + * become NULL as well.
> + */
> + tstamp->xsk_tx_buffer = NULL;
> + tstamp->buffer_type = 0;
> +
> + /* Trigger txrx interrupt for transmit completion */
> + igc_xsk_wakeup(adapter->netdev, tstamp->xsk_queue_index, 0);
> +
> + return;
> + }
> +
> + dev_kfree_skb_any(tstamp->skb);
> + tstamp->skb = NULL;
> +}
> +
> static void igc_ptp_clear_tx_tstamp(struct igc_adapter *adapter)
> {
> unsigned long flags;
> @@ -555,8 +580,8 @@ static void igc_ptp_clear_tx_tstamp(struct igc_adapter *adapter)
> for (i = 0; i < IGC_MAX_TX_TSTAMP_REGS; i++) {
> struct igc_tx_timestamp_request *tstamp = &adapter->tx_tstamp[i];
>
> - dev_kfree_skb_any(tstamp->skb);
> - tstamp->skb = NULL;
> + if (tstamp->skb)
> + igc_ptp_free_tx_buffer(adapter, tstamp);
> }
>
More a question: you are potentially triggering an interrupt from
igc_ptp_clear_tx_tstamp() (igc_xsk_wakeup()) which can be called from
igc_down(). So, how does it work when there's a pending timestamp and
you remove the igc module? (example of a situation that it might be
problematic).
Cheers,
--
Vinicius
WARNING: multiple messages have this Message-ID (diff)
From: Vinicius Costa Gomes <vinicius.gomes@intel.com>
To: Song Yoong Siang <yoong.siang.song@intel.com>,
Jesse Brandeburg <jesse.brandeburg@intel.com>,
Tony Nguyen <anthony.l.nguyen@intel.com>,
"David S . Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Richard Cochran <richardcochran@gmail.com>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Jesper Dangaard Brouer <hawk@kernel.org>,
John Fastabend <john.fastabend@gmail.com>,
Stanislav Fomichev <sdf@google.com>,
Florian Bezdeka <florian.bezdeka@siemens.com>,
Kurt Kanzenbach <kurt@linutronix.de>,
Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Cc: netdev@vger.kernel.org, bpf@vger.kernel.org,
xdp-hints@xdp-project.net, intel-wired-lan@lists.osuosl.org,
linux-kernel@vger.kernel.org
Subject: Re: [Intel-wired-lan] [PATCH iwl-next, v4 1/1] igc: Add Tx hardware timestamp request for AF_XDP zero-copy packet
Date: Mon, 25 Mar 2024 19:29:04 -0700 [thread overview]
Message-ID: <87h6gtpvyn.fsf@intel.com> (raw)
In-Reply-To: <20240325020928.1987947-1-yoong.siang.song@intel.com>
Song Yoong Siang <yoong.siang.song@intel.com> writes:
> This patch adds support to per-packet Tx hardware timestamp request to
> AF_XDP zero-copy packet via XDP Tx metadata framework. Please note that
> user needs to enable Tx HW timestamp capability via igc_ioctl() with
> SIOCSHWTSTAMP cmd before sending xsk Tx hardware timestamp request.
>
> Same as implementation in RX timestamp XDP hints kfunc metadata, Timer 0
> (adjustable clock) is used in xsk Tx hardware timestamp. i225/i226 have
> four sets of timestamping registers. *skb and *xsk_tx_buffer pointers
> are used to indicate whether the timestamping register is already occupied.
>
> Furthermore, a boolean variable named xsk_pending_ts is used to hold the
> transmit completion until the tx hardware timestamp is ready. This is
> because, for i225/i226, the timestamp notification event comes some time
> after the transmit completion event. The driver will retrigger hardware irq
> to clean the packet after retrieve the tx hardware timestamp.
>
> Besides, xsk_meta is added into struct igc_tx_timestamp_request as a hook
> to the metadata location of the transmit packet. When the Tx timestamp
> interrupt is fired, the interrupt handler will copy the value of Tx hwts
> into metadata location via xsk_tx_metadata_complete().
>
> This patch is tested with tools/testing/selftests/bpf/xdp_hw_metadata
> on Intel ADL-S platform. Below are the test steps and results.
>
> Test Step 1: Run xdp_hw_metadata app
> ./xdp_hw_metadata <iface> > /dev/shm/result.log
>
> Test Step 2: Enable Tx hardware timestamp
> hwstamp_ctl -i <iface> -t 1 -r 1
>
> Test Step 3: Run ptp4l and phc2sys for time synchronization
>
> Test Step 4: Generate UDP packets with 1ms interval for 10s
> trafgen --dev <iface> '{eth(da=<addr>), udp(dp=9091)}' -t 1ms -n 10000
>
> Test Step 5: Rerun Step 1-3 with 10s iperf3 as background traffic
>
> Test Step 6: Rerun Step 1-4 with 10s iperf3 as background traffic
>
> Based on iperf3 results below, the impact of holding tx completion to
> throughput is not observable.
>
> Result of last UDP packet (no. 10000) in Step 4:
> poll: 1 (0) skip=99 fail=0 redir=10000
> xsk_ring_cons__peek: 1
> 0x5640a37972d0: rx_desc[9999]->addr=f2110 addr=f2110 comp_addr=f2110 EoP
> rx_hash: 0x2049BE1D with RSS type:0x1
> HW RX-time: 1679819246792971268 (sec:1679819246.7930) delta to User RX-time sec:0.0000 (14.990 usec)
> XDP RX-time: 1679819246792981987 (sec:1679819246.7930) delta to User RX-time sec:0.0000 (4.271 usec)
> No rx_vlan_tci or rx_vlan_proto, err=-95
> 0x5640a37972d0: ping-pong with csum=ab19 (want 315b) csum_start=34 csum_offset=6
> 0x5640a37972d0: complete tx idx=9999 addr=f010
> HW TX-complete-time: 1679819246793036971 (sec:1679819246.7930) delta to User TX-complete-time sec:0.0001 (77.656 usec)
> XDP RX-time: 1679819246792981987 (sec:1679819246.7930) delta to User TX-complete-time sec:0.0001 (132.640 usec)
> HW RX-time: 1679819246792971268 (sec:1679819246.7930) delta to HW TX-complete-time sec:0.0001 (65.703 usec)
> 0x5640a37972d0: complete rx idx=10127 addr=f2110
>
> Result of iperf3 without tx hwts request in step 5:
> [ ID] Interval Transfer Bitrate Retr
> [ 5] 0.00-10.00 sec 2.74 GBytes 2.36 Gbits/sec 0 sender
> [ 5] 0.00-10.05 sec 2.74 GBytes 2.34 Gbits/sec receiver
>
> Result of iperf3 running parallel with trafgen command in step 6:
> [ ID] Interval Transfer Bitrate Retr
> [ 5] 0.00-10.00 sec 2.74 GBytes 2.36 Gbits/sec 0 sender
> [ 5] 0.00-10.04 sec 2.74 GBytes 2.34 Gbits/sec receiver
>
> Co-developed-by: Lai Peter Jun Ann <jun.ann.lai@intel.com>
> Signed-off-by: Lai Peter Jun Ann <jun.ann.lai@intel.com>
> Signed-off-by: Song Yoong Siang <yoong.siang.song@intel.com>
> Acked-by: John Fastabend <john.fastabend@gmail.com>
> ---
> V1: https://patchwork.kernel.org/project/netdevbpf/patch/20231215162158.951925-1-yoong.siang.song@intel.com/
> V2: https://patchwork.kernel.org/project/netdevbpf/cover/20240301162348.898619-1-yoong.siang.song@intel.com/
> V3: https://patchwork.kernel.org/project/netdevbpf/cover/20240303083225.1184165-1-yoong.siang.song@intel.com/
>
> changelog:
> V1 -> V2
> - In struct igc_tx_timestamp_request, keep a pointer to igc_tx_buffer,
> instead of pointing xsk_pending_ts (Vinicius).
> - In struct igc_tx_timestamp_request, introduce buffer_type to indicate
> whether skb or igc_tx_buffer pointer should be use (Vinicius).
> - In struct igc_metadata_request, remove igc_adapter pointer (Vinicius).
> - When request tx hwts, copy the value of cmd_type, instead of using
> pointer (Vinicius).
> - For boolean variable, use true and false, instead of 1 and 0 (Vinicius).
> - In igc_xsk_request_timestamp(), make an early return if none of the 4 ts
> registers is available (Vinicius).
> - Create helper functions to clear tx buffer and skb for tstamp (John).
> - Perform throughput test with mix traffic (Vinicius & John).
> V2 -> V3
> - Improve tstamp reg searching loop for better readability (John).
> - In igc_ptp_free_tx_buffer(), add comment to inform user that
> tstamp->xsk_tx_buffer and tstamp->skb are in union (John).
> V3 -> V4
> - Add protection with xp_tx_metadata_enabled (Kurt & Maciej).
> ---
> ---
> drivers/net/ethernet/intel/igc/igc.h | 71 ++++++++------
> drivers/net/ethernet/intel/igc/igc_main.c | 113 ++++++++++++++++++++--
> drivers/net/ethernet/intel/igc/igc_ptp.c | 51 ++++++++--
> 3 files changed, 195 insertions(+), 40 deletions(-)
>
[...]
> diff --git a/drivers/net/ethernet/intel/igc/igc_ptp.c b/drivers/net/ethernet/intel/igc/igc_ptp.c
> index 885faaa7b9de..1bb026232efc 100644
> --- a/drivers/net/ethernet/intel/igc/igc_ptp.c
> +++ b/drivers/net/ethernet/intel/igc/igc_ptp.c
> @@ -11,6 +11,7 @@
> #include <linux/ktime.h>
> #include <linux/delay.h>
> #include <linux/iopoll.h>
> +#include <net/xdp_sock_drv.h>
>
> #define INCVALUE_MASK 0x7fffffff
> #define ISGN 0x80000000
> @@ -545,6 +546,30 @@ static void igc_ptp_enable_rx_timestamp(struct igc_adapter *adapter)
> wr32(IGC_TSYNCRXCTL, val);
> }
>
> +static void igc_ptp_free_tx_buffer(struct igc_adapter *adapter,
> + struct igc_tx_timestamp_request *tstamp)
> +{
> + if (tstamp->buffer_type == IGC_TX_BUFFER_TYPE_XSK) {
> + /* Release the transmit completion */
> + tstamp->xsk_tx_buffer->xsk_pending_ts = false;
> +
> + /* Note: tstamp->skb and tstamp->xsk_tx_buffer are in union.
> + * By setting tstamp->xsk_tx_buffer to NULL, tstamp->skb will
> + * become NULL as well.
> + */
> + tstamp->xsk_tx_buffer = NULL;
> + tstamp->buffer_type = 0;
> +
> + /* Trigger txrx interrupt for transmit completion */
> + igc_xsk_wakeup(adapter->netdev, tstamp->xsk_queue_index, 0);
> +
> + return;
> + }
> +
> + dev_kfree_skb_any(tstamp->skb);
> + tstamp->skb = NULL;
> +}
> +
> static void igc_ptp_clear_tx_tstamp(struct igc_adapter *adapter)
> {
> unsigned long flags;
> @@ -555,8 +580,8 @@ static void igc_ptp_clear_tx_tstamp(struct igc_adapter *adapter)
> for (i = 0; i < IGC_MAX_TX_TSTAMP_REGS; i++) {
> struct igc_tx_timestamp_request *tstamp = &adapter->tx_tstamp[i];
>
> - dev_kfree_skb_any(tstamp->skb);
> - tstamp->skb = NULL;
> + if (tstamp->skb)
> + igc_ptp_free_tx_buffer(adapter, tstamp);
> }
>
More a question: you are potentially triggering an interrupt from
igc_ptp_clear_tx_tstamp() (igc_xsk_wakeup()) which can be called from
igc_down(). So, how does it work when there's a pending timestamp and
you remove the igc module? (example of a situation that it might be
problematic).
Cheers,
--
Vinicius
next prev parent reply other threads:[~2024-03-26 2:29 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-25 2:09 [PATCH iwl-next,v4 1/1] igc: Add Tx hardware timestamp request for AF_XDP zero-copy packet Song Yoong Siang
2024-03-25 2:09 ` [Intel-wired-lan] [PATCH iwl-next, v4 " Song Yoong Siang
2024-03-26 2:29 ` Vinicius Costa Gomes [this message]
2024-03-26 2:29 ` Vinicius Costa Gomes
2024-03-26 14:19 ` [PATCH iwl-next,v4 " Song, Yoong Siang
2024-03-26 14:19 ` [Intel-wired-lan] [PATCH iwl-next, v4 " Song, Yoong Siang
2024-03-26 18:30 ` [PATCH iwl-next,v4 " Vinicius Costa Gomes
2024-03-26 18:30 ` [Intel-wired-lan] [PATCH iwl-next, v4 " Vinicius Costa Gomes
2024-03-26 8:56 ` [PATCH iwl-next,v4 " Florian Bezdeka
2024-03-26 8:56 ` [Intel-wired-lan] [PATCH iwl-next, v4 " Florian Bezdeka
2024-03-26 13:08 ` [PATCH iwl-next,v4 " Kurt Kanzenbach
2024-03-26 13:08 ` [Intel-wired-lan] [PATCH iwl-next, v4 " Kurt Kanzenbach
2024-03-26 14:55 ` [xdp-hints] Re: [PATCH iwl-next,v4 " Song, Yoong Siang
2024-03-26 14:55 ` [Intel-wired-lan] [xdp-hints] Re: [PATCH iwl-next, v4 " Song, Yoong Siang
2024-03-27 11:21 ` [xdp-hints] Re: [PATCH iwl-next,v4 " Florian Bezdeka
2024-03-27 11:21 ` [Intel-wired-lan] [xdp-hints] Re: [PATCH iwl-next, v4 " Florian Bezdeka
2024-03-27 14:54 ` [xdp-hints] Re: [PATCH iwl-next,v4 " Song, Yoong Siang
2024-03-27 14:54 ` [Intel-wired-lan] [xdp-hints] Re: [PATCH iwl-next, v4 " Song, Yoong Siang
2024-03-27 15:07 ` [xdp-hints] Re: [PATCH iwl-next,v4 " Florian Bezdeka
2024-03-27 15:07 ` [Intel-wired-lan] [xdp-hints] Re: [PATCH iwl-next, v4 " Florian Bezdeka
2024-04-08 11:31 ` [Intel-wired-lan] " naamax.meir
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=87h6gtpvyn.fsf@intel.com \
--to=vinicius.gomes@intel.com \
--cc=anthony.l.nguyen@intel.com \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=florian.bezdeka@siemens.com \
--cc=hawk@kernel.org \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=jesse.brandeburg@intel.com \
--cc=john.fastabend@gmail.com \
--cc=kuba@kernel.org \
--cc=kurt@linutronix.de \
--cc=linux-kernel@vger.kernel.org \
--cc=maciej.fijalkowski@intel.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=richardcochran@gmail.com \
--cc=sdf@google.com \
--cc=xdp-hints@xdp-project.net \
--cc=yoong.siang.song@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.