diff options
-rw-r--r-- | Documentation/networking/timestamping.txt | 12 | ||||
-rw-r--r-- | Documentation/networking/timestamping/timestamping.c | 7 | ||||
-rw-r--r-- | include/linux/skbuff.h | 14 | ||||
-rw-r--r-- | include/net/sock.h | 11 | ||||
-rw-r--r-- | net/core/sock.c | 4 | ||||
-rw-r--r-- | net/socket.c | 12 |
6 files changed, 11 insertions, 49 deletions
diff --git a/Documentation/networking/timestamping.txt b/Documentation/networking/timestamping.txt index 8b4ad809df27..897f942b976b 100644 --- a/Documentation/networking/timestamping.txt +++ b/Documentation/networking/timestamping.txt | |||
@@ -88,15 +88,8 @@ hwtimeraw is the original hardware time stamp. Filled in if | |||
88 | SOF_TIMESTAMPING_RAW_HARDWARE is set. No assumptions about its | 88 | SOF_TIMESTAMPING_RAW_HARDWARE is set. No assumptions about its |
89 | relation to system time should be made. | 89 | relation to system time should be made. |
90 | 90 | ||
91 | hwtimetrans is the hardware time stamp transformed so that it | 91 | hwtimetrans is always zero. This field is deprecated. It used to hold |
92 | corresponds as good as possible to system time. This correlation is | 92 | hw timestamps converted to system time. Instead, expose the hardware |
93 | not perfect; as a consequence, sorting packets received via different | ||
94 | NICs by their hwtimetrans may differ from the order in which they were | ||
95 | received. hwtimetrans may be non-monotonic even for the same NIC. | ||
96 | Filled in if SOF_TIMESTAMPING_SYS_HARDWARE is set. Requires support | ||
97 | by the network device and will be empty without that support. This | ||
98 | field is DEPRECATED. Only one driver computes this value. New device | ||
99 | drivers must leave this zero. Instead, they can expose the hardware | ||
100 | clock device on the NIC directly as a HW PTP clock source, to allow | 93 | clock device on the NIC directly as a HW PTP clock source, to allow |
101 | time conversion in userspace and optionally synchronize system time | 94 | time conversion in userspace and optionally synchronize system time |
102 | with a userspace PTP stack such as linuxptp. For the PTP clock API, | 95 | with a userspace PTP stack such as linuxptp. For the PTP clock API, |
@@ -191,7 +184,6 @@ struct skb_shared_hwtstamps { | |||
191 | * since arbitrary point in time | 184 | * since arbitrary point in time |
192 | */ | 185 | */ |
193 | ktime_t hwtstamp; | 186 | ktime_t hwtstamp; |
194 | ktime_t syststamp; /* hwtstamp transformed to system time base */ | ||
195 | }; | 187 | }; |
196 | 188 | ||
197 | Time stamps for outgoing packets are to be generated as follows: | 189 | Time stamps for outgoing packets are to be generated as follows: |
diff --git a/Documentation/networking/timestamping/timestamping.c b/Documentation/networking/timestamping/timestamping.c index 8ba82bfe6a33..5cdfd743447b 100644 --- a/Documentation/networking/timestamping/timestamping.c +++ b/Documentation/networking/timestamping/timestamping.c | |||
@@ -76,7 +76,6 @@ static void usage(const char *error) | |||
76 | " SOF_TIMESTAMPING_RX_HARDWARE - hardware time stamping of incoming packets\n" | 76 | " SOF_TIMESTAMPING_RX_HARDWARE - hardware time stamping of incoming packets\n" |
77 | " SOF_TIMESTAMPING_RX_SOFTWARE - software fallback for incoming packets\n" | 77 | " SOF_TIMESTAMPING_RX_SOFTWARE - software fallback for incoming packets\n" |
78 | " SOF_TIMESTAMPING_SOFTWARE - request reporting of software time stamps\n" | 78 | " SOF_TIMESTAMPING_SOFTWARE - request reporting of software time stamps\n" |
79 | " SOF_TIMESTAMPING_SYS_HARDWARE - request reporting of transformed HW time stamps\n" | ||
80 | " SOF_TIMESTAMPING_RAW_HARDWARE - request reporting of raw HW time stamps\n" | 79 | " SOF_TIMESTAMPING_RAW_HARDWARE - request reporting of raw HW time stamps\n" |
81 | " SIOCGSTAMP - check last socket time stamp\n" | 80 | " SIOCGSTAMP - check last socket time stamp\n" |
82 | " SIOCGSTAMPNS - more accurate socket time stamp\n"); | 81 | " SIOCGSTAMPNS - more accurate socket time stamp\n"); |
@@ -202,9 +201,7 @@ static void printpacket(struct msghdr *msg, int res, | |||
202 | (long)stamp->tv_sec, | 201 | (long)stamp->tv_sec, |
203 | (long)stamp->tv_nsec); | 202 | (long)stamp->tv_nsec); |
204 | stamp++; | 203 | stamp++; |
205 | printf("HW transformed %ld.%09ld ", | 204 | /* skip deprecated HW transformed */ |
206 | (long)stamp->tv_sec, | ||
207 | (long)stamp->tv_nsec); | ||
208 | stamp++; | 205 | stamp++; |
209 | printf("HW raw %ld.%09ld", | 206 | printf("HW raw %ld.%09ld", |
210 | (long)stamp->tv_sec, | 207 | (long)stamp->tv_sec, |
@@ -361,8 +358,6 @@ int main(int argc, char **argv) | |||
361 | so_timestamping_flags |= SOF_TIMESTAMPING_RX_SOFTWARE; | 358 | so_timestamping_flags |= SOF_TIMESTAMPING_RX_SOFTWARE; |
362 | else if (!strcasecmp(argv[i], "SOF_TIMESTAMPING_SOFTWARE")) | 359 | else if (!strcasecmp(argv[i], "SOF_TIMESTAMPING_SOFTWARE")) |
363 | so_timestamping_flags |= SOF_TIMESTAMPING_SOFTWARE; | 360 | so_timestamping_flags |= SOF_TIMESTAMPING_SOFTWARE; |
364 | else if (!strcasecmp(argv[i], "SOF_TIMESTAMPING_SYS_HARDWARE")) | ||
365 | so_timestamping_flags |= SOF_TIMESTAMPING_SYS_HARDWARE; | ||
366 | else if (!strcasecmp(argv[i], "SOF_TIMESTAMPING_RAW_HARDWARE")) | 361 | else if (!strcasecmp(argv[i], "SOF_TIMESTAMPING_RAW_HARDWARE")) |
367 | so_timestamping_flags |= SOF_TIMESTAMPING_RAW_HARDWARE; | 362 | so_timestamping_flags |= SOF_TIMESTAMPING_RAW_HARDWARE; |
368 | else | 363 | else |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index b613557132b9..281deced7469 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
@@ -210,20 +210,9 @@ static inline void skb_frag_size_sub(skb_frag_t *frag, int delta) | |||
210 | * struct skb_shared_hwtstamps - hardware time stamps | 210 | * struct skb_shared_hwtstamps - hardware time stamps |
211 | * @hwtstamp: hardware time stamp transformed into duration | 211 | * @hwtstamp: hardware time stamp transformed into duration |
212 | * since arbitrary point in time | 212 | * since arbitrary point in time |
213 | * @syststamp: hwtstamp transformed to system time base (deprecated) | ||
214 | * | 213 | * |
215 | * Software time stamps generated by ktime_get_real() are stored in | 214 | * Software time stamps generated by ktime_get_real() are stored in |
216 | * skb->tstamp. The relation between the different kinds of time | 215 | * skb->tstamp. |
217 | * stamps is as follows: | ||
218 | * | ||
219 | * syststamp and tstamp can be compared against each other in | ||
220 | * arbitrary combinations. The accuracy of a | ||
221 | * syststamp/tstamp/"syststamp from other device" comparison is | ||
222 | * limited by the accuracy of the transformation into system time | ||
223 | * base. This depends on the device driver and its underlying | ||
224 | * hardware. The syststamp implementation is deprecated in favor | ||
225 | * of hwtstamps and hw PTP clock sources exposed directly to | ||
226 | * userspace. | ||
227 | * | 216 | * |
228 | * hwtstamps can only be compared against other hwtstamps from | 217 | * hwtstamps can only be compared against other hwtstamps from |
229 | * the same device. | 218 | * the same device. |
@@ -233,7 +222,6 @@ static inline void skb_frag_size_sub(skb_frag_t *frag, int delta) | |||
233 | */ | 222 | */ |
234 | struct skb_shared_hwtstamps { | 223 | struct skb_shared_hwtstamps { |
235 | ktime_t hwtstamp; | 224 | ktime_t hwtstamp; |
236 | ktime_t syststamp; | ||
237 | }; | 225 | }; |
238 | 226 | ||
239 | /* Definitions for tx_flags in struct skb_shared_info */ | 227 | /* Definitions for tx_flags in struct skb_shared_info */ |
diff --git a/include/net/sock.h b/include/net/sock.h index 720773304a85..b91c8868ab8d 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
@@ -707,7 +707,6 @@ enum sock_flags { | |||
707 | SOCK_TIMESTAMPING_RX_SOFTWARE, /* %SOF_TIMESTAMPING_RX_SOFTWARE */ | 707 | SOCK_TIMESTAMPING_RX_SOFTWARE, /* %SOF_TIMESTAMPING_RX_SOFTWARE */ |
708 | SOCK_TIMESTAMPING_SOFTWARE, /* %SOF_TIMESTAMPING_SOFTWARE */ | 708 | SOCK_TIMESTAMPING_SOFTWARE, /* %SOF_TIMESTAMPING_SOFTWARE */ |
709 | SOCK_TIMESTAMPING_RAW_HARDWARE, /* %SOF_TIMESTAMPING_RAW_HARDWARE */ | 709 | SOCK_TIMESTAMPING_RAW_HARDWARE, /* %SOF_TIMESTAMPING_RAW_HARDWARE */ |
710 | SOCK_TIMESTAMPING_SYS_HARDWARE, /* %SOF_TIMESTAMPING_SYS_HARDWARE */ | ||
711 | SOCK_FASYNC, /* fasync() active */ | 710 | SOCK_FASYNC, /* fasync() active */ |
712 | SOCK_RXQ_OVFL, | 711 | SOCK_RXQ_OVFL, |
713 | SOCK_ZEROCOPY, /* buffers from userspace */ | 712 | SOCK_ZEROCOPY, /* buffers from userspace */ |
@@ -2166,16 +2165,13 @@ sock_recv_timestamp(struct msghdr *msg, struct sock *sk, struct sk_buff *skb) | |||
2166 | * - software time stamp available and wanted | 2165 | * - software time stamp available and wanted |
2167 | * (SOCK_TIMESTAMPING_SOFTWARE) | 2166 | * (SOCK_TIMESTAMPING_SOFTWARE) |
2168 | * - hardware time stamps available and wanted | 2167 | * - hardware time stamps available and wanted |
2169 | * (SOCK_TIMESTAMPING_SYS_HARDWARE or | 2168 | * SOCK_TIMESTAMPING_RAW_HARDWARE |
2170 | * SOCK_TIMESTAMPING_RAW_HARDWARE) | ||
2171 | */ | 2169 | */ |
2172 | if (sock_flag(sk, SOCK_RCVTSTAMP) || | 2170 | if (sock_flag(sk, SOCK_RCVTSTAMP) || |
2173 | sock_flag(sk, SOCK_TIMESTAMPING_RX_SOFTWARE) || | 2171 | sock_flag(sk, SOCK_TIMESTAMPING_RX_SOFTWARE) || |
2174 | (kt.tv64 && sock_flag(sk, SOCK_TIMESTAMPING_SOFTWARE)) || | 2172 | (kt.tv64 && sock_flag(sk, SOCK_TIMESTAMPING_SOFTWARE)) || |
2175 | (hwtstamps->hwtstamp.tv64 && | 2173 | (hwtstamps->hwtstamp.tv64 && |
2176 | sock_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE)) || | 2174 | sock_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE))) |
2177 | (hwtstamps->syststamp.tv64 && | ||
2178 | sock_flag(sk, SOCK_TIMESTAMPING_SYS_HARDWARE))) | ||
2179 | __sock_recv_timestamp(msg, sk, skb); | 2175 | __sock_recv_timestamp(msg, sk, skb); |
2180 | else | 2176 | else |
2181 | sk->sk_stamp = kt; | 2177 | sk->sk_stamp = kt; |
@@ -2193,8 +2189,7 @@ static inline void sock_recv_ts_and_drops(struct msghdr *msg, struct sock *sk, | |||
2193 | #define FLAGS_TS_OR_DROPS ((1UL << SOCK_RXQ_OVFL) | \ | 2189 | #define FLAGS_TS_OR_DROPS ((1UL << SOCK_RXQ_OVFL) | \ |
2194 | (1UL << SOCK_RCVTSTAMP) | \ | 2190 | (1UL << SOCK_RCVTSTAMP) | \ |
2195 | (1UL << SOCK_TIMESTAMPING_SOFTWARE) | \ | 2191 | (1UL << SOCK_TIMESTAMPING_SOFTWARE) | \ |
2196 | (1UL << SOCK_TIMESTAMPING_RAW_HARDWARE) | \ | 2192 | (1UL << SOCK_TIMESTAMPING_RAW_HARDWARE)) |
2197 | (1UL << SOCK_TIMESTAMPING_SYS_HARDWARE)) | ||
2198 | 2193 | ||
2199 | if (sk->sk_flags & FLAGS_TS_OR_DROPS) | 2194 | if (sk->sk_flags & FLAGS_TS_OR_DROPS) |
2200 | __sock_recv_ts_and_drops(msg, sk, skb); | 2195 | __sock_recv_ts_and_drops(msg, sk, skb); |
diff --git a/net/core/sock.c b/net/core/sock.c index ca9b65199d28..134291d73fcd 100644 --- a/net/core/sock.c +++ b/net/core/sock.c | |||
@@ -862,8 +862,6 @@ set_rcvbuf: | |||
862 | (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE)); | 862 | (1UL << SOCK_TIMESTAMPING_RX_SOFTWARE)); |
863 | sock_valbool_flag(sk, SOCK_TIMESTAMPING_SOFTWARE, | 863 | sock_valbool_flag(sk, SOCK_TIMESTAMPING_SOFTWARE, |
864 | val & SOF_TIMESTAMPING_SOFTWARE); | 864 | val & SOF_TIMESTAMPING_SOFTWARE); |
865 | sock_valbool_flag(sk, SOCK_TIMESTAMPING_SYS_HARDWARE, | ||
866 | val & SOF_TIMESTAMPING_SYS_HARDWARE); | ||
867 | sock_valbool_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE, | 865 | sock_valbool_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE, |
868 | val & SOF_TIMESTAMPING_RAW_HARDWARE); | 866 | val & SOF_TIMESTAMPING_RAW_HARDWARE); |
869 | break; | 867 | break; |
@@ -1102,8 +1100,6 @@ int sock_getsockopt(struct socket *sock, int level, int optname, | |||
1102 | v.val |= SOF_TIMESTAMPING_RX_SOFTWARE; | 1100 | v.val |= SOF_TIMESTAMPING_RX_SOFTWARE; |
1103 | if (sock_flag(sk, SOCK_TIMESTAMPING_SOFTWARE)) | 1101 | if (sock_flag(sk, SOCK_TIMESTAMPING_SOFTWARE)) |
1104 | v.val |= SOF_TIMESTAMPING_SOFTWARE; | 1102 | v.val |= SOF_TIMESTAMPING_SOFTWARE; |
1105 | if (sock_flag(sk, SOCK_TIMESTAMPING_SYS_HARDWARE)) | ||
1106 | v.val |= SOF_TIMESTAMPING_SYS_HARDWARE; | ||
1107 | if (sock_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE)) | 1103 | if (sock_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE)) |
1108 | v.val |= SOF_TIMESTAMPING_RAW_HARDWARE; | 1104 | v.val |= SOF_TIMESTAMPING_RAW_HARDWARE; |
1109 | break; | 1105 | break; |
diff --git a/net/socket.c b/net/socket.c index abf56b2a14f9..d8222c025061 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -725,14 +725,10 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk, | |||
725 | if (sock_flag(sk, SOCK_TIMESTAMPING_SOFTWARE) && | 725 | if (sock_flag(sk, SOCK_TIMESTAMPING_SOFTWARE) && |
726 | ktime_to_timespec_cond(skb->tstamp, ts + 0)) | 726 | ktime_to_timespec_cond(skb->tstamp, ts + 0)) |
727 | empty = 0; | 727 | empty = 0; |
728 | if (shhwtstamps) { | 728 | if (shhwtstamps && |
729 | if (sock_flag(sk, SOCK_TIMESTAMPING_SYS_HARDWARE) && | 729 | sock_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE) && |
730 | ktime_to_timespec_cond(shhwtstamps->syststamp, ts + 1)) | 730 | ktime_to_timespec_cond(shhwtstamps->hwtstamp, ts + 2)) |
731 | empty = 0; | 731 | empty = 0; |
732 | if (sock_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE) && | ||
733 | ktime_to_timespec_cond(shhwtstamps->hwtstamp, ts + 2)) | ||
734 | empty = 0; | ||
735 | } | ||
736 | if (!empty) | 732 | if (!empty) |
737 | put_cmsg(msg, SOL_SOCKET, | 733 | put_cmsg(msg, SOL_SOCKET, |
738 | SCM_TIMESTAMPING, sizeof(ts), &ts); | 734 | SCM_TIMESTAMPING, sizeof(ts), &ts); |