ktime: Get rid of the union
ktime is a union because the initial implementation stored the time in scalar nanoseconds on 64 bit machine and in a endianess optimized timespec variant for 32bit machines. The Y2038 cleanup removed the timespec variant and switched everything to scalar nanoseconds. The union remained, but become completely pointless. Get rid of the union and just keep ktime_t as simple typedef of type s64. The conversion was done with coccinelle and some manual mopping up. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <peterz@infradead.org>
此提交包含在:
@@ -199,11 +199,11 @@ static int bcm_proc_show(struct seq_file *m, void *v)
|
||||
|
||||
seq_printf(m, "%c ", (op->flags & RX_CHECK_DLC) ? 'd' : ' ');
|
||||
|
||||
if (op->kt_ival1.tv64)
|
||||
if (op->kt_ival1)
|
||||
seq_printf(m, "timeo=%lld ",
|
||||
(long long)ktime_to_us(op->kt_ival1));
|
||||
|
||||
if (op->kt_ival2.tv64)
|
||||
if (op->kt_ival2)
|
||||
seq_printf(m, "thr=%lld ",
|
||||
(long long)ktime_to_us(op->kt_ival2));
|
||||
|
||||
@@ -226,11 +226,11 @@ static int bcm_proc_show(struct seq_file *m, void *v)
|
||||
else
|
||||
seq_printf(m, "[%u] ", op->nframes);
|
||||
|
||||
if (op->kt_ival1.tv64)
|
||||
if (op->kt_ival1)
|
||||
seq_printf(m, "t1=%lld ",
|
||||
(long long)ktime_to_us(op->kt_ival1));
|
||||
|
||||
if (op->kt_ival2.tv64)
|
||||
if (op->kt_ival2)
|
||||
seq_printf(m, "t2=%lld ",
|
||||
(long long)ktime_to_us(op->kt_ival2));
|
||||
|
||||
@@ -365,11 +365,11 @@ static void bcm_send_to_user(struct bcm_op *op, struct bcm_msg_head *head,
|
||||
|
||||
static void bcm_tx_start_timer(struct bcm_op *op)
|
||||
{
|
||||
if (op->kt_ival1.tv64 && op->count)
|
||||
if (op->kt_ival1 && op->count)
|
||||
hrtimer_start(&op->timer,
|
||||
ktime_add(ktime_get(), op->kt_ival1),
|
||||
HRTIMER_MODE_ABS);
|
||||
else if (op->kt_ival2.tv64)
|
||||
else if (op->kt_ival2)
|
||||
hrtimer_start(&op->timer,
|
||||
ktime_add(ktime_get(), op->kt_ival2),
|
||||
HRTIMER_MODE_ABS);
|
||||
@@ -380,7 +380,7 @@ static void bcm_tx_timeout_tsklet(unsigned long data)
|
||||
struct bcm_op *op = (struct bcm_op *)data;
|
||||
struct bcm_msg_head msg_head;
|
||||
|
||||
if (op->kt_ival1.tv64 && (op->count > 0)) {
|
||||
if (op->kt_ival1 && (op->count > 0)) {
|
||||
|
||||
op->count--;
|
||||
if (!op->count && (op->flags & TX_COUNTEVT)) {
|
||||
@@ -398,7 +398,7 @@ static void bcm_tx_timeout_tsklet(unsigned long data)
|
||||
}
|
||||
bcm_can_tx(op);
|
||||
|
||||
} else if (op->kt_ival2.tv64)
|
||||
} else if (op->kt_ival2)
|
||||
bcm_can_tx(op);
|
||||
|
||||
bcm_tx_start_timer(op);
|
||||
@@ -459,7 +459,7 @@ static void bcm_rx_update_and_send(struct bcm_op *op,
|
||||
lastdata->flags |= (RX_RECV|RX_THR);
|
||||
|
||||
/* throttling mode inactive ? */
|
||||
if (!op->kt_ival2.tv64) {
|
||||
if (!op->kt_ival2) {
|
||||
/* send RX_CHANGED to the user immediately */
|
||||
bcm_rx_changed(op, lastdata);
|
||||
return;
|
||||
@@ -470,7 +470,7 @@ static void bcm_rx_update_and_send(struct bcm_op *op,
|
||||
return;
|
||||
|
||||
/* first reception with enabled throttling mode */
|
||||
if (!op->kt_lastmsg.tv64)
|
||||
if (!op->kt_lastmsg)
|
||||
goto rx_changed_settime;
|
||||
|
||||
/* got a second frame inside a potential throttle period? */
|
||||
@@ -537,7 +537,7 @@ static void bcm_rx_starttimer(struct bcm_op *op)
|
||||
if (op->flags & RX_NO_AUTOTIMER)
|
||||
return;
|
||||
|
||||
if (op->kt_ival1.tv64)
|
||||
if (op->kt_ival1)
|
||||
hrtimer_start(&op->timer, op->kt_ival1, HRTIMER_MODE_REL);
|
||||
}
|
||||
|
||||
@@ -1005,7 +1005,7 @@ static int bcm_tx_setup(struct bcm_msg_head *msg_head, struct msghdr *msg,
|
||||
op->kt_ival2 = bcm_timeval_to_ktime(msg_head->ival2);
|
||||
|
||||
/* disable an active timer due to zero values? */
|
||||
if (!op->kt_ival1.tv64 && !op->kt_ival2.tv64)
|
||||
if (!op->kt_ival1 && !op->kt_ival2)
|
||||
hrtimer_cancel(&op->timer);
|
||||
}
|
||||
|
||||
@@ -1189,7 +1189,7 @@ static int bcm_rx_setup(struct bcm_msg_head *msg_head, struct msghdr *msg,
|
||||
op->kt_ival2 = bcm_timeval_to_ktime(msg_head->ival2);
|
||||
|
||||
/* disable an active timer due to zero value? */
|
||||
if (!op->kt_ival1.tv64)
|
||||
if (!op->kt_ival1)
|
||||
hrtimer_cancel(&op->timer);
|
||||
|
||||
/*
|
||||
@@ -1201,7 +1201,7 @@ static int bcm_rx_setup(struct bcm_msg_head *msg_head, struct msghdr *msg,
|
||||
bcm_rx_thr_flush(op, 1);
|
||||
}
|
||||
|
||||
if ((op->flags & STARTTIMER) && op->kt_ival1.tv64)
|
||||
if ((op->flags & STARTTIMER) && op->kt_ival1)
|
||||
hrtimer_start(&op->timer, op->kt_ival1,
|
||||
HRTIMER_MODE_REL);
|
||||
}
|
||||
|
@@ -429,7 +429,7 @@ static void can_can_gw_rcv(struct sk_buff *skb, void *data)
|
||||
|
||||
/* clear the skb timestamp if not configured the other way */
|
||||
if (!(gwj->flags & CGW_FLAGS_CAN_SRC_TSTAMP))
|
||||
nskb->tstamp.tv64 = 0;
|
||||
nskb->tstamp = 0;
|
||||
|
||||
/* send to netdevice */
|
||||
if (can_send(nskb, gwj->flags & CGW_FLAGS_CAN_ECHO))
|
||||
|
@@ -1731,14 +1731,14 @@ EXPORT_SYMBOL(net_disable_timestamp);
|
||||
|
||||
static inline void net_timestamp_set(struct sk_buff *skb)
|
||||
{
|
||||
skb->tstamp.tv64 = 0;
|
||||
skb->tstamp = 0;
|
||||
if (static_key_false(&netstamp_needed))
|
||||
__net_timestamp(skb);
|
||||
}
|
||||
|
||||
#define net_timestamp_check(COND, SKB) \
|
||||
if (static_key_false(&netstamp_needed)) { \
|
||||
if ((COND) && !(SKB)->tstamp.tv64) \
|
||||
if ((COND) && !(SKB)->tstamp) \
|
||||
__net_timestamp(SKB); \
|
||||
} \
|
||||
|
||||
|
@@ -4368,7 +4368,7 @@ EXPORT_SYMBOL(skb_try_coalesce);
|
||||
*/
|
||||
void skb_scrub_packet(struct sk_buff *skb, bool xnet)
|
||||
{
|
||||
skb->tstamp.tv64 = 0;
|
||||
skb->tstamp = 0;
|
||||
skb->pkt_type = PACKET_HOST;
|
||||
skb->skb_iif = 0;
|
||||
skb->ignore_df = 0;
|
||||
|
@@ -1038,7 +1038,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
|
||||
skb_shinfo(skb)->gso_size = tcp_skb_mss(skb);
|
||||
|
||||
/* Our usage of tstamp should remain private */
|
||||
skb->tstamp.tv64 = 0;
|
||||
skb->tstamp = 0;
|
||||
|
||||
/* Cleanup our debris for IP stacks */
|
||||
memset(skb->cb, 0, max(sizeof(struct inet_skb_parm),
|
||||
@@ -3203,7 +3203,7 @@ struct sk_buff *tcp_make_synack(const struct sock *sk, struct dst_entry *dst,
|
||||
#endif
|
||||
|
||||
/* Do not fool tcpdump (if any), clean our debris */
|
||||
skb->tstamp.tv64 = 0;
|
||||
skb->tstamp = 0;
|
||||
return skb;
|
||||
}
|
||||
EXPORT_SYMBOL(tcp_make_synack);
|
||||
|
@@ -232,7 +232,7 @@ static bool ipv6_dest_hao(struct sk_buff *skb, int optoff)
|
||||
ipv6h->saddr = hao->addr;
|
||||
hao->addr = tmp_addr;
|
||||
|
||||
if (skb->tstamp.tv64 == 0)
|
||||
if (skb->tstamp == 0)
|
||||
__net_timestamp(skb);
|
||||
|
||||
return true;
|
||||
|
@@ -1809,7 +1809,7 @@ static int ipx_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,
|
||||
rc = skb_copy_datagram_msg(skb, sizeof(struct ipxhdr), msg, copied);
|
||||
if (rc)
|
||||
goto out_free;
|
||||
if (skb->tstamp.tv64)
|
||||
if (skb->tstamp)
|
||||
sk->sk_stamp = skb->tstamp;
|
||||
|
||||
if (sipx) {
|
||||
|
@@ -783,7 +783,7 @@ __nf_conntrack_confirm(struct sk_buff *skb)
|
||||
/* set conntrack timestamp, if enabled. */
|
||||
tstamp = nf_conn_tstamp_find(ct);
|
||||
if (tstamp) {
|
||||
if (skb->tstamp.tv64 == 0)
|
||||
if (skb->tstamp == 0)
|
||||
__net_timestamp(skb);
|
||||
|
||||
tstamp->start = ktime_to_ns(skb->tstamp);
|
||||
|
@@ -538,7 +538,7 @@ __build_packet_message(struct nfnl_log_net *log,
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
if (skb->tstamp.tv64) {
|
||||
if (skb->tstamp) {
|
||||
struct nfulnl_msg_packet_timestamp ts;
|
||||
struct timespec64 kts = ktime_to_timespec64(skb->tstamp);
|
||||
ts.sec = cpu_to_be64(kts.tv_sec);
|
||||
|
@@ -384,7 +384,7 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue,
|
||||
+ nla_total_size(sizeof(u_int32_t)) /* skbinfo */
|
||||
+ nla_total_size(sizeof(u_int32_t)); /* cap_len */
|
||||
|
||||
if (entskb->tstamp.tv64)
|
||||
if (entskb->tstamp)
|
||||
size += nla_total_size(sizeof(struct nfqnl_msg_packet_timestamp));
|
||||
|
||||
size += nfqnl_get_bridge_size(entry);
|
||||
@@ -555,7 +555,7 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue,
|
||||
if (nfqnl_put_bridge(entry, skb) < 0)
|
||||
goto nla_put_failure;
|
||||
|
||||
if (entskb->tstamp.tv64) {
|
||||
if (entskb->tstamp) {
|
||||
struct nfqnl_msg_packet_timestamp ts;
|
||||
struct timespec64 kts = ktime_to_timespec64(entskb->tstamp);
|
||||
|
||||
|
@@ -168,7 +168,7 @@ time_mt(const struct sk_buff *skb, struct xt_action_param *par)
|
||||
* may happen that the same packet matches both rules if
|
||||
* it arrived at the right moment before 13:00.
|
||||
*/
|
||||
if (skb->tstamp.tv64 == 0)
|
||||
if (skb->tstamp == 0)
|
||||
__net_timestamp((struct sk_buff *)skb);
|
||||
|
||||
stamp = ktime_to_ns(skb->tstamp);
|
||||
|
@@ -627,7 +627,7 @@ deliver:
|
||||
* from the network (tstamp will be updated).
|
||||
*/
|
||||
if (G_TC_FROM(skb->tc_verd) & AT_INGRESS)
|
||||
skb->tstamp.tv64 = 0;
|
||||
skb->tstamp = 0;
|
||||
#endif
|
||||
|
||||
if (q->qdisc) {
|
||||
|
@@ -668,7 +668,7 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,
|
||||
|
||||
/* Race occurred between timestamp enabling and packet
|
||||
receiving. Fill in the current time for now. */
|
||||
if (need_software_tstamp && skb->tstamp.tv64 == 0)
|
||||
if (need_software_tstamp && skb->tstamp == 0)
|
||||
__net_timestamp(skb);
|
||||
|
||||
if (need_software_tstamp) {
|
||||
|
@@ -574,7 +574,7 @@ static int svc_udp_recvfrom(struct svc_rqst *rqstp)
|
||||
}
|
||||
len = svc_addr_len(svc_addr(rqstp));
|
||||
rqstp->rq_addrlen = len;
|
||||
if (skb->tstamp.tv64 == 0) {
|
||||
if (skb->tstamp == 0) {
|
||||
skb->tstamp = ktime_get_real();
|
||||
/* Don't enable netstamp, sunrpc doesn't
|
||||
need that much accuracy */
|
||||
|
新增問題並參考
封鎖使用者