net-timestamp: move timestamp flags out of sk_flags
sk_flags is reaching its limit. New timestamping options will not fit. Move all of them into a new field sk->sk_tsflags. Added benefit is that this removes boilerplate code to convert between SOF_TIMESTAMPING_.. and SOCK_TIMESTAMPING_.. in getsockopt/setsockopt. SOCK_TIMESTAMPING_RX_SOFTWARE is also used to toggle the receive timestamp logic (netstamp_needed). That can be simplified and this last key removed, but will leave that for a separate patch. Signed-off-by: Willem de Bruijn <willemb@google.com> ---- The u16 in sock can be moved into a 16-bit hole below sk_gso_max_segs, though that scatters tstamp fields throughout the struct. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
f24b9be595
commit
b9f40e21ef
@ -848,22 +848,13 @@ set_rcvbuf:
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
}
|
||||
sock_valbool_flag(sk, SOCK_TIMESTAMPING_TX_HARDWARE,
|
||||
val & SOF_TIMESTAMPING_TX_HARDWARE);
|
||||
sock_valbool_flag(sk, SOCK_TIMESTAMPING_TX_SOFTWARE,
|
||||
val & SOF_TIMESTAMPING_TX_SOFTWARE);
|
||||
sock_valbool_flag(sk, SOCK_TIMESTAMPING_RX_HARDWARE,
|
||||
val & SOF_TIMESTAMPING_RX_HARDWARE);
|
||||
sk->sk_tsflags = val;
|
||||
if (val & SOF_TIMESTAMPING_RX_SOFTWARE)
|
||||
sock_enable_timestamp(sk,
|
||||
SOCK_TIMESTAMPING_RX_SOFTWARE);
|
||||
else
|
||||
sock_disable_timestamp(sk,
|
||||
(1UL << SOCK_TIMESTAMPING_RX_SOFTWARE));
|
||||
sock_valbool_flag(sk, SOCK_TIMESTAMPING_SOFTWARE,
|
||||
val & SOF_TIMESTAMPING_SOFTWARE);
|
||||
sock_valbool_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE,
|
||||
val & SOF_TIMESTAMPING_RAW_HARDWARE);
|
||||
break;
|
||||
|
||||
case SO_RCVLOWAT:
|
||||
@ -1089,19 +1080,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
|
||||
break;
|
||||
|
||||
case SO_TIMESTAMPING:
|
||||
v.val = 0;
|
||||
if (sock_flag(sk, SOCK_TIMESTAMPING_TX_HARDWARE))
|
||||
v.val |= SOF_TIMESTAMPING_TX_HARDWARE;
|
||||
if (sock_flag(sk, SOCK_TIMESTAMPING_TX_SOFTWARE))
|
||||
v.val |= SOF_TIMESTAMPING_TX_SOFTWARE;
|
||||
if (sock_flag(sk, SOCK_TIMESTAMPING_RX_HARDWARE))
|
||||
v.val |= SOF_TIMESTAMPING_RX_HARDWARE;
|
||||
if (sock_flag(sk, SOCK_TIMESTAMPING_RX_SOFTWARE))
|
||||
v.val |= SOF_TIMESTAMPING_RX_SOFTWARE;
|
||||
if (sock_flag(sk, SOCK_TIMESTAMPING_SOFTWARE))
|
||||
v.val |= SOF_TIMESTAMPING_SOFTWARE;
|
||||
if (sock_flag(sk, SOCK_TIMESTAMPING_RAW_HARDWARE))
|
||||
v.val |= SOF_TIMESTAMPING_RAW_HARDWARE;
|
||||
v.val = sk->sk_tsflags;
|
||||
break;
|
||||
|
||||
case SO_RCVTIMEO:
|
||||
|
Reference in New Issue
Block a user