From: Erez Geva <erez.geva.ext@siemens.com>
To: netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org,
Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>,
Arnd Bergmann <arnd@arndb.de>,
Cong Wang <xiyou.wangcong@gmail.com>,
"David S . Miller" <davem@davemloft.net>,
Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>,
Jakub Kicinski <kuba@kernel.org>,
Jamal Hadi Salim <jhs@mojatatu.com>,
Jiri Pirko <jiri@resnulli.us>,
Alexei Starovoitov <ast@kernel.org>,
Colin Ian King <colin.king@canonical.com>,
Daniel Borkmann <daniel@iogearbox.net>,
Eric Dumazet <edumazet@google.com>,
Eyal Birger <eyal.birger@gmail.com>,
"Gustavo A . R . Silva" <gustavoars@kernel.org>,
Jakub Sitnicki <jakub@cloudflare.com>,
John Ogness <john.ogness@linutronix.de>,
Jon Rosen <jrosen@cisco.com>, Kees Cook <keescook@chromium.org>,
Mao Wenan <maowenan@huawei.com>,
Marc Kleine-Budde <mkl@pengutronix.de>,
Martin KaFai Lau <kafai@fb.com>,
Matthieu Baerts <matthieu.baerts@tessares.net>,
Andrei Vagin <avagin@gmail.com>,
Dmitry Safonov <0x7f454c46@gmail.com>,
"Eric W . Biederman" <ebiederm@xmission.com>,
Ingo Molnar <mingo@kernel.org>,
John Stultz <john.stultz@linaro.org>,
Miaohe Lin <linmiaohe@huawei.com>,
Michal Kubecek <mkubecek@suse.cz>,
Or Cohen <orcohen@paloaltonetworks.com>,
Oleg Nesterov <oleg@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
Richard Cochran <richardcochran@gmail.com>,
Stefan Schmidt <stefan@datenfreihafen.org>,
Willem de Bruijn <willemb@google.com>,
Xie He <xie.he.0141@gmail.com>, Stephen Boyd <sboyd@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
Vladis Dronov <vdronov@redhat.com>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Frederic Weisbecker <frederic@kernel.org>
Cc: Vinicius Costa Gomes <vinicius.gomes@intel.com>,
Vedang Patel <vedang.patel@intel.com>,
Ines Molzahn <ines.molzahn@siemens.com>,
Simon Sudler <simon.sudler@siemens.com>,
Andreas Meisinger <andreas.meisinger@siemens.com>,
Andreas Bucher <andreas.bucher@siemens.com>,
Henning Schild <henning.schild@siemens.com>,
Jan Kiszka <jan.kiszka@siemens.com>,
Andreas Zirkler <andreas.zirkler@siemens.com>,
Ermin Sakic <ermin.sakic@siemens.com>,
An Ninh Nguyen <anninh.nguyen@siemens.com>,
Michael Saenger <michael.saenger@siemens.com>,
Bernd Maehringer <bernd.maehringer@siemens.com>,
Gisela Greinert <gisela.greinert@siemens.com>,
Erez Geva <erez.geva.ext@siemens.com>,
Erez Geva <ErezGeva2@gmail.com>
Subject: [PATCH 2/3] Pass TX sending hardware timestamp to a socket's buffer.
Date: Wed, 9 Dec 2020 15:37:05 +0100 [thread overview]
Message-ID: <20201209143707.13503-3-erez.geva.ext@siemens.com> (raw)
In-Reply-To: <20201209143707.13503-1-erez.geva.ext@siemens.com>
Pass TX sending hardware timestamp from the socket layer to
a socket's buffer. The TC ETC Qdisc will pass it
to the interface network driver.
- Add the hardware timestamp to the IP cork, to support
the use of IP/UDP with the TX sending hardware timestamp
when sending through the TC ETF Qdisc
- Pass the TX sending hardware timestamp to a socket's buffer
using the hardware timestamp on the socket's buffer shared information.
Note: The socket buffer's hardware timestamp is used by
the network interface driver to send the actual sending timestamp
back to the application.
The timestamp is used by the TC ETF before the buffer
arrives in the network interface driver.
Signed-off-by: Erez Geva <erez.geva.ext@siemens.com>
---
include/net/inet_sock.h | 1 +
net/ipv4/ip_output.c | 2 ++
net/ipv4/raw.c | 1 +
net/ipv6/ip6_output.c | 2 ++
net/ipv6/raw.c | 1 +
net/packet/af_packet.c | 3 +++
6 files changed, 10 insertions(+)
diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h
index 89163ef8cf4b..e74e8dabf63d 100644
--- a/include/net/inet_sock.h
+++ b/include/net/inet_sock.h
@@ -160,6 +160,7 @@ struct inet_cork {
char priority;
__u16 gso_size;
u64 transmit_time;
+ u64 transmit_hw_time;
u32 mark;
};
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
index 879b76ae4435..416598c864e3 100644
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -1282,6 +1282,7 @@ static int ip_setup_cork(struct sock *sk, struct inet_cork *cork,
cork->mark = ipc->sockc.mark;
cork->priority = ipc->priority;
cork->transmit_time = ipc->sockc.transmit_time;
+ cork->transmit_hw_time = ipc->sockc.transmit_hw_time;
cork->tx_flags = 0;
sock_tx_timestamp(sk, ipc->sockc.tsflags, &cork->tx_flags);
@@ -1545,6 +1546,7 @@ struct sk_buff *__ip_make_skb(struct sock *sk,
skb->priority = (cork->tos != -1) ? cork->priority: sk->sk_priority;
skb->mark = cork->mark;
skb->tstamp = cork->transmit_time;
+ skb_hwtstamps(skb)->hwtstamp = ns_to_ktime(cork->transmit_hw_time);
/*
* Steal rt from cork.dst to avoid a pair of atomic_inc/atomic_dec
* on dst refcount
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
index 7d26e0f8bdae..213a47fb2df8 100644
--- a/net/ipv4/raw.c
+++ b/net/ipv4/raw.c
@@ -378,6 +378,7 @@ static int raw_send_hdrinc(struct sock *sk, struct flowi4 *fl4,
skb->priority = sk->sk_priority;
skb->mark = sockc->mark;
skb->tstamp = sockc->transmit_time;
+ skb_hwtstamps(skb)->hwtstamp = ns_to_ktime(sockc->transmit_hw_time);
skb_dst_set(skb, &rt->dst);
*rtp = NULL;
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index 749ad72386b2..8cff05f5aa8a 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -1375,6 +1375,7 @@ static int ip6_setup_cork(struct sock *sk, struct inet_cork_full *cork,
cork->base.length = 0;
cork->base.transmit_time = ipc6->sockc.transmit_time;
+ cork->base.transmit_hw_time = ipc6->sockc.transmit_hw_time;
return 0;
}
@@ -1841,6 +1842,7 @@ struct sk_buff *__ip6_make_skb(struct sock *sk,
skb->mark = cork->base.mark;
skb->tstamp = cork->base.transmit_time;
+ skb_hwtstamps(skb)->hwtstamp = ns_to_ktime(cork->base.transmit_hw_time);
skb_dst_set(skb, dst_clone(&rt->dst));
IP6_UPD_PO_STATS(net, rt->rt6i_idev, IPSTATS_MIB_OUT, skb->len);
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
index 6e4ab80a3b94..417f21867782 100644
--- a/net/ipv6/raw.c
+++ b/net/ipv6/raw.c
@@ -648,6 +648,7 @@ static int rawv6_send_hdrinc(struct sock *sk, struct msghdr *msg, int length,
skb->priority = sk->sk_priority;
skb->mark = sockc->mark;
skb->tstamp = sockc->transmit_time;
+ skb_hwtstamps(skb)->hwtstamp = ns_to_ktime(sockc->transmit_hw_time);
skb_put(skb, length);
skb_reset_network_header(skb);
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index 7a18ffff8551..c762d5bcecc2 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -1986,6 +1986,7 @@ static int packet_sendmsg_spkt(struct socket *sock, struct msghdr *msg,
skb->priority = sk->sk_priority;
skb->mark = sk->sk_mark;
skb->tstamp = sockc.transmit_time;
+ skb_hwtstamps(skb)->hwtstamp = ns_to_ktime(sockc.transmit_hw_time);
skb_setup_tx_timestamp(skb, sockc.tsflags);
@@ -2500,6 +2501,7 @@ static int tpacket_fill_skb(struct packet_sock *po, struct sk_buff *skb,
skb->priority = po->sk.sk_priority;
skb->mark = po->sk.sk_mark;
skb->tstamp = sockc->transmit_time;
+ skb_hwtstamps(skb)->hwtstamp = ns_to_ktime(sockc->transmit_hw_time);
skb_setup_tx_timestamp(skb, sockc->tsflags);
skb_zcopy_set_nouarg(skb, ph.raw);
@@ -2975,6 +2977,7 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)
skb->priority = sk->sk_priority;
skb->mark = sockc.mark;
skb->tstamp = sockc.transmit_time;
+ skb_hwtstamps(skb)->hwtstamp = ns_to_ktime(sockc.transmit_hw_time);
if (has_vnet_hdr) {
err = virtio_net_hdr_to_skb(skb, &vnet_hdr, vio_le());
--
2.20.1
next prev parent reply other threads:[~2020-12-09 15:59 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-09 14:37 [PATCH 0/3] Add sending TX hardware timestamp for TC ETF Qdisc Erez Geva
2020-12-09 14:37 ` [PATCH 1/3] Add TX sending hardware timestamp Erez Geva
2020-12-09 14:48 ` Willem de Bruijn
2020-12-09 15:21 ` Geva, Erez
2020-12-09 17:37 ` Willem de Bruijn
2020-12-09 20:18 ` Geva, Erez
2020-12-10 19:11 ` Willem de Bruijn
2020-12-10 22:37 ` Geva, Erez
2020-12-10 23:30 ` Willem de Bruijn
2020-12-11 0:27 ` Vinicius Costa Gomes
2020-12-11 14:44 ` Geva, Erez
2020-12-11 15:15 ` Willem de Bruijn
2020-12-11 14:22 ` Geva, Erez
2020-12-10 3:11 ` kernel test robot
2020-12-10 12:41 ` Geva, Erez
2020-12-10 18:17 ` Geva, Erez
2020-12-12 8:47 ` [kbuild-all] " Philip Li
2020-12-16 2:01 ` Rong Chen
2020-12-09 14:37 ` Erez Geva [this message]
2020-12-09 14:37 ` [PATCH 3/3] The TC ETF Qdisc pass the hardware timestamp to the interface driver Erez Geva
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=20201209143707.13503-3-erez.geva.ext@siemens.com \
--to=erez.geva.ext@siemens.com \
--cc=0x7f454c46@gmail.com \
--cc=ErezGeva2@gmail.com \
--cc=andreas.bucher@siemens.com \
--cc=andreas.meisinger@siemens.com \
--cc=andreas.zirkler@siemens.com \
--cc=anninh.nguyen@siemens.com \
--cc=arnd@arndb.de \
--cc=ast@kernel.org \
--cc=avagin@gmail.com \
--cc=bernd.maehringer@siemens.com \
--cc=bigeasy@linutronix.de \
--cc=colin.king@canonical.com \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=ebiederm@xmission.com \
--cc=edumazet@google.com \
--cc=ermin.sakic@siemens.com \
--cc=eyal.birger@gmail.com \
--cc=frederic@kernel.org \
--cc=gisela.greinert@siemens.com \
--cc=gustavoars@kernel.org \
--cc=henning.schild@siemens.com \
--cc=ines.molzahn@siemens.com \
--cc=jakub@cloudflare.com \
--cc=jan.kiszka@siemens.com \
--cc=jhs@mojatatu.com \
--cc=jiri@resnulli.us \
--cc=john.ogness@linutronix.de \
--cc=john.stultz@linaro.org \
--cc=jrosen@cisco.com \
--cc=kafai@fb.com \
--cc=keescook@chromium.org \
--cc=kuba@kernel.org \
--cc=kuznet@ms2.inr.ac.ru \
--cc=linmiaohe@huawei.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maowenan@huawei.com \
--cc=matthieu.baerts@tessares.net \
--cc=michael.saenger@siemens.com \
--cc=mingo@kernel.org \
--cc=mkl@pengutronix.de \
--cc=mkubecek@suse.cz \
--cc=netdev@vger.kernel.org \
--cc=oleg@redhat.com \
--cc=orcohen@paloaltonetworks.com \
--cc=peterz@infradead.org \
--cc=richardcochran@gmail.com \
--cc=sboyd@kernel.org \
--cc=simon.sudler@siemens.com \
--cc=stefan@datenfreihafen.org \
--cc=tglx@linutronix.de \
--cc=vdronov@redhat.com \
--cc=vedang.patel@intel.com \
--cc=vinicius.gomes@intel.com \
--cc=willemb@google.com \
--cc=xie.he.0141@gmail.com \
--cc=xiyou.wangcong@gmail.com \
--cc=yoshfuji@linux-ipv6.org \
/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).